Bug 833098: Part 2 - Remove RDF service. r?hsivonen,Mossop draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 28 Apr 2018 20:06:40 -0700
changeset 789559 6dcd8b466cac9f65f02f748bd02709218dd02afe
parent 789558 35e6576c9a049b0a70ef71683bfb78c527a680a0
push id108279
push usermaglione.k@gmail.com
push dateSun, 29 Apr 2018 04:32:28 +0000
reviewershsivonen, Mossop
bugs833098
milestone61.0a1
Bug 833098: Part 2 - Remove RDF service. r?hsivonen,Mossop MozReview-Commit-ID: 32Nl5McAFGJ
browser/components/build/nsModule.cpp
dom/bindings/Bindings.conf
dom/xul/XULDocument.h
dom/xul/nsXULCommandDispatcher.cpp
dom/xul/nsXULContentSink.cpp
dom/xul/nsXULContentUtils.cpp
dom/xul/nsXULContentUtils.h
layout/build/nsLayoutStatics.cpp
rdf/base/moz.build
rdf/base/nsCompositeDataSource.cpp
rdf/base/nsContainerEnumerator.cpp
rdf/base/nsDefaultResourceFactory.cpp
rdf/base/nsIRDFCompositeDataSource.idl
rdf/base/nsIRDFContainer.idl
rdf/base/nsIRDFContainerUtils.idl
rdf/base/nsIRDFContentSink.h
rdf/base/nsIRDFDataSource.idl
rdf/base/nsIRDFDelegateFactory.idl
rdf/base/nsIRDFInMemoryDataSource.idl
rdf/base/nsIRDFInferDataSource.idl
rdf/base/nsIRDFLiteral.idl
rdf/base/nsIRDFNode.idl
rdf/base/nsIRDFObserver.idl
rdf/base/nsIRDFPropagatableDataSource.idl
rdf/base/nsIRDFPurgeableDataSource.idl
rdf/base/nsIRDFRemoteDataSource.idl
rdf/base/nsIRDFResource.idl
rdf/base/nsIRDFService.idl
rdf/base/nsIRDFXMLParser.idl
rdf/base/nsIRDFXMLSerializer.idl
rdf/base/nsIRDFXMLSink.idl
rdf/base/nsIRDFXMLSource.idl
rdf/base/nsInMemoryDataSource.cpp
rdf/base/nsNameSpaceMap.cpp
rdf/base/nsNameSpaceMap.h
rdf/base/nsRDFBaseDataSources.h
rdf/base/nsRDFContainer.cpp
rdf/base/nsRDFContainerUtils.cpp
rdf/base/nsRDFContentSink.cpp
rdf/base/nsRDFResource.cpp
rdf/base/nsRDFResource.h
rdf/base/nsRDFService.cpp
rdf/base/nsRDFService.h
rdf/base/nsRDFXMLDataSource.cpp
rdf/base/nsRDFXMLParser.cpp
rdf/base/nsRDFXMLParser.h
rdf/base/nsRDFXMLSerializer.cpp
rdf/base/nsRDFXMLSerializer.h
rdf/base/rdf.h
rdf/base/rdfIDataSource.idl
rdf/base/rdfITripleVisitor.idl
rdf/base/rdfutil.cpp
rdf/base/rdfutil.h
rdf/build/moz.build
rdf/build/nsRDFCID.h
rdf/build/nsRDFModule.cpp
rdf/datasource/moz.build
rdf/datasource/nsILocalStore.h
rdf/datasource/nsIRDFFTP.h
rdf/datasource/nsLocalStore.cpp
rdf/datasource/nsRDFBuiltInDataSources.h
rdf/moz.build
rdf/tests/moz.build
rdf/tests/unit/sample.rdf
rdf/tests/unit/test_rdfredirect.js
rdf/tests/unit/xpcshell.ini
toolkit/components/build/nsToolkitCompsModule.cpp
toolkit/toolkit.mozbuild
--- a/browser/components/build/nsModule.cpp
+++ b/browser/components/build/nsModule.cpp
@@ -15,17 +15,16 @@
 #elif defined(MOZ_WIDGET_GTK)
 #include "nsGNOMEShellService.h"
 #endif
 
 #if defined(XP_WIN)
 #include "nsIEHistoryEnumerator.h"
 #endif
 
-#include "rdf.h"
 #include "nsFeedSniffer.h"
 #include "AboutRedirector.h"
 #include "nsIAboutModule.h"
 #include "nsSessionStoreUtils.h"
 
 #include "nsNetCID.h"
 
 using namespace mozilla::browser;
--- a/dom/bindings/Bindings.conf
+++ b/dom/bindings/Bindings.conf
@@ -1702,19 +1702,16 @@ addExternalIface('HitRegionOptions', nat
 addExternalIface('imgINotificationObserver', nativeType='imgINotificationObserver')
 addExternalIface('imgIRequest', nativeType='imgIRequest', notflattened=True)
 addExternalIface('LoadContext', nativeType='nsILoadContext', notflattened=True)
 addExternalIface('LoadInfo', nativeType='nsILoadInfo',
                  headerFile='nsILoadInfo.h', notflattened=True)
 addExternalIface('MenuBuilder', nativeType='nsIMenuBuilder', notflattened=True)
 addExternalIface('XULControllers', nativeType='nsIControllers', notflattened=True)
 addExternalIface('MozObserver', nativeType='nsIObserver', notflattened=True)
-addExternalIface('MozRDFCompositeDataSource', nativeType='nsIRDFCompositeDataSource',
-                 notflattened=True)
-addExternalIface('MozRDFResource', nativeType='nsIRDFResource', notflattened=True)
 addExternalIface('MozTreeView', nativeType='nsITreeView',
                   headerFile='nsITreeView.h', notflattened=True)
 addExternalIface('MozWakeLockListener', headerFile='nsIDOMWakeLockListener.h')
 addExternalIface('nsIBrowserDOMWindow', nativeType='nsIBrowserDOMWindow',
                  notflattened=True)
 addExternalIface('nsIEventTarget', nativeType='nsIEventTarget', notflattened=True)
 addExternalIface('nsIFile', nativeType='nsIFile', notflattened=True)
 addExternalIface('nsILoadGroup', nativeType='nsILoadGroup',
--- a/dom/xul/XULDocument.h
+++ b/dom/xul/XULDocument.h
@@ -24,18 +24,16 @@
 #include "nsIXULStore.h"
 
 #include "mozilla/Attributes.h"
 #include "mozilla/dom/ScriptLoader.h"
 
 #include "js/TracingAPI.h"
 #include "js/TypeDecls.h"
 
-class nsIRDFResource;
-class nsIRDFService;
 class nsPIWindowRoot;
 class nsXULPrototypeElement;
 #if 0 // XXXbe save me, scc (need NSCAP_FORWARD_DECL(nsXULPrototypeScript))
 class nsIObjectInputStream;
 class nsIObjectOutputStream;
 #else
 #include "nsIObjectInputStream.h"
 #include "nsIObjectOutputStream.h"
@@ -249,21 +247,16 @@ protected:
 
     already_AddRefed<nsPIWindowRoot> GetWindowRoot();
 
     static void DirectionChanged(const char* aPrefName, void* aData);
 
     // pseudo constants
     static int32_t gRefCnt;
 
-    static nsIRDFService* gRDFService;
-    static nsIRDFResource* kNC_persist;
-    static nsIRDFResource* kNC_attribute;
-    static nsIRDFResource* kNC_value;
-
     static LazyLogModule gXULLog;
 
     nsresult
     Persist(mozilla::dom::Element* aElement,
             int32_t aNameSpaceID,
             nsAtom* aAttribute);
     // Just like Persist but ignores the return value so we can use it
     // as a runnable method.
--- a/dom/xul/nsXULCommandDispatcher.cpp
+++ b/dom/xul/nsXULCommandDispatcher.cpp
@@ -16,17 +16,16 @@
 #include "nsIDOMDocument.h"
 #include "nsIDOMWindow.h"
 #include "nsIDocument.h"
 #include "nsPresContext.h"
 #include "nsIPresShell.h"
 #include "nsIScriptGlobalObject.h"
 #include "nsPIDOMWindow.h"
 #include "nsPIWindowRoot.h"
-#include "nsRDFCID.h"
 #include "nsXULCommandDispatcher.h"
 #include "mozilla/Logging.h"
 #include "nsContentUtils.h"
 #include "nsReadableUtils.h"
 #include "nsCRT.h"
 #include "nsError.h"
 #include "mozilla/BasicEvents.h"
 #include "mozilla/EventDispatcher.h"
--- a/dom/xul/nsXULContentSink.cpp
+++ b/dom/xul/nsXULContentSink.cpp
@@ -29,17 +29,16 @@
 #include "nsIServiceManager.h"
 #include "nsIURL.h"
 #include "nsNameSpaceManager.h"
 #include "nsParserBase.h"
 #include "nsViewManager.h"
 #include "nsIScriptSecurityManager.h"
 #include "nsLayoutCID.h"
 #include "nsNetUtil.h"
-#include "nsRDFCID.h"
 #include "nsString.h"
 #include "nsReadableUtils.h"
 #include "nsXULElement.h"
 #include "mozilla/Logging.h"
 #include "nsCRT.h"
 
 #include "nsXULPrototypeDocument.h"     // XXXbe temporary
 #include "mozilla/css/Loader.h"
--- a/dom/xul/nsXULContentUtils.cpp
+++ b/dom/xul/nsXULContentUtils.cpp
@@ -14,54 +14,37 @@
 #include "mozilla/ArrayUtils.h"
 
 #include "nsCollationCID.h"
 #include "nsCOMPtr.h"
 #include "nsIContent.h"
 #include "nsICollation.h"
 #include "nsIDocument.h"
 #include "nsIDOMXULCommandDispatcher.h"
-#include "nsIRDFService.h"
 #include "nsIServiceManager.h"
 #include "nsXULContentUtils.h"
 #include "nsLayoutCID.h"
-#include "nsRDFCID.h"
 #include "nsString.h"
 #include "nsGkAtoms.h"
 #include "XULDocument.h"
 
 using namespace mozilla;
 using dom::XULDocument;
 
 //------------------------------------------------------------------------
 
-nsIRDFService* nsXULContentUtils::gRDF;
 nsICollation *nsXULContentUtils::gCollation;
 
 //------------------------------------------------------------------------
 // Constructors n' stuff
 //
 
 nsresult
-nsXULContentUtils::Init()
-{
-    static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-    nsresult rv = CallGetService(kRDFServiceCID, &gRDF);
-    if (NS_FAILED(rv)) {
-        return rv;
-    }
-
-    return NS_OK;
-}
-
-
-nsresult
 nsXULContentUtils::Finish()
 {
-    NS_IF_RELEASE(gRDF);
     NS_IF_RELEASE(gCollation);
 
     return NS_OK;
 }
 
 nsICollation*
 nsXULContentUtils::GetCollation()
 {
--- a/dom/xul/nsXULContentUtils.h
+++ b/dom/xul/nsXULContentUtils.h
@@ -13,54 +13,43 @@
 #define nsXULContentUtils_h__
 
 #include "nsISupports.h"
 
 class nsAtom;
 class nsICollation;
 class nsIContent;
 class nsIDocument;
-class nsIRDFService;
 
 namespace mozilla {
 namespace dom {
 class Element;
 }
 }
 
 class nsXULContentUtils
 {
 protected:
-    static nsIRDFService* gRDF;
     static nsICollation *gCollation;
 
     static bool gDisableXULCache;
 
     static int
     DisableXULCacheChangedCallback(const char* aPrefName, void* aClosure);
 
 public:
     static nsresult
-    Init();
-
-    static nsresult
     Finish();
 
     static nsresult
     FindChildByTag(nsIContent *aElement,
                    int32_t aNameSpaceID,
                    nsAtom* aTag,
                    mozilla::dom::Element** aResult);
 
     static nsresult
     SetCommandUpdater(nsIDocument* aDocument, mozilla::dom::Element* aElement);
 
-    static nsIRDFService*
-    RDFService()
-    {
-        return gRDF;
-    }
-
     static nsICollation*
     GetCollation();
 };
 
 #endif // nsXULContentUtils_h__
--- a/layout/build/nsLayoutStatics.cpp
+++ b/layout/build/nsLayoutStatics.cpp
@@ -44,17 +44,16 @@
 #include "nsTextFrame.h"
 #include "nsCCUncollectableMarker.h"
 #include "nsTextFragment.h"
 #include "nsMediaFeatures.h"
 #include "nsCORSListenerProxy.h"
 #include "nsHTMLDNSPrefetch.h"
 #include "nsHtml5Module.h"
 #include "nsHTMLTags.h"
-#include "nsIRDFContentSink.h"	// for RDF atom initialization
 #include "mozilla/dom/FallbackEncoding.h"
 #include "nsFocusManager.h"
 #include "nsListControlFrame.h"
 #include "mozilla/dom/HTMLInputElement.h"
 #include "SVGElementFactory.h"
 #include "nsSVGUtils.h"
 #include "nsMathMLAtoms.h"
 #include "nsMathMLOperators.h"
@@ -176,25 +175,16 @@ nsLayoutStatics::Initialize()
   nsCSSRendering::Init();
 
   rv = nsHTMLDNSPrefetch::Initialize();
   if (NS_FAILED(rv)) {
     NS_ERROR("Could not initialize HTML DNS prefetch");
     return rv;
   }
 
-#ifdef MOZ_XUL
-  rv = nsXULContentUtils::Init();
-  if (NS_FAILED(rv)) {
-    NS_ERROR("Could not initialize nsXULContentUtils");
-    return rv;
-  }
-
-#endif
-
   nsMathMLOperators::AddRefTable();
 
 #ifdef DEBUG
   nsFrame::DisplayReflowStartup();
 #endif
   Attr::Initialize();
 
   rv = txMozillaXSLTProcessor::Startup();
deleted file mode 100644
--- a/rdf/base/moz.build
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-XPIDL_SOURCES += [
-    'nsIRDFCompositeDataSource.idl',
-    'nsIRDFContainer.idl',
-    'nsIRDFContainerUtils.idl',
-    'nsIRDFDataSource.idl',
-    'nsIRDFDelegateFactory.idl',
-    'nsIRDFInferDataSource.idl',
-    'nsIRDFInMemoryDataSource.idl',
-    'nsIRDFLiteral.idl',
-    'nsIRDFNode.idl',
-    'nsIRDFObserver.idl',
-    'nsIRDFPropagatableDataSource.idl',
-    'nsIRDFPurgeableDataSource.idl',
-    'nsIRDFRemoteDataSource.idl',
-    'nsIRDFResource.idl',
-    'nsIRDFService.idl',
-    'nsIRDFXMLParser.idl',
-    'nsIRDFXMLSerializer.idl',
-    'nsIRDFXMLSink.idl',
-    'nsIRDFXMLSource.idl',
-    'rdfIDataSource.idl',
-    'rdfITripleVisitor.idl',
-]
-
-XPIDL_MODULE = 'rdf'
-
-EXPORTS += [
-    'nsIRDFContentSink.h',
-    'nsRDFResource.h',
-    'rdf.h',
-]
-
-UNIFIED_SOURCES += [
-    'nsCompositeDataSource.cpp',
-    'nsContainerEnumerator.cpp',
-    'nsDefaultResourceFactory.cpp',
-    'nsInMemoryDataSource.cpp',
-    'nsNameSpaceMap.cpp',
-    'nsRDFContainer.cpp',
-    'nsRDFContainerUtils.cpp',
-    'nsRDFContentSink.cpp',
-    'nsRDFResource.cpp',
-    'nsRDFService.cpp',
-    'nsRDFXMLDataSource.cpp',
-    'nsRDFXMLParser.cpp',
-    'nsRDFXMLSerializer.cpp',
-    'rdfutil.cpp',
-]
-
-FINAL_LIBRARY = 'xul'
-
-if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
-    CXXFLAGS += ['-Wno-error=shadow']
deleted file mode 100644
--- a/rdf/base/nsCompositeDataSource.cpp
+++ /dev/null
@@ -1,1357 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  A simple composite data source implementation. A composit data
-  source is just a strategy for combining individual data sources into
-  a collective graph.
-
-
-  1) A composite data source holds a sequence of data sources. The set
-     of data sources can be specified during creation of the
-     database. Data sources can also be added/deleted from a database
-     later.
-
-  2) The aggregation mechanism is based on simple super-positioning of
-     the graphs from the datasources. If there is a conflict (i.e.,
-     data source A has a true arc from foo to bar while data source B
-     has a false arc from foo to bar), the data source that it earlier
-     in the sequence wins.
-
-     The implementation below doesn't really do this and needs to be
-     fixed.
-
-*/
-
-#include "xpcom-config.h"
-#include "nsCOMPtr.h"
-#include "nsIComponentManager.h"
-#include "nsIRDFCompositeDataSource.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFObserver.h"
-#include "nsIRDFRemoteDataSource.h"
-#include "nsTArray.h"
-#include "nsCOMArray.h"
-#include "nsArrayEnumerator.h"
-#include "nsString.h"
-#include "rdf.h"
-#include "nsCycleCollectionParticipant.h"
-
-#include "nsEnumeratorUtils.h"
-
-#include "mozilla/Logging.h"
-#include <stdio.h>
-mozilla::LazyLogModule nsRDFLog("RDF");
-
-//----------------------------------------------------------------------
-//
-// CompositeDataSourceImpl
-//
-
-class CompositeEnumeratorImpl;
-class CompositeArcsInOutEnumeratorImpl;
-class CompositeAssertionEnumeratorImpl;
-
-class CompositeDataSourceImpl : public nsIRDFCompositeDataSource,
-                                public nsIRDFObserver
-{
-public:
-    CompositeDataSourceImpl(void);
-    explicit CompositeDataSourceImpl(char** dataSources);
-
-    // nsISupports interface
-    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-    NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(CompositeDataSourceImpl,
-                                             nsIRDFCompositeDataSource)
-
-    // nsIRDFDataSource interface
-    NS_DECL_NSIRDFDATASOURCE
-
-    // nsIRDFCompositeDataSource interface
-    NS_DECL_NSIRDFCOMPOSITEDATASOURCE
-
-    // nsIRDFObserver interface
-    NS_DECL_NSIRDFOBSERVER
-
-    bool HasAssertionN(int n, nsIRDFResource* source,
-                            nsIRDFResource* property,
-                            nsIRDFNode* target,
-                            bool tv);
-
-protected:
-    nsCOMArray<nsIRDFObserver> mObservers;
-    nsCOMArray<nsIRDFDataSource> mDataSources;
-
-    bool        mAllowNegativeAssertions;
-    bool        mCoalesceDuplicateArcs;
-    int32_t     mUpdateBatchNest;
-
-    virtual ~CompositeDataSourceImpl() {}
-
-    friend class CompositeEnumeratorImpl;
-    friend class CompositeArcsInOutEnumeratorImpl;
-    friend class CompositeAssertionEnumeratorImpl;
-};
-
-//----------------------------------------------------------------------
-//
-// CompositeEnumeratorImpl
-//
-
-class CompositeEnumeratorImpl : public nsISimpleEnumerator
-{
-    // nsISupports
-    NS_DECL_ISUPPORTS
-
-    // nsISimpleEnumerator interface
-    NS_DECL_NSISIMPLEENUMERATOR
-
-    // pure abstract methods to be overridden
-    virtual nsresult
-    GetEnumerator(nsIRDFDataSource* aDataSource, nsISimpleEnumerator** aResult) = 0;
-
-    virtual nsresult
-    HasNegation(nsIRDFDataSource* aDataSource, nsIRDFNode* aNode, bool* aResult) = 0;
-
-protected:
-    CompositeEnumeratorImpl(CompositeDataSourceImpl* aCompositeDataSource,
-                            bool aAllowNegativeAssertions,
-                            bool aCoalesceDuplicateArcs);
-
-    virtual ~CompositeEnumeratorImpl();
-
-    CompositeDataSourceImpl* mCompositeDataSource;
-
-    nsISimpleEnumerator* mCurrent;
-    nsIRDFNode*  mResult;
-    int32_t      mNext;
-    AutoTArray<nsCOMPtr<nsIRDFNode>, 8>  mAlreadyReturned;
-    bool mAllowNegativeAssertions;
-    bool mCoalesceDuplicateArcs;
-};
-
-
-CompositeEnumeratorImpl::CompositeEnumeratorImpl(CompositeDataSourceImpl* aCompositeDataSource,
-                                                 bool aAllowNegativeAssertions,
-                                                 bool aCoalesceDuplicateArcs)
-    : mCompositeDataSource(aCompositeDataSource),
-      mCurrent(nullptr),
-      mResult(nullptr),
-	  mNext(0),
-      mAllowNegativeAssertions(aAllowNegativeAssertions),
-      mCoalesceDuplicateArcs(aCoalesceDuplicateArcs)
-{
-    NS_ADDREF(mCompositeDataSource);
-}
-
-
-CompositeEnumeratorImpl::~CompositeEnumeratorImpl(void)
-{
-    NS_IF_RELEASE(mCurrent);
-    NS_IF_RELEASE(mResult);
-    NS_RELEASE(mCompositeDataSource);
-}
-
-NS_IMPL_ADDREF(CompositeEnumeratorImpl)
-NS_IMPL_RELEASE(CompositeEnumeratorImpl)
-NS_IMPL_QUERY_INTERFACE(CompositeEnumeratorImpl, nsISimpleEnumerator)
-
-NS_IMETHODIMP
-CompositeEnumeratorImpl::HasMoreElements(bool* aResult)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    // If we've already queued up a next target, then yep, there are
-    // more elements.
-    if (mResult) {
-        *aResult = true;
-        return NS_OK;
-    }
-
-    // Otherwise, we'll need to find a next target, switching cursors
-    // if necessary.
-    for ( ; mNext < mCompositeDataSource->mDataSources.Count(); ++mNext) {
-        if (! mCurrent) {
-            // We don't have a current enumerator, so create a new one on
-            // the next data source.
-            nsIRDFDataSource* datasource =
-                mCompositeDataSource->mDataSources[mNext];
-
-            rv = GetEnumerator(datasource, &mCurrent);
-            if (NS_FAILED(rv)) return rv;
-            if (rv == NS_RDF_NO_VALUE)
-                continue;
-
-            NS_ASSERTION(mCurrent != nullptr, "you're always supposed to return an enumerator from GetEnumerator, punk.");
-            if (! mCurrent)
-                continue;
-        }
-
-        do {
-            int32_t i;
-
-            bool hasMore;
-            rv = mCurrent->HasMoreElements(&hasMore);
-            if (NS_FAILED(rv)) return rv;
-
-            // Is the current enumerator depleted?
-            if (! hasMore) {
-                NS_RELEASE(mCurrent);
-                break;
-            }
-
-            // Even if the current enumerator has more elements, we still
-            // need to check that the current element isn't masked by
-            // a negation in an earlier data source.
-
-            // "Peek" ahead and pull out the next target.
-            nsCOMPtr<nsISupports> result;
-            rv = mCurrent->GetNext(getter_AddRefs(result));
-            if (NS_FAILED(rv)) return rv;
-
-            rv = result->QueryInterface(NS_GET_IID(nsIRDFNode), (void**) &mResult);
-            if (NS_FAILED(rv)) return rv;
-
-            if (mAllowNegativeAssertions)
-            {
-                // See if any previous data source negates this
-                bool hasNegation = false;
-                for (i = mNext - 1; i >= 0; --i)
-                {
-                    nsIRDFDataSource* datasource =
-                        mCompositeDataSource->mDataSources[i];
-
-                    rv = HasNegation(datasource, mResult, &hasNegation);
-                    if (NS_FAILED(rv)) return rv;
-
-                    if (hasNegation)
-                        break;
-                }
-
-                // if so, we've gotta keep looking
-                if (hasNegation)
-                {
-                    NS_RELEASE(mResult);
-                    continue;
-                }
-            }
-
-            if (mCoalesceDuplicateArcs)
-            {
-                // Now see if we've returned it once already.
-                // XXX N.B. performance here...may want to hash if things get large?
-                bool alreadyReturned = false;
-                for (i = mAlreadyReturned.Length() - 1; i >= 0; --i)
-                {
-                    if (mAlreadyReturned[i] == mResult)
-                    {
-                        alreadyReturned = true;
-                        break;
-                    }
-                }
-                if (alreadyReturned)
-                {
-                    NS_RELEASE(mResult);
-                    continue;
-                }
-            }
-
-            // If we get here, then we've really found one. It'll
-            // remain cached in mResult until GetNext() sucks it out.
-            *aResult = true;
-
-            // Remember that we returned it, so we don't return duplicates.
-
-            // XXX I wonder if we should make unique-checking be
-            // optional. This could get to be pretty expensive (this
-            // implementation turns iteration into O(n^2)).
-
-            if (mCoalesceDuplicateArcs)
-            {
-                mAlreadyReturned.AppendElement(mResult);
-            }
-
-            return NS_OK;
-        } while (1);
-    }
-
-    // if we get here, there aren't any elements left.
-    *aResult = false;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-CompositeEnumeratorImpl::GetNext(nsISupports** aResult)
-{
-    nsresult rv;
-
-    bool hasMore;
-    rv = HasMoreElements(&hasMore);
-    if (NS_FAILED(rv)) return rv;
-
-    if (! hasMore)
-        return NS_ERROR_UNEXPECTED;
-
-    // Don't AddRef: we "transfer" ownership to the caller
-    *aResult = mResult;
-    mResult = nullptr;
-
-    return NS_OK;
-}
-
-//----------------------------------------------------------------------
-//
-// CompositeArcsInOutEnumeratorImpl
-//
-//
-
-class CompositeArcsInOutEnumeratorImpl : public CompositeEnumeratorImpl
-{
-public:
-    enum Type { eArcsIn, eArcsOut };
-
-    virtual ~CompositeArcsInOutEnumeratorImpl();
-
-    virtual nsresult
-    GetEnumerator(nsIRDFDataSource* aDataSource, nsISimpleEnumerator** aResult) override;
-
-    virtual nsresult
-    HasNegation(nsIRDFDataSource* aDataSource, nsIRDFNode* aNode, bool* aResult) override;
-
-    CompositeArcsInOutEnumeratorImpl(CompositeDataSourceImpl* aCompositeDataSource,
-                                     nsIRDFNode* aNode,
-                                     Type aType,
-                                     bool aAllowNegativeAssertions,
-                                     bool aCoalesceDuplicateArcs);
-
-private:
-    nsIRDFNode* mNode;
-    Type        mType;
-};
-
-
-CompositeArcsInOutEnumeratorImpl::CompositeArcsInOutEnumeratorImpl(
-                CompositeDataSourceImpl* aCompositeDataSource,
-                nsIRDFNode* aNode,
-                Type aType,
-                bool aAllowNegativeAssertions,
-                bool aCoalesceDuplicateArcs)
-    : CompositeEnumeratorImpl(aCompositeDataSource, aAllowNegativeAssertions, aCoalesceDuplicateArcs),
-      mNode(aNode),
-      mType(aType)
-{
-    NS_ADDREF(mNode);
-}
-
-CompositeArcsInOutEnumeratorImpl::~CompositeArcsInOutEnumeratorImpl()
-{
-    NS_RELEASE(mNode);
-}
-
-
-nsresult
-CompositeArcsInOutEnumeratorImpl::GetEnumerator(
-                 nsIRDFDataSource* aDataSource,
-                 nsISimpleEnumerator** aResult)
-{
-    if (mType == eArcsIn) {
-        return aDataSource->ArcLabelsIn(mNode, aResult);
-    }
-    else {
-        nsCOMPtr<nsIRDFResource> resource( do_QueryInterface(mNode) );
-        return aDataSource->ArcLabelsOut(resource, aResult);
-    }
-}
-
-nsresult
-CompositeArcsInOutEnumeratorImpl::HasNegation(
-                 nsIRDFDataSource* aDataSource,
-                 nsIRDFNode* aNode,
-                 bool* aResult)
-{
-    *aResult = false;
-    return NS_OK;
-}
-
-
-//----------------------------------------------------------------------
-//
-// CompositeAssertionEnumeratorImpl
-//
-
-class CompositeAssertionEnumeratorImpl : public CompositeEnumeratorImpl
-{
-public:
-    virtual nsresult
-    GetEnumerator(nsIRDFDataSource* aDataSource, nsISimpleEnumerator** aResult) override;
-
-    virtual nsresult
-    HasNegation(nsIRDFDataSource* aDataSource, nsIRDFNode* aNode, bool* aResult) override;
-
-    CompositeAssertionEnumeratorImpl(CompositeDataSourceImpl* aCompositeDataSource,
-                                     nsIRDFResource* aSource,
-                                     nsIRDFResource* aProperty,
-                                     nsIRDFNode* aTarget,
-                                     bool aTruthValue,
-                                     bool aAllowNegativeAssertions,
-                                     bool aCoalesceDuplicateArcs);
-
-    virtual ~CompositeAssertionEnumeratorImpl();
-
-private:
-    nsIRDFResource* mSource;
-    nsIRDFResource* mProperty;
-    nsIRDFNode*     mTarget;
-    bool            mTruthValue;
-};
-
-
-CompositeAssertionEnumeratorImpl::CompositeAssertionEnumeratorImpl(
-                  CompositeDataSourceImpl* aCompositeDataSource,
-                  nsIRDFResource* aSource,
-                  nsIRDFResource* aProperty,
-                  nsIRDFNode* aTarget,
-                  bool aTruthValue,
-                  bool aAllowNegativeAssertions,
-                  bool aCoalesceDuplicateArcs)
-    : CompositeEnumeratorImpl(aCompositeDataSource, aAllowNegativeAssertions, aCoalesceDuplicateArcs),
-      mSource(aSource),
-      mProperty(aProperty),
-      mTarget(aTarget),
-      mTruthValue(aTruthValue)
-{
-    NS_IF_ADDREF(mSource);
-    NS_ADDREF(mProperty); // always must be specified
-    NS_IF_ADDREF(mTarget);
-}
-
-CompositeAssertionEnumeratorImpl::~CompositeAssertionEnumeratorImpl()
-{
-    NS_IF_RELEASE(mSource);
-    NS_RELEASE(mProperty);
-    NS_IF_RELEASE(mTarget);
-}
-
-
-nsresult
-CompositeAssertionEnumeratorImpl::GetEnumerator(
-                 nsIRDFDataSource* aDataSource,
-                 nsISimpleEnumerator** aResult)
-{
-    if (mSource) {
-        return aDataSource->GetTargets(mSource, mProperty, mTruthValue, aResult);
-    }
-    else {
-        return aDataSource->GetSources(mProperty, mTarget, mTruthValue, aResult);
-    }
-}
-
-nsresult
-CompositeAssertionEnumeratorImpl::HasNegation(
-                 nsIRDFDataSource* aDataSource,
-                 nsIRDFNode* aNode,
-                 bool* aResult)
-{
-    if (mSource) {
-        return aDataSource->HasAssertion(mSource, mProperty, aNode, !mTruthValue, aResult);
-    }
-    else {
-        nsCOMPtr<nsIRDFResource> source( do_QueryInterface(aNode) );
-        return aDataSource->HasAssertion(source, mProperty, mTarget, !mTruthValue, aResult);
-    }
-}
-
-////////////////////////////////////////////////////////////////////////
-
-nsresult
-NS_NewRDFCompositeDataSource(nsIRDFCompositeDataSource** result)
-{
-    CompositeDataSourceImpl* db = new CompositeDataSourceImpl();
-    if (! db)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    *result = db;
-    NS_ADDREF(*result);
-    return NS_OK;
-}
-
-
-CompositeDataSourceImpl::CompositeDataSourceImpl(void)
-	: mAllowNegativeAssertions(true),
-	  mCoalesceDuplicateArcs(true),
-      mUpdateBatchNest(0)
-{
-}
-
-//----------------------------------------------------------------------
-//
-// nsISupports interface
-//
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(CompositeDataSourceImpl)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(CompositeDataSourceImpl)
-    uint32_t i, count = tmp->mDataSources.Count();
-    for (i = count; i > 0; --i) {
-        tmp->mDataSources[i - 1]->RemoveObserver(tmp);
-        tmp->mDataSources.RemoveObjectAt(i - 1);
-    }
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mObservers);
-NS_IMPL_CYCLE_COLLECTION_UNLINK_END
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(CompositeDataSourceImpl)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mObservers)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDataSources)
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(CompositeDataSourceImpl)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(CompositeDataSourceImpl)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(CompositeDataSourceImpl)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFCompositeDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFObserver)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFCompositeDataSource)
-    NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIRDFCompositeDataSource)
-NS_INTERFACE_MAP_END
-
-
-//----------------------------------------------------------------------
-//
-// nsIRDFDataSource interface
-//
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetURI(nsACString& aURI)
-{
-    aURI.SetIsVoid(true);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetSource(nsIRDFResource* property,
-                                   nsIRDFNode* target,
-                                   bool tv,
-                                   nsIRDFResource** source)
-{
-	if (!mAllowNegativeAssertions && !tv)
-		return(NS_RDF_NO_VALUE);
-
-    int32_t count = mDataSources.Count();
-    for (int32_t i = 0; i < count; ++i) {
-        nsresult rv;
-        rv = mDataSources[i]->GetSource(property, target, tv, source);
-        if (NS_FAILED(rv)) return rv;
-
-        if (rv == NS_RDF_NO_VALUE)
-            continue;
-
-        if (!mAllowNegativeAssertions) return(NS_OK);
-
-        // okay, found it. make sure we don't have the opposite
-        // asserted in a more local data source
-        if (!HasAssertionN(count-1, *source, property, target, !tv))
-            return NS_OK;
-
-        NS_RELEASE(*source);
-        return NS_RDF_NO_VALUE;
-    }
-    return NS_RDF_NO_VALUE;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetSources(nsIRDFResource* aProperty,
-                                    nsIRDFNode* aTarget,
-                                    bool aTruthValue,
-                                    nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    if (! mAllowNegativeAssertions && ! aTruthValue)
-        return(NS_RDF_NO_VALUE);
-
-    *aResult = new CompositeAssertionEnumeratorImpl(this, nullptr, aProperty,
-                                                    aTarget, aTruthValue,
-                                                    mAllowNegativeAssertions,
-                                                    mCoalesceDuplicateArcs);
-
-    if (! *aResult)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(*aResult);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetTarget(nsIRDFResource* aSource,
-                                   nsIRDFResource* aProperty,
-                                   bool aTruthValue,
-                                   nsIRDFNode** aResult)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    if (! mAllowNegativeAssertions && ! aTruthValue)
-        return(NS_RDF_NO_VALUE);
-
-    int32_t count = mDataSources.Count();
-    for (int32_t i = 0; i < count; ++i) {
-        nsresult rv;
-        rv = mDataSources[i]->GetTarget(aSource, aProperty, aTruthValue,
-                                        aResult);
-        if (NS_FAILED(rv))
-            return rv;
-
-        if (rv == NS_OK) {
-            // okay, found it. make sure we don't have the opposite
-            // asserted in an earlier data source
-
-            if (mAllowNegativeAssertions) {
-                if (HasAssertionN(count-1, aSource, aProperty, *aResult, !aTruthValue)) {
-                    // whoops, it's been negated.
-                    NS_RELEASE(*aResult);
-                    return NS_RDF_NO_VALUE;
-                }
-            }
-            return NS_OK;
-        }
-    }
-
-    // Otherwise, we couldn't find it at all.
-    return NS_RDF_NO_VALUE;
-}
-
-bool
-CompositeDataSourceImpl::HasAssertionN(int n,
-                                       nsIRDFResource* aSource,
-                                       nsIRDFResource* aProperty,
-                                       nsIRDFNode* aTarget,
-                                       bool aTruthValue)
-{
-    nsresult rv;
-    for (int32_t m = 0; m < n; ++m) {
-        bool result;
-        rv = mDataSources[m]->HasAssertion(aSource, aProperty, aTarget,
-                                           aTruthValue, &result);
-        if (NS_FAILED(rv))
-            return false;
-
-        // found it!
-        if (result)
-            return true;
-    }
-    return false;
-}
-
-
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetTargets(nsIRDFResource* aSource,
-                                    nsIRDFResource* aProperty,
-                                    bool aTruthValue,
-                                    nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    if (! mAllowNegativeAssertions && ! aTruthValue)
-        return(NS_RDF_NO_VALUE);
-
-    *aResult =
-        new CompositeAssertionEnumeratorImpl(this,
-                                             aSource, aProperty, nullptr,
-                                             aTruthValue,
-                                             mAllowNegativeAssertions,
-                                             mCoalesceDuplicateArcs);
-
-    if (! *aResult)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(*aResult);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::Assert(nsIRDFResource* aSource,
-                                nsIRDFResource* aProperty,
-                                nsIRDFNode* aTarget,
-                                bool aTruthValue)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    if (! mAllowNegativeAssertions && ! aTruthValue)
-        return(NS_RDF_ASSERTION_REJECTED);
-
-    nsresult rv;
-
-    // XXX Need to add back the stuff for unblocking ...
-
-    // We iterate backwards from the last data source which was added
-    // ("the most remote") to the first ("the most local"), trying to
-    // apply the assertion in each.
-    for (int32_t i = mDataSources.Count() - 1; i >= 0; --i) {
-        rv = mDataSources[i]->Assert(aSource, aProperty, aTarget, aTruthValue);
-        if (NS_RDF_ASSERTION_ACCEPTED == rv)
-            return rv;
-
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    // nobody wanted to accept it
-    return NS_RDF_ASSERTION_REJECTED;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::Unassert(nsIRDFResource* aSource,
-                                  nsIRDFResource* aProperty,
-                                  nsIRDFNode* aTarget)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    // Iterate through each of the datasources, starting with "the
-    // most local" and moving to "the most remote". If _any_ of the
-    // datasources have the assertion, attempt to unassert it.
-    bool unasserted = true;
-    int32_t i;
-    int32_t count = mDataSources.Count();
-    for (i = 0; i < count; ++i) {
-        nsIRDFDataSource* ds = mDataSources[i];
-
-        bool hasAssertion;
-        rv = ds->HasAssertion(aSource, aProperty, aTarget, true, &hasAssertion);
-        if (NS_FAILED(rv)) return rv;
-
-        if (hasAssertion) {
-            rv = ds->Unassert(aSource, aProperty, aTarget);
-            if (NS_FAILED(rv)) return rv;
-
-            if (rv != NS_RDF_ASSERTION_ACCEPTED) {
-                unasserted = false;
-                break;
-            }
-        }
-    }
-
-    // Either none of the datasources had it, or they were all willing
-    // to let it be unasserted.
-    if (unasserted)
-        return NS_RDF_ASSERTION_ACCEPTED;
-
-    // If we get here, one of the datasources already had the
-    // assertion, and was adamant about not letting us remove
-    // it. Iterate from the "most local" to the "most remote"
-    // attempting to assert the negation...
-    for (i = 0; i < count; ++i) {
-        rv = mDataSources[i]->Assert(aSource, aProperty, aTarget, false);
-        if (NS_FAILED(rv)) return rv;
-
-        // Did it take?
-        if (rv == NS_RDF_ASSERTION_ACCEPTED)
-            return rv;
-    }
-
-    // Couln't get anyone to accept the negation, either.
-    return NS_RDF_ASSERTION_REJECTED;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::Change(nsIRDFResource* aSource,
-                                nsIRDFResource* aProperty,
-                                nsIRDFNode* aOldTarget,
-                                nsIRDFNode* aNewTarget)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aOldTarget != nullptr, "null ptr");
-    if (! aOldTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aNewTarget != nullptr, "null ptr");
-    if (! aNewTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    // XXX So we're assuming that a datasource _must_ accept the
-    // atomic change; i.e., we can't split it up across two
-    // datasources. That sucks.
-
-    // We iterate backwards from the last data source which was added
-    // ("the most remote") to the first ("the most local"), trying to
-    // apply the change in each.
-    for (int32_t i = mDataSources.Count() - 1; i >= 0; --i) {
-        rv = mDataSources[i]->Change(aSource, aProperty, aOldTarget, aNewTarget);
-        if (NS_RDF_ASSERTION_ACCEPTED == rv)
-            return rv;
-
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    // nobody wanted to accept it
-    return NS_RDF_ASSERTION_REJECTED;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::Move(nsIRDFResource* aOldSource,
-                              nsIRDFResource* aNewSource,
-                              nsIRDFResource* aProperty,
-                              nsIRDFNode* aTarget)
-{
-    NS_PRECONDITION(aOldSource != nullptr, "null ptr");
-    if (! aOldSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aNewSource != nullptr, "null ptr");
-    if (! aNewSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    // XXX So we're assuming that a datasource _must_ accept the
-    // atomic move; i.e., we can't split it up across two
-    // datasources. That sucks.
-
-    // We iterate backwards from the last data source which was added
-    // ("the most remote") to the first ("the most local"), trying to
-    // apply the assertion in each.
-    for (int32_t i = mDataSources.Count() - 1; i >= 0; --i) {
-        rv = mDataSources[i]->Move(aOldSource, aNewSource, aProperty, aTarget);
-        if (NS_RDF_ASSERTION_ACCEPTED == rv)
-            return rv;
-
-        if (NS_FAILED(rv))
-            return rv;
-    }
-
-    // nobody wanted to accept it
-    return NS_RDF_ASSERTION_REJECTED;
-}
-
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::HasAssertion(nsIRDFResource* aSource,
-                                      nsIRDFResource* aProperty,
-                                      nsIRDFNode* aTarget,
-                                      bool aTruthValue,
-                                      bool* aResult)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    if (! mAllowNegativeAssertions && ! aTruthValue)
-    {
-        *aResult = false;
-        return(NS_OK);
-    }
-
-    nsresult rv;
-
-    // Otherwise, look through all the data sources to see if anyone
-    // has the positive...
-    int32_t count = mDataSources.Count();
-    for (int32_t i = 0; i < count; ++i) {
-        nsIRDFDataSource* datasource = mDataSources[i];
-        rv = datasource->HasAssertion(aSource, aProperty, aTarget, aTruthValue, aResult);
-        if (NS_FAILED(rv)) return rv;
-
-        if (*aResult)
-            return NS_OK;
-
-        if (mAllowNegativeAssertions)
-        {
-            bool hasNegation;
-            rv = datasource->HasAssertion(aSource, aProperty, aTarget, !aTruthValue, &hasNegation);
-            if (NS_FAILED(rv)) return rv;
-
-            if (hasNegation)
-            {
-                *aResult = false;
-                return NS_OK;
-            }
-        }
-    }
-
-    // If we get here, nobody had the assertion at all
-    *aResult = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::AddObserver(nsIRDFObserver* aObserver)
-{
-    NS_PRECONDITION(aObserver != nullptr, "null ptr");
-    if (! aObserver)
-        return NS_ERROR_NULL_POINTER;
-
-    // XXX ensure uniqueness?
-    mObservers.AppendObject(aObserver);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::RemoveObserver(nsIRDFObserver* aObserver)
-{
-    NS_PRECONDITION(aObserver != nullptr, "null ptr");
-    if (! aObserver)
-        return NS_ERROR_NULL_POINTER;
-
-    mObservers.RemoveObject(aObserver);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::HasArcIn(nsIRDFNode *aNode, nsIRDFResource *aArc, bool *result)
-{
-    nsresult rv;
-    *result = false;
-    int32_t count = mDataSources.Count();
-    for (int32_t i = 0; i < count; ++i) {
-        rv = mDataSources[i]->HasArcIn(aNode, aArc, result);
-        if (NS_FAILED(rv)) return rv;
-        if (*result)
-            return NS_OK;
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::HasArcOut(nsIRDFResource *aSource, nsIRDFResource *aArc, bool *result)
-{
-    nsresult rv;
-    *result = false;
-    int32_t count = mDataSources.Count();
-    for (int32_t i = 0; i < count; ++i) {
-        rv = mDataSources[i]->HasArcOut(aSource, aArc, result);
-        if (NS_FAILED(rv)) return rv;
-        if (*result)
-            return NS_OK;
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::ArcLabelsIn(nsIRDFNode* aTarget, nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    nsISimpleEnumerator* result =
-        new CompositeArcsInOutEnumeratorImpl(this, aTarget,
-                                             CompositeArcsInOutEnumeratorImpl::eArcsIn,
-                                             mAllowNegativeAssertions,
-                                             mCoalesceDuplicateArcs);
-
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(result);
-    *aResult = result;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::ArcLabelsOut(nsIRDFResource* aSource,
-                                      nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    nsISimpleEnumerator* result =
-        new CompositeArcsInOutEnumeratorImpl(this, aSource,
-                                             CompositeArcsInOutEnumeratorImpl::eArcsOut,
-                                             mAllowNegativeAssertions,
-                                             mCoalesceDuplicateArcs);
-
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(result);
-    *aResult = result;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetAllResources(nsISimpleEnumerator** aResult)
-{
-    MOZ_ASSERT_UNREACHABLE("CompositeDataSourceImpl::GetAllResources");
-    return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetAllCmds(nsIRDFResource* source,
-                                    nsISimpleEnumerator/*<nsIRDFResource>*/** result)
-{
-    nsresult rv;
-    nsCOMPtr<nsISimpleEnumerator> set;
-
-    for (int32_t i = 0; i < mDataSources.Count(); i++)
-    {
-        nsCOMPtr<nsISimpleEnumerator> dsCmds;
-
-        rv = mDataSources[i]->GetAllCmds(source, getter_AddRefs(dsCmds));
-        if (NS_SUCCEEDED(rv))
-        {
-            nsCOMPtr<nsISimpleEnumerator> tmp;
-            rv = NS_NewUnionEnumerator(getter_AddRefs(tmp), set, dsCmds);
-            set.swap(tmp);
-            if (NS_FAILED(rv)) return(rv);
-        }
-    }
-
-    set.forget(result);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::IsCommandEnabled(nsISupports/* nsIRDFResource container */* aSources,
-                                          nsIRDFResource*   aCommand,
-                                          nsISupports/* nsIRDFResource container */* aArguments,
-                                          bool* aResult)
-{
-    nsresult rv;
-    for (int32_t i = mDataSources.Count() - 1; i >= 0; --i) {
-        bool enabled = true;
-        rv = mDataSources[i]->IsCommandEnabled(aSources, aCommand, aArguments, &enabled);
-        if (NS_FAILED(rv) && (rv != NS_ERROR_NOT_IMPLEMENTED))
-        {
-            return(rv);
-        }
-
-        if (! enabled) {
-            *aResult = false;
-            return(NS_OK);
-        }
-    }
-    *aResult = true;
-    return(NS_OK);
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::DoCommand(nsISupports/* nsIRDFResource container */* aSources,
-                                   nsIRDFResource*   aCommand,
-                                   nsISupports/* nsIRDFResource container */* aArguments)
-{
-    for (int32_t i = mDataSources.Count() - 1; i >= 0; --i) {
-        nsresult rv = mDataSources[i]->DoCommand(aSources, aCommand, aArguments);
-        if (NS_FAILED(rv) && (rv != NS_ERROR_NOT_IMPLEMENTED))
-        {
-            return(rv);   // all datasources must succeed
-        }
-    }
-    return(NS_OK);
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::BeginUpdateBatch()
-{
-    for (int32_t i = mDataSources.Count() - 1; i >= 0; --i) {
-        mDataSources[i]->BeginUpdateBatch();
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::EndUpdateBatch()
-{
-    for (int32_t i = mDataSources.Count() - 1; i >= 0; --i) {
-        mDataSources[i]->EndUpdateBatch();
-    }
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-// nsIRDFCompositeDataSource methods
-// XXX rvg We should make this take an additional argument specifying where
-// in the sequence of data sources (of the db), the new data source should
-// fit in. Right now, the new datasource gets stuck at the end.
-// need to add the observers of the CompositeDataSourceImpl to the new data source.
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetAllowNegativeAssertions(bool *aAllowNegativeAssertions)
-{
-	*aAllowNegativeAssertions = mAllowNegativeAssertions;
-	return(NS_OK);
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::SetAllowNegativeAssertions(bool aAllowNegativeAssertions)
-{
-	mAllowNegativeAssertions = aAllowNegativeAssertions;
-	return(NS_OK);
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetCoalesceDuplicateArcs(bool *aCoalesceDuplicateArcs)
-{
-	*aCoalesceDuplicateArcs = mCoalesceDuplicateArcs;
-	return(NS_OK);
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::SetCoalesceDuplicateArcs(bool aCoalesceDuplicateArcs)
-{
-	mCoalesceDuplicateArcs = aCoalesceDuplicateArcs;
-	return(NS_OK);
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::AddDataSource(nsIRDFDataSource* aDataSource)
-{
-    NS_ASSERTION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    mDataSources.AppendObject(aDataSource);
-    aDataSource->AddObserver(this);
-    return NS_OK;
-}
-
-
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::RemoveDataSource(nsIRDFDataSource* aDataSource)
-{
-    NS_ASSERTION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-
-    if (mDataSources.IndexOf(aDataSource) >= 0) {
-        aDataSource->RemoveObserver(this);
-        mDataSources.RemoveObject(aDataSource);
-    }
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::GetDataSources(nsISimpleEnumerator** _result)
-{
-    // NS_NewArrayEnumerator for an nsCOMArray takes a snapshot of the
-    // current state.
-    return NS_NewArrayEnumerator(_result, mDataSources);
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::OnAssert(nsIRDFDataSource* aDataSource,
-                                  nsIRDFResource* aSource,
-                                  nsIRDFResource* aProperty,
-                                  nsIRDFNode* aTarget)
-{
-    // Make sure that the assertion isn't masked by another
-    // datasource.
-    //
-    // XXX We could make this more efficient if we knew _which_
-    // datasource actually served up the OnAssert(): we could use
-    // HasAssertionN() to only search datasources _before_ the
-    // datasource that coughed up the assertion.
-	nsresult	rv = NS_OK;
-
-	if (mAllowNegativeAssertions)
-	{
-		bool hasAssertion;
-		rv = HasAssertion(aSource, aProperty, aTarget, true, &hasAssertion);
-		if (NS_FAILED(rv)) return rv;
-
-		if (! hasAssertion)
-			return(NS_OK);
-	}
-
-    for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-        mObservers[i]->OnAssert(this, aSource, aProperty, aTarget);
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::OnUnassert(nsIRDFDataSource* aDataSource,
-                                    nsIRDFResource* aSource,
-                                    nsIRDFResource* aProperty,
-                                    nsIRDFNode* aTarget)
-{
-    // Make sure that the un-assertion doesn't just unmask the
-    // same assertion in a different datasource.
-    //
-    // XXX We could make this more efficient if we knew _which_
-    // datasource actually served up the OnAssert(): we could use
-    // HasAssertionN() to only search datasources _before_ the
-    // datasource that coughed up the assertion.
-    nsresult rv;
-
-	if (mAllowNegativeAssertions)
-	{
-		bool hasAssertion;
-		rv = HasAssertion(aSource, aProperty, aTarget, true, &hasAssertion);
-		if (NS_FAILED(rv)) return rv;
-
-		if (hasAssertion)
-			return NS_OK;
-	}
-
-    for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-        mObservers[i]->OnUnassert(this, aSource, aProperty, aTarget);
-    }
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::OnChange(nsIRDFDataSource* aDataSource,
-                                  nsIRDFResource* aSource,
-                                  nsIRDFResource* aProperty,
-                                  nsIRDFNode* aOldTarget,
-                                  nsIRDFNode* aNewTarget)
-{
-    // Make sure that the change is actually visible, and not hidden
-    // by an assertion in a different datasource.
-    //
-    // XXX Because of aggregation, this could actually mutate into a
-    // variety of OnAssert or OnChange notifications, which we'll
-    // ignore for now :-/.
-    for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-        mObservers[i]->OnChange(this, aSource, aProperty,
-                                aOldTarget, aNewTarget);
-    }
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::OnMove(nsIRDFDataSource* aDataSource,
-                                nsIRDFResource* aOldSource,
-                                nsIRDFResource* aNewSource,
-                                nsIRDFResource* aProperty,
-                                nsIRDFNode* aTarget)
-{
-    // Make sure that the move is actually visible, and not hidden
-    // by an assertion in a different datasource.
-    //
-    // XXX Because of aggregation, this could actually mutate into a
-    // variety of OnAssert or OnMove notifications, which we'll
-    // ignore for now :-/.
-    for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-        mObservers[i]->OnMove(this, aOldSource, aNewSource,
-                              aProperty, aTarget);
-    }
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::OnBeginUpdateBatch(nsIRDFDataSource* aDataSource)
-{
-    if (mUpdateBatchNest++ == 0) {
-        for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-            mObservers[i]->OnBeginUpdateBatch(this);
-        }
-    }
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-CompositeDataSourceImpl::OnEndUpdateBatch(nsIRDFDataSource* aDataSource)
-{
-    NS_ASSERTION(mUpdateBatchNest > 0, "badly nested update batch");
-    if (--mUpdateBatchNest == 0) {
-        for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-            mObservers[i]->OnEndUpdateBatch(this);
-        }
-    }
-    return NS_OK;
-}
deleted file mode 100644
--- a/rdf/base/nsContainerEnumerator.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  A simple cursor that enumerates the elements of an RDF container
-  (RDF:Bag, RDF:Seq, or RDF:Alt).
-
-  Caveats
-  -------
-
-  1. This uses an implementation-specific detail to determine the
-     index of the last element in the container; specifically, the RDF
-     utilities maintain a counter attribute on the container that
-     holds the numeric value of the next value that is to be
-     assigned. So, this cursor will bust if you use it with a bag that
-     hasn't been created using the RDF utility routines.
-
- */
-
-#include "nscore.h"
-#include "nsCOMPtr.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIRDFDataSource.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFService.h"
-#include "nsIServiceManager.h"
-#include "nsRDFCID.h"
-#include "nsString.h"
-#include "mozilla/Logging.h"
-#include "rdf.h"
-#include "rdfutil.h"
-
-////////////////////////////////////////////////////////////////////////
-
-class ContainerEnumeratorImpl : public nsISimpleEnumerator {
-private:
-    // pseudo-constants
-    static nsrefcnt              gRefCnt;
-    static nsIRDFResource*       kRDF_nextVal;
-    static nsIRDFContainerUtils* gRDFC;
-
-    nsCOMPtr<nsIRDFDataSource>      mDataSource;
-    nsCOMPtr<nsIRDFResource>        mContainer;
-    nsCOMPtr<nsIRDFResource>        mOrdinalProperty;
-
-    nsCOMPtr<nsISimpleEnumerator>   mCurrent;
-    nsCOMPtr<nsIRDFNode>            mResult;
-    int32_t mNextIndex;
-
-    virtual ~ContainerEnumeratorImpl();
-
-public:
-    ContainerEnumeratorImpl(nsIRDFDataSource* ds, nsIRDFResource* container);
-
-    nsresult Init();
-
-    NS_DECL_ISUPPORTS
-    NS_DECL_NSISIMPLEENUMERATOR
-};
-
-nsrefcnt              ContainerEnumeratorImpl::gRefCnt;
-nsIRDFResource*       ContainerEnumeratorImpl::kRDF_nextVal;
-nsIRDFContainerUtils* ContainerEnumeratorImpl::gRDFC;
-
-
-ContainerEnumeratorImpl::ContainerEnumeratorImpl(nsIRDFDataSource* aDataSource,
-                                                 nsIRDFResource* aContainer)
-    : mDataSource(aDataSource),
-      mContainer(aContainer),
-      mNextIndex(1)
-{
-}
-
-nsresult
-ContainerEnumeratorImpl::Init()
-{
-    if (gRefCnt++ == 0) {
-        nsresult rv;
-
-        NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-        nsCOMPtr<nsIRDFService> rdf = do_GetService(kRDFServiceCID);
-        NS_ASSERTION(rdf != nullptr, "unable to acquire resource manager");
-        if (! rdf)
-            return NS_ERROR_FAILURE;
-
-        rv = rdf->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "nextVal"), &kRDF_nextVal);
-        NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get resource");
-        if (NS_FAILED(rv)) return rv;
-
-        NS_DEFINE_CID(kRDFContainerUtilsCID, NS_RDFCONTAINERUTILS_CID);
-        rv = CallGetService(kRDFContainerUtilsCID, &gRDFC);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    return NS_OK;
-}
-
-
-ContainerEnumeratorImpl::~ContainerEnumeratorImpl()
-{
-    if (--gRefCnt == 0) {
-        NS_IF_RELEASE(kRDF_nextVal);
-        NS_IF_RELEASE(gRDFC);
-    }
-}
-
-NS_IMPL_ISUPPORTS(ContainerEnumeratorImpl, nsISimpleEnumerator)
-
-
-NS_IMETHODIMP
-ContainerEnumeratorImpl::HasMoreElements(bool* aResult)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    // If we've already queued up a next value, then we know there are more elements.
-    if (mResult) {
-        *aResult = true;
-        return NS_OK;
-    }
-
-    // Otherwise, we need to grovel
-
-    // Figure out the upper bound so we'll know when we're done. Since it's
-    // possible that we're targeting a composite datasource, we'll need to
-    // "GetTargets()" and take the maximum value of "nextVal" to know the
-    // upper bound.
-    //
-    // Remember that since nextVal is the next index that we'd assign
-    // to an element in a container, it's *one more* than count of
-    // elements in the container.
-    int32_t max = 0;
-
-    nsCOMPtr<nsISimpleEnumerator> targets;
-    rv = mDataSource->GetTargets(mContainer, kRDF_nextVal, true, getter_AddRefs(targets));
-    if (NS_FAILED(rv)) return rv;
-
-    while (1) {
-        bool hasmore;
-        targets->HasMoreElements(&hasmore);
-        if (! hasmore)
-            break;
-
-        nsCOMPtr<nsISupports> isupports;
-        targets->GetNext(getter_AddRefs(isupports));
-
-        nsCOMPtr<nsIRDFLiteral> nextValLiteral = do_QueryInterface(isupports);
-        if (! nextValLiteral)
-             continue;
-
-         const char16_t *nextValStr;
-         nextValLiteral->GetValueConst(&nextValStr);
-
-         nsresult err;
-         int32_t nextVal = nsAutoString(nextValStr).ToInteger(&err);
-
-         if (nextVal > max)
-             max = nextVal;
-    }
-
-    // Now pre-fetch our next value into mResult.
-    while (mCurrent || mNextIndex < max) {
-
-        // If mCurrent has been depleted, then conjure up a new one
-        if (! mCurrent) {
-            rv = gRDFC->IndexToOrdinalResource(mNextIndex, getter_AddRefs(mOrdinalProperty));
-            if (NS_FAILED(rv)) return rv;
-
-            rv = mDataSource->GetTargets(mContainer, mOrdinalProperty, true, getter_AddRefs(mCurrent));
-            if (NS_FAILED(rv)) return rv;
-
-            ++mNextIndex;
-        }
-
-        if (mCurrent) {
-            bool hasMore;
-            rv = mCurrent->HasMoreElements(&hasMore);
-            if (NS_FAILED(rv)) return rv;
-
-            // Is the current enumerator depleted? If so, iterate to
-            // the next index.
-            if (! hasMore) {
-                mCurrent = nullptr;
-                continue;
-            }
-
-            // "Peek" ahead and pull out the next target.
-            nsCOMPtr<nsISupports> result;
-            rv = mCurrent->GetNext(getter_AddRefs(result));
-            if (NS_FAILED(rv)) return rv;
-
-            mResult = do_QueryInterface(result, &rv);
-            if (NS_FAILED(rv)) return rv;
-
-            *aResult = true;
-            return NS_OK;
-        }
-    }
-
-    // If we get here, we ran out of elements. The cursor is empty.
-    *aResult = false;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-ContainerEnumeratorImpl::GetNext(nsISupports** aResult)
-{
-    nsresult rv;
-
-    bool hasMore;
-    rv = HasMoreElements(&hasMore);
-    if (NS_FAILED(rv)) return rv;
-
-    if (! hasMore)
-        return NS_ERROR_UNEXPECTED;
-
-    NS_ADDREF(*aResult = mResult);
-    mResult = nullptr;
-
-    return NS_OK;
-}
-
-
-////////////////////////////////////////////////////////////////////////
-
-nsresult
-NS_NewContainerEnumerator(nsIRDFDataSource* aDataSource,
-                          nsIRDFResource* aContainer,
-                          nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aContainer != nullptr, "null ptr");
-    if (! aContainer)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    ContainerEnumeratorImpl* result = new ContainerEnumeratorImpl(aDataSource, aContainer);
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(result);
-
-    nsresult rv = result->Init();
-    if (NS_FAILED(rv))
-        NS_RELEASE(result);
-
-    *aResult = result;
-    return rv;
-}
deleted file mode 100644
--- a/rdf/base/nsDefaultResourceFactory.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  The default resource factory implementation. This resource factory
-  produces nsIRDFResource objects for any URI prefix that is not
-  covered by some other factory.
-
- */
-
-#include "nsRDFResource.h"
-
-nsresult
-NS_NewDefaultResource(nsIRDFResource** aResult)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    nsRDFResource* resource = new nsRDFResource();
-    if (! resource)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(resource);
-    *aResult = resource;
-    return NS_OK;
-}
deleted file mode 100644
--- a/rdf/base/nsIRDFCompositeDataSource.idl
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsIRDFDataSource.idl"
-
-interface nsISimpleEnumerator;
-
-/**
- * An nsIRDFCompositeDataSource composes individual data sources, providing
- * the illusion of a single, coherent RDF graph.
- */
-[scriptable, uuid(96343820-307C-11D2-BC15-00805F912FE7)]
-interface nsIRDFCompositeDataSource : nsIRDFDataSource {
-
-    /**
-     *
-     * Set this value to <code>true</code> if the composite datasource
-     * may contains at least one datasource that has <em>negative</em>
-     * assertions. (This is the default.)
-     *
-     * Set this value to <code>false</code> if none of the datasources
-     * being composed contains a negative assertion. This allows the
-     * composite datasource to perform some query optimizations.
-     *
-     * By default, this value is <code>true</true>.
-     */
-    attribute boolean	allowNegativeAssertions;
-
-    /**
-     * Set to <code>true</code> if the composite datasource should
-     * take care to coalesce duplicate arcs when returning values from
-     * queries. (This is the default.)
-     *
-     * Set to <code>false</code> if the composite datasource shouldn't
-     * bother to check for duplicates. This allows the composite
-     * datasource to more efficiently answer queries.
-     *
-     * By default, this value is <code>true</code>.
-     */
-    attribute boolean	coalesceDuplicateArcs;
-
-    /**
-     * Add a datasource the the composite data source.
-     * @param aDataSource the datasource to add to composite
-     */
-    void AddDataSource(in nsIRDFDataSource aDataSource);
-
-    /**
-     * Remove a datasource from the composite data source.
-     * @param aDataSource the datasource to remove from the composite
-     */
-    void RemoveDataSource(in nsIRDFDataSource aDataSource);
-
-    /**
-     * Retrieve the datasources in the composite data source.
-     * @return an nsISimpleEnumerator that will enumerate each
-     * of the datasources in the composite
-     */
-    nsISimpleEnumerator GetDataSources();
-};
-
-%{C++
-extern nsresult
-NS_NewRDFCompositeDataSource(nsIRDFCompositeDataSource** result);
-%}
-
deleted file mode 100644
--- a/rdf/base/nsIRDFContainer.idl
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFDataSource.idl"
-#include "nsIRDFResource.idl"
-#include "nsIRDFNode.idl"
-#include "nsISimpleEnumerator.idl"
-
-// A wrapper for manipulating RDF containers
-[scriptable, uuid(D4214E90-FB94-11D2-BDD8-00104BDE6048)]
-interface nsIRDFContainer : nsISupports {
-    readonly attribute nsIRDFDataSource DataSource;
-    readonly attribute nsIRDFResource   Resource;
-
-    /**
-     * Initialize the container wrapper to the specified resource
-     * using the specified datasource for context.
-     */
-    void Init(in nsIRDFDataSource aDataSource, in nsIRDFResource aContainer);
-
-    /**
-     * Return the number of elements in the container. Note that this
-     * may not always be accurate due to aggregation.
-     */
-    long GetCount();
-
-    /**
-     * Return an enumerator that can be used to enumerate the contents
-     * of the container in ascending order.
-     */
-    nsISimpleEnumerator GetElements();
-
-    /**
-     * Append an element to the container, assigning it the next
-     * available ordinal.
-     */
-    void AppendElement(in nsIRDFNode aElement);
-
-    /**
-     * Remove the first occurence of the specified element from the
-     * container. If aRenumber is 'true', then the underlying RDF graph
-     * will be 're-numbered' to account for the removal.
-     */
-    void RemoveElement(in nsIRDFNode aElement, in boolean aRenumber);
-
-    /**
-     * Insert aElement at the specified index. If aRenumber is 'true', then
-     * the underlying RDF graph will be 're-numbered' to accomodate the new
-     * element.
-     */
-    void InsertElementAt(in nsIRDFNode aElement, in long aIndex, in boolean aRenumber);
-
-    /**
-     * Remove the element at the specified index. If aRenumber is 'true', then
-     * the underlying RDF graph will be 're-numbered' to account for the
-     * removal.
-     *
-     * @return the element that was removed.
-     */
-    nsIRDFNode RemoveElementAt(in long aIndex, in boolean aRenumber);
-
-    /**
-     * Determine the index of an element in the container.
-     *
-     * @return The index of the specified element in the container. If
-     * the element is not contained in the container, this function
-     * returns '-1'.
-     */
-    long IndexOf(in nsIRDFNode aElement);
-};
-
-%{C++
-nsresult
-NS_NewRDFContainer(nsIRDFContainer** aResult);
-
-nsresult
-NS_NewRDFContainer(nsIRDFDataSource* aDataSource,
-                   nsIRDFResource* aResource,
-                   nsIRDFContainer** aResult);
-
-/**
- * Create a cursor on a container that enumerates its contents in
- * order
- */
-nsresult
-NS_NewContainerEnumerator(nsIRDFDataSource* aDataSource,
-                          nsIRDFResource* aContainer,
-                          nsISimpleEnumerator** aResult);
-
-
-%}
deleted file mode 100644
--- a/rdf/base/nsIRDFContainerUtils.idl
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFContainer.idl"
-#include "nsIRDFResource.idl"
-
-
-// Container utilities
-[scriptable, uuid(D4214E91-FB94-11D2-BDD8-00104BDE6048)]
-interface nsIRDFContainerUtils : nsISupports {
-    /**
-     * Returns 'true' if the property is an RDF ordinal property.
-     */
-    boolean IsOrdinalProperty(in nsIRDFResource aProperty);
-
-    /**
-     * Convert the specified index to an ordinal property.
-     */
-    nsIRDFResource IndexToOrdinalResource(in long aIndex);
-
-    /**
-     * Convert the specified ordinal property into an index
-     */
-    long OrdinalResourceToIndex(in nsIRDFResource aOrdinal);
-
-    /**
-     * Return 'true' if the specified resource is a container
-     */
-    boolean IsContainer(in nsIRDFDataSource aDataSource, in nsIRDFResource aResource);
-
-    /**
-     * Return 'true' if the specified resource is a container and it is empty
-     */
-    boolean IsEmpty(in nsIRDFDataSource aDataSource, in nsIRDFResource aResource);
-
-    /**
-     * Return 'true' if the specified resource is a bag
-     */
-    boolean IsBag(in nsIRDFDataSource aDataSource, in nsIRDFResource aResource);
-
-    /**
-     * Return 'true' if the specified resource is a sequence
-     */
-    boolean IsSeq(in nsIRDFDataSource aDataSource, in nsIRDFResource aResource);
-
-    /**
-     * Return 'true' if the specified resource is an alternation
-     */
-    boolean IsAlt(in nsIRDFDataSource aDataSource, in nsIRDFResource aResource);
-
-    /**
-     * Decorates the specified resource appropriately to make it
-     * usable as an empty bag in the specified data source.
-     */
-    nsIRDFContainer MakeBag(in nsIRDFDataSource aDataSource, in nsIRDFResource aResource);
-
-    /**
-     * Decorates the specified resource appropriately to make it
-     * usable as an empty sequence in the specified data source.
-     */
-    nsIRDFContainer MakeSeq(in nsIRDFDataSource aDataSource, in nsIRDFResource aResource);
-
-    /**
-     * Decorates the specified resource appropriately to make it
-     * usable as an empty alternation in the specified data source.
-     */
-    nsIRDFContainer MakeAlt(in nsIRDFDataSource aDataSource, in nsIRDFResource aResource);
-
-    /**
-     * Retrieve the index of element in the container. Returns -1 if
-     * the element is not in the container.
-     */
-    long indexOf(in nsIRDFDataSource aDataSource, in nsIRDFResource aContainer, in nsIRDFNode aElement);
-};
-
-%{C++
-extern nsresult
-NS_NewRDFContainerUtils(nsIRDFContainerUtils** aResult);
-%}
deleted file mode 100644
--- a/rdf/base/nsIRDFContentSink.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  An RDF-specific content sink. The content sink is targeted by the
-  parser for building the RDF content model.
-
- */
-
-#ifndef nsIRDFContentSink_h___
-#define nsIRDFContentSink_h___
-
-#include "nsIXMLContentSink.h"
-class nsIRDFDataSource;
-class nsIURI;
-
-// {3a7459d7-d723-483c-aef0-404fc48e09b8}
-#define NS_IRDFCONTENTSINK_IID \
-{ 0x3a7459d7, 0xd723, 0x483c, { 0xae, 0xf0, 0x40, 0x4f, 0xc4, 0x8e, 0x09, 0xb8 } }
-
-/**
- * This interface represents a content sink for RDF files.
- */
-
-class nsIRDFContentSink : public nsIXMLContentSink {
-public:
-    NS_DECLARE_STATIC_IID_ACCESSOR(NS_IRDFCONTENTSINK_IID)
-
-    /**
-     * Initialize the content sink.
-     */
-    NS_IMETHOD Init(nsIURI* aURL) = 0;
-
-    /**
-     * Set the content sink's RDF Data source
-     */
-    NS_IMETHOD SetDataSource(nsIRDFDataSource* aDataSource) = 0;
-
-    /**
-     * Retrieve the content sink's RDF data source.
-     */
-    NS_IMETHOD GetDataSource(nsIRDFDataSource*& rDataSource) = 0;
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsIRDFContentSink, NS_IRDFCONTENTSINK_IID)
-
-/**
- * This constructs a content sink that can be used without a
- * document, say, to create a stand-alone in-memory graph.
- */
-nsresult
-NS_NewRDFContentSink(nsIRDFContentSink** aResult);
-
-#endif // nsIRDFContentSink_h___
deleted file mode 100644
--- a/rdf/base/nsIRDFDataSource.idl
+++ /dev/null
@@ -1,181 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFResource.idl"
-#include "nsIRDFNode.idl"
-#include "nsISimpleEnumerator.idl"
-#include "nsIRDFObserver.idl"
-
-[scriptable, uuid(0F78DA58-8321-11d2-8EAC-00805F29F370)]
-interface nsIRDFDataSource : nsISupports
-{
-    /** The "URI" of the data source. This used by the RDF service's
-     * |GetDataSource()| method to cache datasources.
-     */
-    readonly attribute ACString URI;
-
-    /** Find an RDF resource that points to a given node over the
-     * specified arc & truth value
-     *
-     * @throws NS_RDF_NO_VALUE if there is no source that leads
-     * to the target with the specified property.
-     */
-    nsIRDFResource GetSource(in nsIRDFResource aProperty,
-                             in nsIRDFNode     aTarget,
-                             in boolean        aTruthValue);
-
-    /**
-     * Find all RDF resources that point to a given node over the
-     * specified arc & truth value
-     */
-    nsISimpleEnumerator GetSources(in nsIRDFResource aProperty,
-                                   in nsIRDFNode     aTarget,
-                                   in boolean        aTruthValue);
-
-    /**
-     * Find a child of that is related to the source by the given arc
-     * arc and truth value
-     *
-     * @throws NS_RDF_NO_VALUE if there is no target accessible from the
-     * source via the specified property.
-     */
-    nsIRDFNode GetTarget(in nsIRDFResource aSource,
-                         in nsIRDFResource aProperty,
-                         in boolean        aTruthValue);
-
-    /**
-     * Find all children of that are related to the source by the given arc
-     * arc and truth value.
-     */
-    nsISimpleEnumerator GetTargets(in nsIRDFResource aSource,
-                                   in nsIRDFResource aProperty,
-                                   in boolean aTruthValue);
-
-    /**
-     * Add an assertion to the graph.
-     */
-    void Assert(in nsIRDFResource aSource, 
-                in nsIRDFResource aProperty, 
-                in nsIRDFNode     aTarget,
-                in boolean        aTruthValue);
-
-    /**
-     * Remove an assertion from the graph.
-     */
-    void Unassert(in nsIRDFResource aSource,
-                  in nsIRDFResource aProperty,
-                  in nsIRDFNode     aTarget);
-
-    /**
-     * Change an assertion from
-     *
-     *   [aSource]--[aProperty]-->[aOldTarget]
-     *
-     * to
-     * 
-     *   [aSource]--[aProperty]-->[aNewTarget]
-     */
-    void Change(in nsIRDFResource aSource,
-                in nsIRDFResource aProperty,
-                in nsIRDFNode     aOldTarget,
-                in nsIRDFNode     aNewTarget);
-
-    /**
-     * 'Move' an assertion from
-     *
-     *   [aOldSource]--[aProperty]-->[aTarget]
-     *
-     * to
-     * 
-     *   [aNewSource]--[aProperty]-->[aTarget]
-     */
-    void Move(in nsIRDFResource aOldSource,
-              in nsIRDFResource aNewSource,
-              in nsIRDFResource aProperty,
-              in nsIRDFNode     aTarget);
-
-    /**
-     * Query whether an assertion exists in this graph.
-     */
-    boolean HasAssertion(in nsIRDFResource aSource,
-                         in nsIRDFResource aProperty,
-                         in nsIRDFNode     aTarget,
-                         in boolean        aTruthValue);
-
-    /**
-     * Add an observer to this data source. If the datasource
-     * supports observers, the datasource source should hold a strong
-     * reference to the observer.
-     */
-    void AddObserver(in nsIRDFObserver aObserver);
-
-    /**
-     * Remove an observer from this data source.
-     */
-    void RemoveObserver(in nsIRDFObserver aObserver);
-
-    /**
-     * Get a cursor to iterate over all the arcs that point into a node.
-     */
-    nsISimpleEnumerator ArcLabelsIn(in nsIRDFNode aNode);
-
-    /**
-     * Get a cursor to iterate over all the arcs that originate in
-     * a resource.
-     */
-    nsISimpleEnumerator ArcLabelsOut(in nsIRDFResource aSource);
-
-    /**
-     * Retrieve all of the resources that the data source currently
-     * refers to.
-     */
-    nsISimpleEnumerator GetAllResources();
-
-    /**
-     * Returns whether a given command is enabled for a set of sources. 
-     */
-    boolean IsCommandEnabled(in nsISupports aSources,
-                             in nsIRDFResource   aCommand,
-                             in nsISupports aArguments);
-
-    /**
-     * Perform the specified command on set of sources.
-     */
-    void DoCommand(in nsISupports aSources,
-                   in nsIRDFResource   aCommand,
-                   in nsISupports aArguments);
-
-    /**
-     * Returns the set of all commands defined for a given source.
-     */
-    nsISimpleEnumerator GetAllCmds(in nsIRDFResource aSource);
-
-    /**
-     * Returns true if the specified node is pointed to by the specified arc.
-     * Equivalent to enumerating ArcLabelsIn and comparing for the specified arc.
-     */
-    boolean hasArcIn(in nsIRDFNode aNode, in nsIRDFResource aArc);
-
-    /**
-     * Returns true if the specified node has the specified outward arc.
-     * Equivalent to enumerating ArcLabelsOut and comparing for the specified arc.
-     */
-    boolean hasArcOut(in nsIRDFResource aSource, in nsIRDFResource aArc);
-
-    /**
-     * Notify observers that the datasource is about to send several
-     * notifications at once.
-     * This must be followed by calling endUpdateBatch(), otherwise
-     * viewers will get out of sync.
-     */
-    void beginUpdateBatch();
-
-    /**
-     * Notify observers that the datasource has completed issuing
-     * a notification group.
-     */
-    void endUpdateBatch();
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFDelegateFactory.idl
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  An interface used for runtime pseudo-aggregation of RDF delegate
-  objects.
-
-*/
-
-#include "nsrootidl.idl"
-#include "nsISupports.idl"
-interface nsIRDFResource;
-
-/**
- * This interface should be implemented by an XPCOM factory that
- * is registered to handle "@mozilla.org/rdf/delegate-factory/[key]/[scheme];1"
- * ContractIDs.
- *
- * The factory will be invoked to create delegate objects from
- * nsIRDFResource::GetDelegate().
- */
-[scriptable, uuid(A1B89470-A124-11d3-BE59-0020A6361667)]
-interface nsIRDFDelegateFactory : nsISupports
-{
-    /**
-     * Create a delegate for the specified RDF resource.
-     *
-     * The created delegate should forward AddRef() and Release()
-     * calls to the aOuter object.
-     */
-    void CreateDelegate(in nsIRDFResource aOuter,
-                        in string aKey,
-                        in nsIIDRef aIID,
-                        [retval, iid_is(aIID)] out nsQIResult aResult);
-};
-
-
deleted file mode 100644
--- a/rdf/base/nsIRDFInMemoryDataSource.idl
+++ /dev/null
@@ -1,14 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFResource.idl"
-#include "nsIRDFNode.idl"
-
-[scriptable, uuid(17C4E0AA-1DD2-11B2-8029-BF6F668DE500)]
-interface nsIRDFInMemoryDataSource : nsISupports
-{
-    void EnsureFastContainment(in nsIRDFResource aSource);
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFInferDataSource.idl
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsIRDFDataSource.idl"
-
-/**
- * An nsIRDFInferDataSource is implemented by a infer engine. This
- * engine mimics assertions in addition to those in the baseDataSource
- * according to a particular vocabulary.
- * Infer engines have contract IDs in the form of
- * "@mozilla.org/rdf/infer-datasource;1?engine="
- */
-
-[scriptable, uuid(2b04860f-4017-40f6-8a57-784a1e35077a)]
-interface nsIRDFInferDataSource : nsIRDFDataSource {
-    /**
-     *
-     * The wrapped datasource.
-     *
-     * The InferDataSource contains all arcs from the wrapped
-     * datasource plus those infered by the vocabulary implemented
-     * by the InferDataSource.
-     */
-    attribute nsIRDFDataSource baseDataSource;
-};
-
deleted file mode 100644
--- a/rdf/base/nsIRDFLiteral.idl
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsIRDFNode.idl"
-
-%{C++
-#include "nscore.h" // for char16_t
-%}
-
-[ptr] native const_octet_ptr(const uint8_t);
-
-/**
- * A literal node in the graph, whose value is a string.
- */
-[scriptable, uuid(E0C493D2-9542-11d2-8EB8-00805F29F370)]
-interface nsIRDFLiteral : nsIRDFNode {
-    /**
-     * The Unicode string value of the literal.
-     */
-    readonly attribute wstring Value;
-
-    /**
-     * An unscriptable version used to avoid a string copy. Meant
-     * for use as a performance optimization.
-     */
-    [noscript] void GetValueConst([shared] out wstring aConstValue);
-};
-
-/**
- * A literal node in the graph, whose value is a date
- */
-[scriptable, uuid(E13A24E1-C77A-11d2-80BE-006097B76B8E)]
-interface nsIRDFDate : nsIRDFNode {
-    /**
-     * The date value of the literal
-     */
-    readonly attribute PRTime Value;
-};
-
-/**
- * A literal node in the graph, whose value is an integer
- */
-[scriptable, uuid(E13A24E3-C77A-11d2-80BE-006097B76B8E)]
-interface nsIRDFInt : nsIRDFNode {
-    /**
-     * The integer value of the literal
-     */
-    readonly attribute long Value;
-};
-
-/**
- * A literal node in the graph, whose value is arbitrary
- * binary data.
- */
-[scriptable, uuid(237f85a2-1dd2-11b2-94af-8122582fc45e)]
-interface nsIRDFBlob : nsIRDFNode {
-    /**
-     * The binary data.
-     */
-    [noscript] readonly attribute const_octet_ptr value;
-
-    /**
-     * The data's length.
-     */
-    readonly attribute long length;
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFNode.idl
+++ /dev/null
@@ -1,15 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-
-// An nsIRDFNode object is an abstract placeholder for a node in the
-// RDF data model. Its concreted implementations (e.g., nsIRDFResource
-// or nsIRDFLiteral) are the actual objects that populate the graph.
-[scriptable, uuid(0F78DA50-8321-11d2-8EAC-00805F29F370)]
-interface nsIRDFNode : nsISupports {
-    // Determine if two nodes are identical
-    boolean EqualsNode(in nsIRDFNode aNode);
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFObserver.idl
+++ /dev/null
@@ -1,94 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFResource.idl"
-#include "nsIRDFNode.idl"
-
-interface nsIRDFDataSource;
-
-// An nsIRDFObserver object is an observer that will be notified
-// when assertions are made or removed from a datasource
-[scriptable, uuid(3CC75360-484A-11D2-BC16-00805F912FE7)]
-interface nsIRDFObserver : nsISupports {
-    /**
-     * This method is called whenever a new assertion is made
-     * in the data source
-     * @param aDataSource the datasource that is issuing
-     *   the notification.
-     * @param aSource the subject of the assertion
-     * @param aProperty the predicate of the assertion
-     * @param aTarget the object of the assertion
-     */
-    void onAssert(in nsIRDFDataSource aDataSource,
-                  in nsIRDFResource aSource,
-                  in nsIRDFResource aProperty,
-                  in nsIRDFNode     aTarget);
-
-    /**
-     * This method is called whenever an assertion is removed
-     * from the data source
-     * @param aDataSource the datasource that is issuing
-     *   the notification.
-     * @param aSource the subject of the assertion
-     * @param aProperty the predicate of the assertion
-     * @param aTarget the object of the assertion
-     */
-    void onUnassert(in nsIRDFDataSource aDataSource,
-                    in nsIRDFResource aSource,
-                    in nsIRDFResource aProperty,
-                    in nsIRDFNode     aTarget);
-
-    /**
-     * This method is called when the object of an assertion
-     * changes from one value to another.
-     * @param aDataSource the datasource that is issuing
-     *   the notification.
-     * @param aSource the subject of the assertion
-     * @param aProperty the predicate of the assertion
-     * @param aOldTarget the old object of the assertion
-     * @param aNewTarget the new object of the assertion
-     */
-    void onChange(in nsIRDFDataSource aDataSource,
-                  in nsIRDFResource aSource,
-                  in nsIRDFResource aProperty,
-                  in nsIRDFNode     aOldTarget,
-                  in nsIRDFNode     aNewTarget);
-
-    /**
-     * This method is called when the subject of an assertion
-     * changes from one value to another.
-     * @param aDataSource the datasource that is issuing
-     *   the notification.
-     * @param aOldSource the old subject of the assertion
-     * @param aNewSource the new subject of the assertion
-     * @param aProperty the predicate of the assertion
-     * @param aTarget the object of the assertion
-     */
-    void onMove(in nsIRDFDataSource aDataSource,
-                in nsIRDFResource aOldSource,
-                in nsIRDFResource aNewSource,
-                in nsIRDFResource aProperty,
-                in nsIRDFNode     aTarget);
-
-    /**
-     * This method is called when a datasource is about to
-     * send several notifications at once. The observer can
-     * use this as a cue to optimize its behavior. The observer
-     * can expect the datasource to call endUpdateBatch() when
-     * the group of notifications has completed.
-     * @param aDataSource the datasource that is going to
-     *   be issuing the notifications.
-     */
-    void onBeginUpdateBatch(in nsIRDFDataSource aDataSource);
-
-    /**
-     * This method is called when a datasource has completed
-     * issuing a notification group.
-     * @param aDataSource the datasource that has finished
-     *   issuing a group of notifications
-     */
-    void onEndUpdateBatch(in nsIRDFDataSource aDataSource);
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFPropagatableDataSource.idl
+++ /dev/null
@@ -1,27 +0,0 @@
-/* -*- Mode: idl; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-
-#include "nsISupports.idl"
-
-/**
- * An nsIRDFPropagatableDataSource provides an ability to suppress
- * synchronization notifications.
- */
-[scriptable, uuid(5a9b4770-9fcb-4307-a12e-4b6708e78b97)]
-interface nsIRDFPropagatableDataSource: nsISupports {
-
-  /**
-   * Set this value to <code>true</code> to enable synchronization
-   * notifications.
-   *
-   * Set this value to <code>false</code> to disable synchronization
-   * notifications.
-   *
-   * By default, this value is <code>true</code>.
-   */
-  attribute boolean propagateChanges;
-
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFPurgeableDataSource.idl
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFResource.idl"
-#include "nsIRDFNode.idl"
-
-[scriptable, uuid(951700F0-FED0-11D2-BDD9-00104BDE6048)]
-interface nsIRDFPurgeableDataSource : nsISupports
-{
-    boolean Mark(in nsIRDFResource aSource,
-                 in nsIRDFResource aProperty,
-                 in nsIRDFNode aTarget,
-                 in boolean aTruthValue);
-
-    void Sweep();
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFRemoteDataSource.idl
+++ /dev/null
@@ -1,44 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-
-/**
- * A datasource that may load asynchronously
- */
-[scriptable, uuid(1D297320-27F7-11d3-BE01-000064657374)]
-interface nsIRDFRemoteDataSource : nsISupports
-{
-    /**
-     * This value is <code>true</code> when the datasource has
-     * fully loaded itself.
-     */
-    readonly attribute boolean loaded;
-
-    /**
-     * Specify the URI for the data source: this is the prefix
-     * that will be used to register the data source in the
-     * data source registry.
-     * @param aURI the URI to load
-     */
-    void Init(in string aURI);
-
-    /**
-     * Refresh the remote datasource, re-loading its contents
-     * from the URI.
-     *
-     * @param aBlocking If <code>true</code>, the call will block
-     * until the datasource has completely reloaded.
-     */
-    void Refresh(in boolean aBlocking);
-
-    /**
-     * Request that a data source write its contents out to 
-     * permanent storage, if applicable.
-     */
-    void Flush();
-    void FlushTo(in string aURI);
-};
-
deleted file mode 100644
--- a/rdf/base/nsIRDFResource.idl
+++ /dev/null
@@ -1,81 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsrootidl.idl"
-#include "nsIRDFNode.idl"
-
-
-/**
- * An nsIRDFResource is an object that has unique identity in the 
- * RDF data model. The object's identity is determined by its URI.
- */
-[scriptable, uuid(fb9686a7-719a-49dc-9107-10dea5739341)]
-interface nsIRDFResource : nsIRDFNode {
-    /**
-     * The single-byte string value of the resource.
-     * @note THIS IS OBSOLETE. C++ should use GetValueConst and script
-     *       should use .valueUTF8
-     */
-    readonly attribute string Value;
-
-    /**
-     * The UTF-8 URI of the resource.
-     */
-    readonly attribute AUTF8String ValueUTF8;
-
-    /**
-     * An unscriptable version used to avoid a string copy. Meant
-     * for use as a performance optimization. The string is encoded
-     * in UTF-8.
-     */
-    [noscript] void GetValueConst([shared] out string aConstValue);
-
-    /**
-     * This method is called by the nsIRDFService after constructing
-     * a resource object to initialize its URI. You would not normally
-     * call this method directly
-     */
-    void Init(in string uri);
-
-    /**
-     * Determine if the resource has the given URI.
-     */
-    boolean EqualsString(in string aURI);
-
-    /**
-     * Retrieve the "delegate" object for this resource. A resource
-     * may have several delegate objects, each of whose lifetimes is
-     * bound to the life of the resource object.
-     *
-     * This method will return the delegate for the given key after
-     * QueryInterface()-ing it to the requested IID.
-     *
-     * If no delegate exists for the specified key, this method will
-     * attempt to create one using the component manager. Specifically,
-     * it will combine aKey with the resource's URI scheme to produce
-     * a ContractID as follows:
-     *
-     *   component:/rdf/delegate-factory/[key]/[scheme]
-     *
-     * This ContractID will be used to locate a factory using the
-     * FindFactory() method of nsIComponentManager. If the nsIFactory
-     * exists, it will be used to create a "delegate factory"; that
-     * is, an object that supports nsIRDFDelegateFactory. The delegate
-     * factory will be used to construct the delegate object.
-     */
-    void GetDelegate(in string aKey, in nsIIDRef aIID,
-                     [iid_is(aIID),retval] out nsQIResult aResult);
-
-    /**
-     * Force a delegate to be "unbound" from the resource.
-     *
-     * Normally, a delegate object's lifetime will be identical to
-     * that of the resource to which it is bound; this method allows a
-     * delegate to unlink itself from an RDF resource prematurely.
-     */
-    void ReleaseDelegate(in string aKey);
-};
-
-
deleted file mode 100644
--- a/rdf/base/nsIRDFService.idl
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFResource.idl"
-#include "nsIRDFLiteral.idl"
-#include "nsIRDFDataSource.idl"
-
-
-/**
- * The RDF service interface. This is a singleton object which should be
- * obtained from the <code>nsServiceManager</code>.
- */
-[scriptable, uuid(BFD05261-834C-11d2-8EAC-00805F29F370)]
-interface nsIRDFService : nsISupports {
-    /**
-     * Construct an RDF resource from a single-byte URI. <code>nsIRDFService</code>
-     * caches resources that are in-use, so multiple calls to <code>GetResource()</code>
-     * for the same <code>uri</code> will return identical pointers. FindResource
-     * is used to find out whether there already exists a resource corresponding to that url.
-     */
-    nsIRDFResource GetResource(in AUTF8String aURI);
-
-    /**
-     * Construct an RDF resource from a Unicode URI. This is provided
-     * as a convenience method, allowing automatic, in-line C++
-     * conversion from <code>nsString</code> objects. The <code>uri</code> will
-     * be converted to a single-byte representation internally.
-     */
-    nsIRDFResource GetUnicodeResource(in AString aURI);
-
-    nsIRDFResource GetAnonymousResource();
-
-    /**
-     * Construct an RDF literal from a Unicode string.
-     */
-    nsIRDFLiteral  GetLiteral(in wstring aValue);
-
-    /**
-     * Construct an RDF literal from a PRTime.
-     */
-    nsIRDFDate     GetDateLiteral(in PRTime aValue);
-
-    /**
-     * Construct an RDF literal from an int.
-     */
-    nsIRDFInt      GetIntLiteral(in long aValue);
-
-    /**
-     * Construct an RDF literal from a data blob
-     */
-    [noscript] nsIRDFBlob getBlobLiteral(in const_octet_ptr aValue, in long aLength);
-
-    boolean IsAnonymousResource(in nsIRDFResource aResource);
-
-    /**
-     * Registers a resource with the RDF system, making it unique w.r.t.
-     * GetResource.
-     *
-     * An implementation of nsIRDFResource should call this in its
-     * Init() method if it wishes the resource to be globally unique
-     * (which is usually the case).
-     *
-     * @note that the resource will <i>not</i> be ref-counted by the
-     * RDF service: the assumption is that the resource implementation
-     * will call nsIRDFService::UnregisterResource() when the last
-     * reference to the resource is released.
-     *
-     * @note that the nsIRDFService implementation may choose to
-     * maintain a reference to the resource's URI; therefore, the
-     * resource implementation should ensure that the resource's URI
-     * (accessible via nsIRDFResource::GetValue(const char* *aURI)) is
-     * valid before calling RegisterResource(). Furthermore, the
-     * resource implementation should ensure that this pointer
-     * <i>remains</i> valid for the lifetime of the resource. (The
-     * implementation of the resource cache in nsIRDFService uses the
-     * URI maintained "internally" in the resource as a key into the
-     * cache rather than copying the resource URI itself.)
-     */
-    void RegisterResource(in nsIRDFResource aResource, in boolean aReplace);
-
-    /**
-     * Called to notify the resource manager that a resource is no
-     * longer in use. This method should only be called from the
-     * destructor of a "custom" resource implementation to notify the
-     * RDF service that the last reference to the resource has been
-     * released, so the resource is no longer valid.
-     *
-     * @note As mentioned in nsIRDFResourceFactory::CreateResource(),
-     * the RDF service will use the result of
-     * nsIRDFResource::GetValue() as a key into its cache. For this
-     * reason, you must always un-cache the resource <b>before</b>
-     * releasing the storage for the <code>const char*</code> URI.
-     */
-    void UnregisterResource(in nsIRDFResource aResource);
-
-    /**
-     * Register a <i>named data source</i>. The RDF service will call
-     * <code>nsIRDFDataSource::GetURI()</code> to determine the URI under
-     * which to register the data source.
-     *
-     * @note that the data source will <i>not</i> be refcounted by the
-     * RDF service! The assumption is that an RDF data source
-     * registers with the service once it is initialized (via
-     * <code>nsIRDFDataSource::Init()</code>), and unregisters when the
-     * last reference to the data source is released.
-     */
-    void RegisterDataSource(in nsIRDFDataSource aDataSource,
-                            in boolean          aReplace);
-
-    /**
-     * Unregister a <i>named data source</i>. The RDF service will call
-     * <code>nsIRDFDataSource::GetURI()</code> to determine the URI under which the
-     * data source was registered.
-     */
-    void UnregisterDataSource(in nsIRDFDataSource aDataSource);
-
-    /**
-     * Get the <i>named data source</i> corresponding to the URI. If a data
-     * source has been registered via <code>RegisterDataSource()</code>, that
-     * data source will be returned.
-     *
-     * If no data source is currently
-     * registered for the specified URI, and a data source <i>constructor</i>
-     * function has been registered via <code>RegisterDatasourceConstructor()</code>,
-     * the RDF service will call the constructor to attempt to construct a
-     * new data source. If construction is successful, the data source will
-     * be initialized via <code>nsIRDFDataSource::Init()</code>.
-     */
-    nsIRDFDataSource GetDataSource(in string aURI);
-
-    /**
-     * Same as GetDataSource, but if a remote/XML data source needs to be
-     * constructed, then this method will issue a <b>blocking</b> Refresh
-     * call on that data source.
-     */
-    nsIRDFDataSource GetDataSourceBlocking(in string aURI);
-};
-
-%{C++
-extern nsresult
-NS_NewRDFService(nsIRDFService** result);
-%}
-
deleted file mode 100644
--- a/rdf/base/nsIRDFXMLParser.idl
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFDataSource.idl"
-#include "nsIStreamListener.idl"
-#include "nsIURI.idl"
-
-[scriptable, uuid(1831dd2e-1dd2-11b2-bdb3-86b7b50b70b5)]
-interface nsIRDFXMLParser : nsISupports
-{
-    /**
-     * Create a stream listener that can be used to asynchronously
-     * parse RDF/XML.
-     * @param aSink the RDF datasource the will receive the data
-     * @param aBaseURI the base URI used to resolve relative
-     *   references in the RDF/XML
-     * @return an nsIStreamListener object to handle the data
-     */
-    nsIStreamListener parseAsync(in nsIRDFDataSource aSink, in nsIURI aBaseURI);
-
-    /**
-     * Parse a string of RDF/XML
-     * @param aSink the RDF datasource that will receive the data
-     * @param aBaseURI the base URI used to resolve relative
-     *   references in the RDF/XML
-     * @param aSource a UTF8 string containing RDF/XML data.
-     */
-    void parseString(in nsIRDFDataSource aSink, in nsIURI aBaseURI, in AUTF8String aSource);
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFXMLSerializer.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIRDFDataSource.idl"
-
-%{C++
-class nsAtom;
-%}
-[ptr] native nsAtomPtr(nsAtom);
-
-[scriptable, uuid(8ae1fbf8-1dd2-11b2-bd21-d728069cca92)]
-interface nsIRDFXMLSerializer : nsISupports
-{
-    /**
-     * Initialize the serializer with the specified datasource.
-     * @param aDataSource the datasource from which data will be
-     *   serialized
-     */
-    void init(in nsIRDFDataSource aDataSource);
-
-    /**
-     * Add the specified namespace to the serializer.
-     * @param aPrefix the attribute namespace prefix
-     * @param aURI the namespace URI
-     */
-    [noscript] void addNameSpace(in nsAtomPtr aPrefix, in DOMString aURI);
-};
deleted file mode 100644
--- a/rdf/base/nsIRDFXMLSink.idl
+++ /dev/null
@@ -1,133 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  Interfaces for the RDF/XML sink, which parses RDF/XML into
-  a graph representation.
-
-*/
-
-#include "nsISupports.idl"
-
-%{C++
-class nsAtom;
-%}
-[ptr] native nsAtomPtr(nsAtom);
-
-// XXX Until these get scriptable. See nsIRDFXMLSink::AddNameSpace()
-[ref] native nsStringRef(nsString);
-%{C++
-#include "nsStringFwd.h"
-%}
-
-interface nsIRDFXMLSink;
-
-/**
- * An observer that is notified as progress is made on the load
- * of an RDF/XML document in an <code>nsIRDFXMLSink</code>.
- */
-[scriptable, uuid(EB1A5D30-AB33-11D2-8EC6-00805F29F370)]
-interface nsIRDFXMLSinkObserver : nsISupports
-{
-    /**
-     * Called when the load begins.
-     * @param aSink the RDF/XML sink on which the load is beginning.
-     */
-    void onBeginLoad(in nsIRDFXMLSink aSink);
-
-    /**
-     * Called when the load is suspended (e.g., for network quantization).
-     * @param aSink the RDF/XML sink that is being interrupted.
-     */
-    void onInterrupt(in nsIRDFXMLSink aSink);
-
-    /**
-     * Called when a suspended load is resuming.
-     * @param aSink the RDF/XML sink that is resuming.
-     */
-    void onResume(in nsIRDFXMLSink aSink);
-
-    /**
-     * Called when an RDF/XML load completes successfully.
-     * @param aSink the RDF/XML sink that has finished loading.
-     */
-    void onEndLoad(in nsIRDFXMLSink aSink);
-
-    /**
-     * Called when an error occurs during the load
-     * @param aSink the RDF/XML sink in which the error occurred
-     * @param aStatus the networking result code
-     * @param aErrorMsg an error message, if applicable
-     */
-    void onError(in nsIRDFXMLSink aSink, in nsresult aStatus, in wstring aErrorMsg);
-};
-
-
-
-/**
- * A "sink" that receives and processes RDF/XML. This interface is used
- * by the RDF/XML parser.
- */
-[scriptable, uuid(EB1A5D31-AB33-11D2-8EC6-00805F29F370)]
-interface nsIRDFXMLSink : nsISupports
-{
-    /**
-     * Set to <code>true</code> if the sink is read-only and cannot
-     * be modified
-     */
-    attribute boolean readOnly;
-
-    /**
-     * Initiate the RDF/XML load.
-     */
-    void beginLoad();
-
-    /**
-     * Suspend the RDF/XML load.
-     */
-    void interrupt();
-
-    /**
-     * Resume the RDF/XML load.
-     */
-    void resume();
-
-    /**
-     * Complete the RDF/XML load.
-     */
-    void endLoad();
-
-    /**
-     * Add namespace information to the RDF/XML sink.
-     * @param aPrefix the namespace prefix
-     * @param aURI the namespace URI
-     */
-    [noscript] void addNameSpace(in nsAtomPtr aPrefix,
-                                 [const] in nsStringRef aURI);
-
-    /**
-     * Add an observer that will be notified as the RDF/XML load
-     * progresses.
-     * <p>
-     *
-     * Note that the sink will acquire a strong reference to the
-     * observer, so care should be taken to avoid cyclical references
-     * that cannot be released (i.e., if the observer holds a
-     * reference to the sink, it should be sure that it eventually
-     * clears the reference).
-     *
-     * @param aObserver the observer to add to the sink's set of
-     * load observers.
-     */
-    void addXMLSinkObserver(in nsIRDFXMLSinkObserver aObserver);
-
-    /**
-     * Remove an observer from the sink's set of observers.
-     * @param aObserver the observer to remove.
-     */
-    void removeXMLSinkObserver(in nsIRDFXMLSinkObserver aObserver);
-};
-
deleted file mode 100644
--- a/rdf/base/nsIRDFXMLSource.idl
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-#include "nsIOutputStream.idl"
-
-[scriptable, uuid(4DA56F10-99FE-11d2-8EBB-00805F29F370)]
-interface nsIRDFXMLSource : nsISupports
-{
-    /**
-     * Serialize the contents of the datasource to aStream.
-     * @param aStream the output stream the will receive the
-     *   RDF/XML. Currently, the output stream need only
-     *   implement the |write()| method.
-     */
-    void Serialize(in nsIOutputStream aStream);
-};
-
deleted file mode 100644
--- a/rdf/base/nsInMemoryDataSource.cpp
+++ /dev/null
@@ -1,1938 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  Implementation for an in-memory RDF data store.
-
-  TO DO
-
-  1) Instrument this code to gather space and time performance
-     characteristics.
-
-  2) Optimize lookups for datasources which have a small number
-     of properties + fanning out to a large number of targets.
-
-  3) Complete implementation of thread-safety; specifically, make
-     assertions be reference counted objects (so that a cursor can
-     still refer to an assertion that gets removed from the graph).
-
- */
-
-#include "nsAgg.h"
-#include "nsCOMPtr.h"
-#include "nscore.h"
-#include "nsArrayEnumerator.h"
-#include "nsIOutputStream.h"
-#include "nsIRDFDataSource.h"
-#include "nsIRDFLiteral.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFObserver.h"
-#include "nsIRDFInMemoryDataSource.h"
-#include "nsIRDFPropagatableDataSource.h"
-#include "nsIRDFPurgeableDataSource.h"
-#include "nsIRDFService.h"
-#include "nsIServiceManager.h"
-#include "nsCOMArray.h"
-#include "nsEnumeratorUtils.h"
-#include "nsTArray.h"
-#include "nsCRT.h"
-#include "nsRDFCID.h"
-#include "nsRDFBaseDataSources.h"
-#include "nsString.h"
-#include "nsReadableUtils.h"
-#include "nsString.h"
-#include "rdfutil.h"
-#include "PLDHashTable.h"
-#include "plstr.h"
-#include "mozilla/Logging.h"
-#include "rdf.h"
-
-#include "rdfIDataSource.h"
-#include "rdfITripleVisitor.h"
-
-using mozilla::LogLevel;
-
-// This struct is used as the slot value in the forward and reverse
-// arcs hash tables.
-//
-// Assertion objects are reference counted, because each Assertion's
-// ownership is shared between the datasource and any enumerators that
-// are currently iterating over the datasource.
-//
-class Assertion
-{
-public:
-    Assertion(nsIRDFResource* aSource,      // normal assertion
-              nsIRDFResource* aProperty,
-              nsIRDFNode* aTarget,
-              bool aTruthValue);
-    explicit Assertion(nsIRDFResource* aSource);     // PLDHashTable assertion variant
-
-private:
-    ~Assertion();
-
-public:
-    void AddRef() {
-        if (mRefCnt == UINT16_MAX) {
-            NS_WARNING("refcount overflow, leaking Assertion");
-            return;
-        }
-        ++mRefCnt;
-    }
-
-    void Release() {
-        if (mRefCnt == UINT16_MAX) {
-            NS_WARNING("refcount overflow, leaking Assertion");
-            return;
-        }
-        if (--mRefCnt == 0)
-            delete this;
-    }
-
-    // For nsIRDFPurgeableDataSource
-    inline  void    Mark()      { u.as.mMarked = true; }
-    inline  bool    IsMarked()  { return u.as.mMarked; }
-    inline  void    Unmark()    { u.as.mMarked = false; }
-
-    // public for now, because I'm too lazy to go thru and clean this up.
-
-    // These are shared between hash/as (see the union below)
-    nsIRDFResource*         mSource;
-    Assertion*              mNext;
-
-    union
-    {
-        struct hash
-        {
-            PLDHashTable*  mPropertyHash;
-        } hash;
-        struct as
-        {
-            nsIRDFResource* mProperty;
-            nsIRDFNode*     mTarget;
-            Assertion*      mInvNext;
-            // make sure bool are final elements
-            bool            mTruthValue;
-            bool            mMarked;
-        } as;
-    } u;
-
-    // also shared between hash/as (see the union above)
-    // but placed after union definition to ensure that
-    // all 32-bit entries are long aligned
-    uint16_t                    mRefCnt;
-    bool                        mHashEntry;
-};
-
-
-struct Entry : PLDHashEntryHdr {
-    nsIRDFNode*     mNode;
-    Assertion*      mAssertions;
-};
-
-
-Assertion::Assertion(nsIRDFResource* aSource)
-    : mSource(aSource),
-      mNext(nullptr),
-      mRefCnt(0),
-      mHashEntry(true)
-{
-    MOZ_COUNT_CTOR(Assertion);
-
-    NS_ADDREF(mSource);
-
-    u.hash.mPropertyHash =
-        new PLDHashTable(PLDHashTable::StubOps(), sizeof(Entry));
-}
-
-Assertion::Assertion(nsIRDFResource* aSource,
-                     nsIRDFResource* aProperty,
-                     nsIRDFNode* aTarget,
-                     bool aTruthValue)
-    : mSource(aSource),
-      mNext(nullptr),
-      mRefCnt(0),
-      mHashEntry(false)
-{
-    MOZ_COUNT_CTOR(Assertion);
-
-    u.as.mProperty = aProperty;
-    u.as.mTarget = aTarget;
-
-    NS_ADDREF(mSource);
-    NS_ADDREF(u.as.mProperty);
-    NS_ADDREF(u.as.mTarget);
-
-    u.as.mInvNext = nullptr;
-    u.as.mTruthValue = aTruthValue;
-    u.as.mMarked = false;
-}
-
-Assertion::~Assertion()
-{
-    if (mHashEntry && u.hash.mPropertyHash) {
-        for (auto i = u.hash.mPropertyHash->Iter(); !i.Done(); i.Next()) {
-            auto entry = static_cast<Entry*>(i.Get());
-            Assertion* as = entry->mAssertions;
-            while (as) {
-                Assertion* doomed = as;
-                as = as->mNext;
-
-                // Unlink, and release the datasource's reference.
-                doomed->mNext = doomed->u.as.mInvNext = nullptr;
-                doomed->Release();
-            }
-        }
-        delete u.hash.mPropertyHash;
-        u.hash.mPropertyHash = nullptr;
-    }
-
-    MOZ_COUNT_DTOR(Assertion);
-#ifdef DEBUG_REFS
-    --gInstanceCount;
-    fprintf(stdout, "%d - RDF: Assertion\n", gInstanceCount);
-#endif
-
-    NS_RELEASE(mSource);
-    if (!mHashEntry)
-    {
-        NS_RELEASE(u.as.mProperty);
-        NS_RELEASE(u.as.mTarget);
-    }
-}
-
-////////////////////////////////////////////////////////////////////////
-// InMemoryDataSource
-class InMemoryArcsEnumeratorImpl;
-class InMemoryAssertionEnumeratorImpl;
-class InMemoryResourceEnumeratorImpl;
-
-class InMemoryDataSource : public nsIRDFDataSource,
-                           public nsIRDFInMemoryDataSource,
-                           public nsIRDFPropagatableDataSource,
-                           public nsIRDFPurgeableDataSource,
-                           public rdfIDataSource
-{
-protected:
-    // These hash tables are keyed on pointers to nsIRDFResource
-    // objects (the nsIRDFService ensures that there is only ever one
-    // nsIRDFResource object per unique URI). The value of an entry is
-    // an Assertion struct, which is a linked list of (subject
-    // predicate object) triples.
-    PLDHashTable mForwardArcs;
-    PLDHashTable mReverseArcs;
-
-    nsCOMArray<nsIRDFObserver> mObservers;
-    uint32_t                   mNumObservers;
-
-    // VisitFoo needs to block writes, [Un]Assert only allowed
-    // during mReadCount == 0
-    uint32_t mReadCount;
-
-    friend class InMemoryArcsEnumeratorImpl;
-    friend class InMemoryAssertionEnumeratorImpl;
-    friend class InMemoryResourceEnumeratorImpl; // b/c it needs to enumerate mForwardArcs
-
-    // Thread-safe writer implementation methods.
-    nsresult
-    LockedAssert(nsIRDFResource* source,
-                 nsIRDFResource* property,
-                 nsIRDFNode* target,
-                 bool tv);
-
-    nsresult
-    LockedUnassert(nsIRDFResource* source,
-                   nsIRDFResource* property,
-                   nsIRDFNode* target);
-
-    explicit InMemoryDataSource(nsISupports* aOuter);
-    virtual ~InMemoryDataSource();
-
-    friend nsresult
-    NS_NewRDFInMemoryDataSource(nsISupports* aOuter, const nsIID& aIID, void** aResult);
-
-public:
-    NS_DECL_CYCLE_COLLECTING_AGGREGATED
-    NS_DECL_AGGREGATED_CYCLE_COLLECTION_CLASS(InMemoryDataSource)
-
-    // nsIRDFDataSource methods
-    NS_DECL_NSIRDFDATASOURCE
-
-    // nsIRDFInMemoryDataSource methods
-    NS_DECL_NSIRDFINMEMORYDATASOURCE
-
-    // nsIRDFPropagatableDataSource methods
-    NS_DECL_NSIRDFPROPAGATABLEDATASOURCE
-
-    // nsIRDFPurgeableDataSource methods
-    NS_DECL_NSIRDFPURGEABLEDATASOURCE
-
-    // rdfIDataSource methods
-    NS_DECL_RDFIDATASOURCE
-
-protected:
-    struct SweepInfo {
-        Assertion* mUnassertList;
-        PLDHashTable* mReverseArcs;
-    };
-
-    static void
-    SweepForwardArcsEntries(PLDHashTable* aTable, SweepInfo* aArg);
-
-public:
-    // Implementation methods
-    Assertion*
-    GetForwardArcs(nsIRDFResource* u) {
-        PLDHashEntryHdr* hdr = mForwardArcs.Search(u);
-        return hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-    }
-
-    Assertion*
-    GetReverseArcs(nsIRDFNode* v) {
-        PLDHashEntryHdr* hdr = mReverseArcs.Search(v);
-        return hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-    }
-
-    void
-    SetForwardArcs(nsIRDFResource* u, Assertion* as) {
-        if (as) {
-            auto entry =
-                static_cast<Entry*>(mForwardArcs.Add(u, mozilla::fallible));
-            if (entry) {
-                entry->mNode = u;
-                entry->mAssertions = as;
-            }
-        }
-        else {
-            mForwardArcs.Remove(u);
-        }
-    }
-
-    void
-    SetReverseArcs(nsIRDFNode* v, Assertion* as) {
-        if (as) {
-            auto entry =
-                static_cast<Entry*>(mReverseArcs.Add(v, mozilla::fallible));
-            if (entry) {
-                entry->mNode = v;
-                entry->mAssertions = as;
-            }
-        }
-        else {
-            mReverseArcs.Remove(v);
-        }
-    }
-
-    void
-    LogOperation(const char* aOperation,
-                 nsIRDFResource* asource,
-                 nsIRDFResource* aProperty,
-                 nsIRDFNode* aTarget,
-                 bool aTruthValue = true);
-
-    bool    mPropagateChanges;
-
-private:
-    static mozilla::LazyLogModule gLog;
-};
-
-mozilla::LazyLogModule InMemoryDataSource::gLog("InMemoryDataSource");
-
-//----------------------------------------------------------------------
-//
-// InMemoryAssertionEnumeratorImpl
-//
-
-/**
- * InMemoryAssertionEnumeratorImpl
- */
-class InMemoryAssertionEnumeratorImpl : public nsISimpleEnumerator
-{
-private:
-    InMemoryDataSource* mDataSource;
-    nsIRDFResource* mSource;
-    nsIRDFResource* mProperty;
-    nsIRDFNode*     mTarget;
-    nsIRDFNode*     mValue;
-    bool            mTruthValue;
-    Assertion*      mNextAssertion;
-
-    virtual ~InMemoryAssertionEnumeratorImpl();
-
-public:
-    InMemoryAssertionEnumeratorImpl(InMemoryDataSource* aDataSource,
-                                    nsIRDFResource* aSource,
-                                    nsIRDFResource* aProperty,
-                                    nsIRDFNode* aTarget,
-                                    bool aTruthValue);
-
-    // nsISupports interface
-    NS_DECL_ISUPPORTS
-
-    // nsISimpleEnumerator interface
-    NS_DECL_NSISIMPLEENUMERATOR
-};
-
-////////////////////////////////////////////////////////////////////////
-
-
-InMemoryAssertionEnumeratorImpl::InMemoryAssertionEnumeratorImpl(
-                 InMemoryDataSource* aDataSource,
-                 nsIRDFResource* aSource,
-                 nsIRDFResource* aProperty,
-                 nsIRDFNode* aTarget,
-                 bool aTruthValue)
-    : mDataSource(aDataSource),
-      mSource(aSource),
-      mProperty(aProperty),
-      mTarget(aTarget),
-      mValue(nullptr),
-      mTruthValue(aTruthValue),
-      mNextAssertion(nullptr)
-{
-    NS_ADDREF(mDataSource);
-    NS_IF_ADDREF(mSource);
-    NS_ADDREF(mProperty);
-    NS_IF_ADDREF(mTarget);
-
-    if (mSource) {
-        mNextAssertion = mDataSource->GetForwardArcs(mSource);
-
-        if (mNextAssertion && mNextAssertion->mHashEntry) {
-            // its our magical HASH_ENTRY forward hash for assertions
-            PLDHashEntryHdr* hdr =
-                mNextAssertion->u.hash.mPropertyHash->Search(aProperty);
-            mNextAssertion =
-                hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        }
-    }
-    else {
-        mNextAssertion = mDataSource->GetReverseArcs(mTarget);
-    }
-
-    // Add an owning reference from the enumerator
-    if (mNextAssertion)
-        mNextAssertion->AddRef();
-}
-
-InMemoryAssertionEnumeratorImpl::~InMemoryAssertionEnumeratorImpl()
-{
-#ifdef DEBUG_REFS
-    --gInstanceCount;
-    fprintf(stdout, "%d - RDF: InMemoryAssertionEnumeratorImpl\n", gInstanceCount);
-#endif
-
-    if (mNextAssertion)
-        mNextAssertion->Release();
-
-    NS_IF_RELEASE(mDataSource);
-    NS_IF_RELEASE(mSource);
-    NS_IF_RELEASE(mProperty);
-    NS_IF_RELEASE(mTarget);
-    NS_IF_RELEASE(mValue);
-}
-
-NS_IMPL_ADDREF(InMemoryAssertionEnumeratorImpl)
-NS_IMPL_RELEASE(InMemoryAssertionEnumeratorImpl)
-NS_IMPL_QUERY_INTERFACE(InMemoryAssertionEnumeratorImpl, nsISimpleEnumerator)
-
-NS_IMETHODIMP
-InMemoryAssertionEnumeratorImpl::HasMoreElements(bool* aResult)
-{
-    if (mValue) {
-        *aResult = true;
-        return NS_OK;
-    }
-
-    while (mNextAssertion) {
-        bool foundIt = false;
-        if ((mProperty == mNextAssertion->u.as.mProperty) &&
-            (mTruthValue == mNextAssertion->u.as.mTruthValue)) {
-            if (mSource) {
-                mValue = mNextAssertion->u.as.mTarget;
-                NS_ADDREF(mValue);
-            }
-            else {
-                mValue = mNextAssertion->mSource;
-                NS_ADDREF(mValue);
-            }
-            foundIt = true;
-        }
-
-        // Remember the last assertion we were holding on to
-        Assertion* as = mNextAssertion;
-
-        // iterate
-        mNextAssertion = (mSource) ? mNextAssertion->mNext : mNextAssertion->u.as.mInvNext;
-
-        // grab an owning reference from the enumerator to the next assertion
-        if (mNextAssertion)
-            mNextAssertion->AddRef();
-
-        // ...and release the reference from the enumerator to the old one.
-        as->Release();
-
-        if (foundIt) {
-            *aResult = true;
-            return NS_OK;
-        }
-    }
-
-    *aResult = false;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-InMemoryAssertionEnumeratorImpl::GetNext(nsISupports** aResult)
-{
-    nsresult rv;
-
-    bool hasMore;
-    rv = HasMoreElements(&hasMore);
-    if (NS_FAILED(rv)) return rv;
-
-    if (! hasMore)
-        return NS_ERROR_UNEXPECTED;
-
-    // Don't AddRef: we "transfer" ownership to the caller
-    *aResult = mValue;
-    mValue = nullptr;
-
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-//
-
-/**
- * This class is a little bit bizarre in that it implements both the
- * <tt>nsIRDFArcsOutCursor</tt> and <tt>nsIRDFArcsInCursor</tt> interfaces.
- * Because the structure of the in-memory graph is pretty flexible, it's
- * fairly easy to parameterize this class. The only funky thing to watch
- * out for is the multiple inheritance clashes.
- */
-
-class InMemoryArcsEnumeratorImpl : public nsISimpleEnumerator
-{
-private:
-    InMemoryDataSource* mDataSource;
-    nsIRDFResource*     mSource;
-    nsIRDFNode*         mTarget;
-    AutoTArray<nsCOMPtr<nsIRDFResource>, 8> mAlreadyReturned;
-    nsIRDFResource*     mCurrent;
-    Assertion*          mAssertion;
-    nsCOMArray<nsIRDFNode>* mHashArcs;
-
-    virtual ~InMemoryArcsEnumeratorImpl();
-
-public:
-    InMemoryArcsEnumeratorImpl(InMemoryDataSource* aDataSource,
-                               nsIRDFResource* aSource,
-                               nsIRDFNode* aTarget);
-
-    // nsISupports interface
-    NS_DECL_ISUPPORTS
-
-    // nsISimpleEnumerator interface
-    NS_DECL_NSISIMPLEENUMERATOR
-};
-
-
-InMemoryArcsEnumeratorImpl::InMemoryArcsEnumeratorImpl(InMemoryDataSource* aDataSource,
-                                                       nsIRDFResource* aSource,
-                                                       nsIRDFNode* aTarget)
-    : mDataSource(aDataSource),
-      mSource(aSource),
-      mTarget(aTarget),
-      mCurrent(nullptr),
-      mHashArcs(nullptr)
-{
-    NS_ADDREF(mDataSource);
-    NS_IF_ADDREF(mSource);
-    NS_IF_ADDREF(mTarget);
-
-    if (mSource) {
-        // cast okay because it's a closed system
-        mAssertion = mDataSource->GetForwardArcs(mSource);
-
-        if (mAssertion && mAssertion->mHashEntry) {
-            // its our magical HASH_ENTRY forward hash for assertions
-            mHashArcs = new nsCOMArray<nsIRDFNode>();
-            for (auto i = mAssertion->u.hash.mPropertyHash->Iter();
-                 !i.Done();
-                 i.Next()) {
-                auto entry = static_cast<Entry*>(i.Get());
-                mHashArcs->AppendElement(entry->mNode);
-            }
-            mAssertion = nullptr;
-        }
-    }
-    else {
-        mAssertion = mDataSource->GetReverseArcs(mTarget);
-    }
-}
-
-InMemoryArcsEnumeratorImpl::~InMemoryArcsEnumeratorImpl()
-{
-#ifdef DEBUG_REFS
-    --gInstanceCount;
-    fprintf(stdout, "%d - RDF: InMemoryArcsEnumeratorImpl\n", gInstanceCount);
-#endif
-
-    NS_RELEASE(mDataSource);
-    NS_IF_RELEASE(mSource);
-    NS_IF_RELEASE(mTarget);
-    NS_IF_RELEASE(mCurrent);
-    delete mHashArcs;
-}
-
-NS_IMPL_ADDREF(InMemoryArcsEnumeratorImpl)
-NS_IMPL_RELEASE(InMemoryArcsEnumeratorImpl)
-NS_IMPL_QUERY_INTERFACE(InMemoryArcsEnumeratorImpl, nsISimpleEnumerator)
-
-NS_IMETHODIMP
-InMemoryArcsEnumeratorImpl::HasMoreElements(bool* aResult)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    if (mCurrent) {
-        *aResult = true;
-        return NS_OK;
-    }
-
-    if (mHashArcs) {
-        if (!mHashArcs->IsEmpty()) {
-            const uint32_t last = mHashArcs->Length() - 1;
-            nsCOMPtr<nsIRDFResource> tmp(do_QueryInterface(mHashArcs->ObjectAt(last)));
-            tmp.forget(&mCurrent);
-            mHashArcs->RemoveElementAt(last);
-            *aResult = true;
-            return NS_OK;
-        }
-    }
-    else
-        while (mAssertion) {
-            nsIRDFResource* next = mAssertion->u.as.mProperty;
-
-            // "next" is the property arc we are tentatively going to return
-            // in a subsequent GetNext() call.  It is important to do two
-            // things, however, before that can happen:
-            //   1) Make sure it's not an arc we've already returned.
-            //   2) Make sure that |mAssertion| is not left pointing to
-            //      another assertion that has the same property as this one.
-            // The first is a practical concern; the second a defense against
-            // an obscure crash and other erratic behavior.  To ensure the
-            // second condition, skip down the chain until we find the next
-            // assertion with a property that doesn't match the current one.
-            // (All these assertions would be skipped via mAlreadyReturned
-            // checks anyways; this is even a bit faster.)
-
-            do {
-                mAssertion = (mSource ? mAssertion->mNext :
-                        mAssertion->u.as.mInvNext);
-            }
-            while (mAssertion && (next == mAssertion->u.as.mProperty));
-
-            bool alreadyReturned = false;
-            for (int32_t i = mAlreadyReturned.Length() - 1; i >= 0; --i) {
-                if (mAlreadyReturned[i] == next) {
-                    alreadyReturned = true;
-                    break;
-                }
-            }
-
-            if (! alreadyReturned) {
-                mCurrent = next;
-                NS_ADDREF(mCurrent);
-                *aResult = true;
-                return NS_OK;
-            }
-        }
-
-    *aResult = false;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-InMemoryArcsEnumeratorImpl::GetNext(nsISupports** aResult)
-{
-    nsresult rv;
-
-    bool hasMore;
-    rv = HasMoreElements(&hasMore);
-    if (NS_FAILED(rv)) return rv;
-
-    if (! hasMore)
-        return NS_ERROR_UNEXPECTED;
-
-    // Add this to the set of things we've already returned so that we
-    // can ensure uniqueness
-    mAlreadyReturned.AppendElement(mCurrent);
-
-    // Don't AddRef: we "transfer" ownership to the caller
-    *aResult = mCurrent;
-    mCurrent = nullptr;
-
-    return NS_OK;
-}
-
-
-////////////////////////////////////////////////////////////////////////
-// InMemoryDataSource
-
-nsresult
-NS_NewRDFInMemoryDataSource(nsISupports* aOuter, const nsIID& aIID, void** aResult)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-    *aResult = nullptr;
-
-    if (aOuter && !aIID.Equals(NS_GET_IID(nsISupports))) {
-        NS_ERROR("aggregation requires nsISupports");
-        return NS_ERROR_ILLEGAL_VALUE;
-    }
-
-    InMemoryDataSource* datasource = new InMemoryDataSource(aOuter);
-    NS_ADDREF(datasource);
-
-    datasource->fAggregated.AddRef();
-    nsresult rv = datasource->AggregatedQueryInterface(aIID, aResult); // This'll AddRef()
-    datasource->fAggregated.Release();
-
-    NS_RELEASE(datasource);
-    return rv;
-}
-
-
-InMemoryDataSource::InMemoryDataSource(nsISupports* aOuter)
-    : mForwardArcs(PLDHashTable::StubOps(), sizeof(Entry))
-    , mReverseArcs(PLDHashTable::StubOps(), sizeof(Entry))
-    , mNumObservers(0)
-    , mReadCount(0)
-{
-    NS_INIT_AGGREGATED(aOuter);
-
-    mPropagateChanges = true;
-}
-
-
-InMemoryDataSource::~InMemoryDataSource()
-{
-#ifdef DEBUG_REFS
-    --gInstanceCount;
-    fprintf(stdout, "%d - RDF: InMemoryDataSource\n", gInstanceCount);
-#endif
-
-    if (mForwardArcs.EntryCount() > 0) {
-        // This'll release all of the Assertion objects that are
-        // associated with this data source. We only need to do this
-        // for the forward arcs, because the reverse arcs table
-        // indexes the exact same set of resources.
-        for (auto iter = mForwardArcs.Iter(); !iter.Done(); iter.Next()) {
-            auto entry = static_cast<Entry*>(iter.Get());
-            Assertion* as = entry->mAssertions;
-            while (as) {
-                Assertion* doomed = as;
-                as = as->mNext;
-
-                // Unlink, and release the datasource's reference.
-                doomed->mNext = doomed->u.as.mInvNext = nullptr;
-                doomed->Release();
-            }
-        }
-    }
-
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("InMemoryDataSource(%p): destroyed.", this));
-}
-
-
-////////////////////////////////////////////////////////////////////////
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(InMemoryDataSource)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(InMemoryDataSource)
-    NS_IMPL_CYCLE_COLLECTION_UNLINK(mObservers)
-NS_IMPL_CYCLE_COLLECTION_UNLINK_END
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_AGGREGATED(InMemoryDataSource)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mObservers)
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-
-NS_IMPL_CYCLE_COLLECTING_AGGREGATED(InMemoryDataSource)
-NS_INTERFACE_MAP_BEGIN_AGGREGATED(InMemoryDataSource)
-    NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION_AGGREGATED(InMemoryDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFInMemoryDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFPropagatableDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFPurgeableDataSource)
-    NS_INTERFACE_MAP_ENTRY(rdfIDataSource)
-NS_INTERFACE_MAP_END
-
-////////////////////////////////////////////////////////////////////////
-
-
-void
-InMemoryDataSource::LogOperation(const char* aOperation,
-                                 nsIRDFResource* aSource,
-                                 nsIRDFResource* aProperty,
-                                 nsIRDFNode* aTarget,
-                                 bool aTruthValue)
-{
-    if (! MOZ_LOG_TEST(gLog, LogLevel::Debug))
-        return;
-
-    nsCString uri;
-    aSource->GetValue(getter_Copies(uri));
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("InMemoryDataSource(%p): %s", this, aOperation));
-
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("  [(%p)%s]--", aSource, uri.get()));
-
-    aProperty->GetValue(getter_Copies(uri));
-
-    char tv = (aTruthValue ? '-' : '!');
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("  --%c[(%p)%s]--", tv, aProperty, uri.get()));
-
-    nsCOMPtr<nsIRDFResource> resource;
-    nsCOMPtr<nsIRDFLiteral> literal;
-
-    if ((resource = do_QueryInterface(aTarget)) != nullptr) {
-        resource->GetValue(getter_Copies(uri));
-        MOZ_LOG(gLog, LogLevel::Debug,
-           ("  -->[(%p)%s]", aTarget, uri.get()));
-    }
-    else if ((literal = do_QueryInterface(aTarget)) != nullptr) {
-        nsString value;
-        literal->GetValue(getter_Copies(value));
-        MOZ_LOG(gLog, LogLevel::Debug,
-           ("  -->(\"%s\")\n", NS_ConvertUTF16toUTF8(value).get()));
-    }
-    else {
-        MOZ_LOG(gLog, LogLevel::Debug,
-           ("  -->(unknown-type)\n"));
-    }
-}
-
-
-NS_IMETHODIMP
-InMemoryDataSource::GetURI(nsACString& aURI)
-{
-    aURI.SetIsVoid(true);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::GetSource(nsIRDFResource* property,
-                              nsIRDFNode* target,
-                              bool tv,
-                              nsIRDFResource** source)
-{
-    NS_PRECONDITION(source != nullptr, "null ptr");
-    if (! source)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(property != nullptr, "null ptr");
-    if (! property)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(target != nullptr, "null ptr");
-    if (! target)
-        return NS_ERROR_NULL_POINTER;
-
-    for (Assertion* as = GetReverseArcs(target); as; as = as->u.as.mInvNext) {
-        if ((property == as->u.as.mProperty) && (tv == as->u.as.mTruthValue)) {
-            *source = as->mSource;
-            NS_ADDREF(*source);
-            return NS_OK;
-        }
-    }
-    *source = nullptr;
-    return NS_RDF_NO_VALUE;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::GetTarget(nsIRDFResource* source,
-                              nsIRDFResource* property,
-                              bool tv,
-                              nsIRDFNode** target)
-{
-    NS_PRECONDITION(source != nullptr, "null ptr");
-    if (! source)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(property != nullptr, "null ptr");
-    if (! property)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(target != nullptr, "null ptr");
-    if (! target)
-        return NS_ERROR_NULL_POINTER;
-
-    Assertion *as = GetForwardArcs(source);
-    if (as && as->mHashEntry) {
-        PLDHashEntryHdr* hdr = as->u.hash.mPropertyHash->Search(property);
-        Assertion* val = hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        while (val) {
-            if (tv == val->u.as.mTruthValue) {
-                *target = val->u.as.mTarget;
-                NS_IF_ADDREF(*target);
-                return NS_OK;
-            }
-            val = val->mNext;
-        }
-    }
-    else
-    for (; as != nullptr; as = as->mNext) {
-        if ((property == as->u.as.mProperty) && (tv == (as->u.as.mTruthValue))) {
-            *target = as->u.as.mTarget;
-            NS_ADDREF(*target);
-            return NS_OK;
-        }
-    }
-
-    // If we get here, then there was no target with for the specified
-    // property & truth value.
-    *target = nullptr;
-    return NS_RDF_NO_VALUE;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::HasAssertion(nsIRDFResource* source,
-                                 nsIRDFResource* property,
-                                 nsIRDFNode* target,
-                                 bool tv,
-                                 bool* hasAssertion)
-{
-    if (! source)
-        return NS_ERROR_NULL_POINTER;
-
-    if (! property)
-        return NS_ERROR_NULL_POINTER;
-
-    if (! target)
-        return NS_ERROR_NULL_POINTER;
-
-    Assertion *as = GetForwardArcs(source);
-    if (as && as->mHashEntry) {
-        PLDHashEntryHdr* hdr = as->u.hash.mPropertyHash->Search(property);
-        Assertion* val = hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        while (val) {
-            if ((val->u.as.mTarget == target) && (tv == (val->u.as.mTruthValue))) {
-                *hasAssertion = true;
-                return NS_OK;
-            }
-            val = val->mNext;
-        }
-    }
-    else
-    for (; as != nullptr; as = as->mNext) {
-        // check target first as its most unique
-        if (target != as->u.as.mTarget)
-            continue;
-
-        if (property != as->u.as.mProperty)
-            continue;
-
-        if (tv != (as->u.as.mTruthValue))
-            continue;
-
-        // found it!
-        *hasAssertion = true;
-        return NS_OK;
-    }
-
-    // If we get here, we couldn't find the assertion
-    *hasAssertion = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::GetSources(nsIRDFResource* aProperty,
-                               nsIRDFNode* aTarget,
-                               bool aTruthValue,
-                               nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    InMemoryAssertionEnumeratorImpl* result =
-        new InMemoryAssertionEnumeratorImpl(this, nullptr, aProperty,
-                                            aTarget, aTruthValue);
-
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(result);
-    *aResult = result;
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::GetTargets(nsIRDFResource* aSource,
-                               nsIRDFResource* aProperty,
-                               bool aTruthValue,
-                               nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    InMemoryAssertionEnumeratorImpl* result =
-        new InMemoryAssertionEnumeratorImpl(this, aSource, aProperty,
-                                            nullptr, aTruthValue);
-
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(result);
-    *aResult = result;
-
-    return NS_OK;
-}
-
-
-nsresult
-InMemoryDataSource::LockedAssert(nsIRDFResource* aSource,
-                                 nsIRDFResource* aProperty,
-                                 nsIRDFNode* aTarget,
-                                 bool aTruthValue)
-{
-    LogOperation("ASSERT", aSource, aProperty, aTarget, aTruthValue);
-
-    Assertion* next = GetForwardArcs(aSource);
-    Assertion* prev = next;
-    Assertion* as = nullptr;
-
-    bool    haveHash = (next) ? next->mHashEntry : false;
-    if (haveHash) {
-        PLDHashEntryHdr* hdr = next->u.hash.mPropertyHash->Search(aProperty);
-        Assertion* val = hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        while (val) {
-            if (val->u.as.mTarget == aTarget) {
-                // Wow, we already had the assertion. Make sure that the
-                // truth values are correct and bail.
-                val->u.as.mTruthValue = aTruthValue;
-                return NS_OK;
-            }
-            val = val->mNext;
-        }
-    }
-    else
-    {
-        while (next) {
-            // check target first as its most unique
-            if (aTarget == next->u.as.mTarget) {
-                if (aProperty == next->u.as.mProperty) {
-                    // Wow, we already had the assertion. Make sure that the
-                    // truth values are correct and bail.
-                    next->u.as.mTruthValue = aTruthValue;
-                    return NS_OK;
-                }
-            }
-
-            prev = next;
-            next = next->mNext;
-        }
-    }
-
-    as = new Assertion(aSource, aProperty, aTarget, aTruthValue);
-    if (! as)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    // Add the datasource's owning reference.
-    as->AddRef();
-
-    if (haveHash)
-    {
-        PLDHashEntryHdr* hdr = next->u.hash.mPropertyHash->Search(aProperty);
-        Assertion *asRef =
-            hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        if (asRef)
-        {
-            as->mNext = asRef->mNext;
-            asRef->mNext = as;
-        }
-        else
-        {
-            hdr = next->u.hash.mPropertyHash->Add(aProperty, mozilla::fallible);
-            if (hdr)
-            {
-                Entry* entry = static_cast<Entry*>(hdr);
-                entry->mNode = aProperty;
-                entry->mAssertions = as;
-            }
-        }
-    }
-    else
-    {
-        // Link it in to the "forward arcs" table
-        if (!prev) {
-            SetForwardArcs(aSource, as);
-        } else {
-            prev->mNext = as;
-        }
-    }
-
-    // Link it in to the "reverse arcs" table
-
-    next = GetReverseArcs(aTarget);
-    as->u.as.mInvNext = next;
-    next = as;
-    SetReverseArcs(aTarget, next);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::Assert(nsIRDFResource* aSource,
-                           nsIRDFResource* aProperty,
-                           nsIRDFNode* aTarget,
-                           bool aTruthValue)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    if (mReadCount) {
-        NS_WARNING("Writing to InMemoryDataSource during read\n");
-        return NS_RDF_ASSERTION_REJECTED;
-    }
-
-    nsresult rv;
-    rv = LockedAssert(aSource, aProperty, aTarget, aTruthValue);
-    if (NS_FAILED(rv)) return rv;
-
-    // notify observers
-    for (int32_t i = (int32_t)mNumObservers - 1; mPropagateChanges && i >= 0; --i) {
-        nsIRDFObserver* obs = mObservers[i];
-
-        // XXX this should never happen, but it does, and we can't figure out why.
-        NS_ASSERTION(obs, "observer array corrupted!");
-        if (! obs)
-          continue;
-
-        obs->OnAssert(this, aSource, aProperty, aTarget);
-        // XXX ignore return value?
-    }
-
-    return NS_RDF_ASSERTION_ACCEPTED;
-}
-
-
-nsresult
-InMemoryDataSource::LockedUnassert(nsIRDFResource* aSource,
-                                   nsIRDFResource* aProperty,
-                                   nsIRDFNode* aTarget)
-{
-    LogOperation("UNASSERT", aSource, aProperty, aTarget);
-
-    Assertion* next = GetForwardArcs(aSource);
-    Assertion* prev = next;
-    Assertion* root = next;
-    Assertion* as = nullptr;
-
-    bool    haveHash = (next) ? next->mHashEntry : false;
-    if (haveHash) {
-        PLDHashEntryHdr* hdr = next->u.hash.mPropertyHash->Search(aProperty);
-        prev = next = hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        bool first = true;
-        while (next) {
-            if (aTarget == next->u.as.mTarget) {
-                break;
-            }
-            first = false;
-            prev = next;
-            next = next->mNext;
-        }
-        // We don't even have the assertion, so just bail.
-        if (!next)
-            return NS_OK;
-
-        as = next;
-
-        if (first) {
-            root->u.hash.mPropertyHash->RawRemove(hdr);
-
-            if (next && next->mNext) {
-                PLDHashEntryHdr* hdr =
-                    root->u.hash.mPropertyHash->Add(aProperty,
-                                                    mozilla::fallible);
-                if (hdr) {
-                    Entry* entry = static_cast<Entry*>(hdr);
-                    entry->mNode = aProperty;
-                    entry->mAssertions = next->mNext;
-                }
-            }
-            else {
-                // If this second-level hash empties out, clean it up.
-                if (!root->u.hash.mPropertyHash->EntryCount()) {
-                    root->Release();
-                    SetForwardArcs(aSource, nullptr);
-                }
-            }
-        }
-        else {
-            prev->mNext = next->mNext;
-        }
-    }
-    else
-    {
-        while (next) {
-            // check target first as its most unique
-            if (aTarget == next->u.as.mTarget) {
-                if (aProperty == next->u.as.mProperty) {
-                    if (prev == next) {
-                        SetForwardArcs(aSource, next->mNext);
-                    } else {
-                        prev->mNext = next->mNext;
-                    }
-                    as = next;
-                    break;
-                }
-            }
-
-            prev = next;
-            next = next->mNext;
-        }
-    }
-    // We don't even have the assertion, so just bail.
-    if (!as)
-        return NS_OK;
-
-#ifdef DEBUG
-    bool foundReverseArc = false;
-#endif
-
-    next = prev = GetReverseArcs(aTarget);
-    while (next) {
-        if (next == as) {
-            if (prev == next) {
-                SetReverseArcs(aTarget, next->u.as.mInvNext);
-            } else {
-                prev->u.as.mInvNext = next->u.as.mInvNext;
-            }
-#ifdef DEBUG
-            foundReverseArc = true;
-#endif
-            break;
-        }
-        prev = next;
-        next = next->u.as.mInvNext;
-    }
-
-#ifdef DEBUG
-    NS_ASSERTION(foundReverseArc, "in-memory db corrupted: unable to find reverse arc");
-#endif
-
-    // Unlink, and release the datasource's reference
-    as->mNext = as->u.as.mInvNext = nullptr;
-    as->Release();
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::Unassert(nsIRDFResource* aSource,
-                             nsIRDFResource* aProperty,
-                             nsIRDFNode* aTarget)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    if (mReadCount) {
-        NS_WARNING("Writing to InMemoryDataSource during read\n");
-        return NS_RDF_ASSERTION_REJECTED;
-    }
-
-    nsresult rv;
-
-    rv = LockedUnassert(aSource, aProperty, aTarget);
-    if (NS_FAILED(rv)) return rv;
-
-    // Notify the world
-    for (int32_t i = int32_t(mNumObservers) - 1; mPropagateChanges && i >= 0; --i) {
-        nsIRDFObserver* obs = mObservers[i];
-
-        // XXX this should never happen, but it does, and we can't figure out why.
-        NS_ASSERTION(obs, "observer array corrupted!");
-        if (! obs)
-          continue;
-
-        obs->OnUnassert(this, aSource, aProperty, aTarget);
-        // XXX ignore return value?
-    }
-
-    return NS_RDF_ASSERTION_ACCEPTED;
-}
-
-
-NS_IMETHODIMP
-InMemoryDataSource::Change(nsIRDFResource* aSource,
-                           nsIRDFResource* aProperty,
-                           nsIRDFNode* aOldTarget,
-                           nsIRDFNode* aNewTarget)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aOldTarget != nullptr, "null ptr");
-    if (! aOldTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aNewTarget != nullptr, "null ptr");
-    if (! aNewTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    if (mReadCount) {
-        NS_WARNING("Writing to InMemoryDataSource during read\n");
-        return NS_RDF_ASSERTION_REJECTED;
-    }
-
-    nsresult rv;
-
-    // XXX We can implement LockedChange() if we decide that this
-    // is a performance bottleneck.
-
-    rv = LockedUnassert(aSource, aProperty, aOldTarget);
-    if (NS_FAILED(rv)) return rv;
-
-    rv = LockedAssert(aSource, aProperty, aNewTarget, true);
-    if (NS_FAILED(rv)) return rv;
-
-    // Notify the world
-    for (int32_t i = int32_t(mNumObservers) - 1; mPropagateChanges && i >= 0; --i) {
-        nsIRDFObserver* obs = mObservers[i];
-
-        // XXX this should never happen, but it does, and we can't figure out why.
-        NS_ASSERTION(obs, "observer array corrupted!");
-        if (! obs)
-          continue;
-
-        obs->OnChange(this, aSource, aProperty, aOldTarget, aNewTarget);
-        // XXX ignore return value?
-    }
-
-    return NS_RDF_ASSERTION_ACCEPTED;
-}
-
-
-NS_IMETHODIMP
-InMemoryDataSource::Move(nsIRDFResource* aOldSource,
-                         nsIRDFResource* aNewSource,
-                         nsIRDFResource* aProperty,
-                         nsIRDFNode* aTarget)
-{
-    NS_PRECONDITION(aOldSource != nullptr, "null ptr");
-    if (! aOldSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aNewSource != nullptr, "null ptr");
-    if (! aNewSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    if (mReadCount) {
-        NS_WARNING("Writing to InMemoryDataSource during read\n");
-        return NS_RDF_ASSERTION_REJECTED;
-    }
-
-    nsresult rv;
-
-    // XXX We can implement LockedMove() if we decide that this
-    // is a performance bottleneck.
-
-    rv = LockedUnassert(aOldSource, aProperty, aTarget);
-    if (NS_FAILED(rv)) return rv;
-
-    rv = LockedAssert(aNewSource, aProperty, aTarget, true);
-    if (NS_FAILED(rv)) return rv;
-
-    // Notify the world
-    for (int32_t i = int32_t(mNumObservers) - 1; mPropagateChanges && i >= 0; --i) {
-        nsIRDFObserver* obs = mObservers[i];
-
-        // XXX this should never happen, but it does, and we can't figure out why.
-        NS_ASSERTION(obs, "observer array corrupted!");
-        if (! obs)
-          continue;
-
-        obs->OnMove(this, aOldSource, aNewSource, aProperty, aTarget);
-        // XXX ignore return value?
-    }
-
-    return NS_RDF_ASSERTION_ACCEPTED;
-}
-
-
-NS_IMETHODIMP
-InMemoryDataSource::AddObserver(nsIRDFObserver* aObserver)
-{
-    NS_PRECONDITION(aObserver != nullptr, "null ptr");
-    if (! aObserver)
-        return NS_ERROR_NULL_POINTER;
-
-    mObservers.AppendObject(aObserver);
-    mNumObservers = mObservers.Count();
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::RemoveObserver(nsIRDFObserver* aObserver)
-{
-    NS_PRECONDITION(aObserver != nullptr, "null ptr");
-    if (! aObserver)
-        return NS_ERROR_NULL_POINTER;
-
-    mObservers.RemoveObject(aObserver);
-    // note: use Count() instead of just decrementing
-    // in case aObserver wasn't in list, for example
-    mNumObservers = mObservers.Count();
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::HasArcIn(nsIRDFNode *aNode, nsIRDFResource *aArc, bool *result)
-{
-    Assertion* ass = GetReverseArcs(aNode);
-    while (ass) {
-        nsIRDFResource* elbow = ass->u.as.mProperty;
-        if (elbow == aArc) {
-            *result = true;
-            return NS_OK;
-        }
-        ass = ass->u.as.mInvNext;
-    }
-    *result = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::HasArcOut(nsIRDFResource *aSource, nsIRDFResource *aArc, bool *result)
-{
-    Assertion* ass = GetForwardArcs(aSource);
-    if (ass && ass->mHashEntry) {
-        PLDHashEntryHdr* hdr = ass->u.hash.mPropertyHash->Search(aArc);
-        Assertion* val = hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        if (val) {
-            *result = true;
-            return NS_OK;
-        }
-        ass = ass->mNext;
-    }
-    while (ass) {
-        nsIRDFResource* elbow = ass->u.as.mProperty;
-        if (elbow == aArc) {
-            *result = true;
-            return NS_OK;
-        }
-        ass = ass->mNext;
-    }
-    *result = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::ArcLabelsIn(nsIRDFNode* aTarget, nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    InMemoryArcsEnumeratorImpl* result =
-        new InMemoryArcsEnumeratorImpl(this, nullptr, aTarget);
-
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(result);
-    *aResult = result;
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::ArcLabelsOut(nsIRDFResource* aSource, nsISimpleEnumerator** aResult)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    InMemoryArcsEnumeratorImpl* result =
-        new InMemoryArcsEnumeratorImpl(this, aSource, nullptr);
-
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(result);
-    *aResult = result;
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-InMemoryDataSource::GetAllResources(nsISimpleEnumerator** aResult)
-{
-    nsCOMArray<nsIRDFNode> nodes;
-    nodes.SetCapacity(mForwardArcs.EntryCount());
-
-    // Get all of our entries into an nsCOMArray
-    for (auto iter = mForwardArcs.Iter(); !iter.Done(); iter.Next()) {
-        auto entry = static_cast<Entry*>(iter.Get());
-        nodes.AppendObject(entry->mNode);
-    }
-    return NS_NewArrayEnumerator(aResult, nodes);
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::GetAllCmds(nsIRDFResource* source,
-                               nsISimpleEnumerator/*<nsIRDFResource>*/** commands)
-{
-    return(NS_NewEmptyEnumerator(commands));
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::IsCommandEnabled(nsISupports* aSources,
-                                     nsIRDFResource*   aCommand,
-                                     nsISupports* aArguments,
-                                     bool* aResult)
-{
-    return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::DoCommand(nsISupports* aSources,
-                              nsIRDFResource*   aCommand,
-                              nsISupports* aArguments)
-{
-    return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::BeginUpdateBatch()
-{
-    for (int32_t i = int32_t(mNumObservers) - 1; mPropagateChanges && i >= 0; --i) {
-        nsIRDFObserver* obs = mObservers[i];
-        obs->OnBeginUpdateBatch(this);
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::EndUpdateBatch()
-{
-    for (int32_t i = int32_t(mNumObservers) - 1; mPropagateChanges && i >= 0; --i) {
-        nsIRDFObserver* obs = mObservers[i];
-        obs->OnEndUpdateBatch(this);
-    }
-    return NS_OK;
-}
-
-
-
-////////////////////////////////////////////////////////////////////////
-// nsIRDFInMemoryDataSource methods
-
-NS_IMETHODIMP
-InMemoryDataSource::EnsureFastContainment(nsIRDFResource* aSource)
-{
-    Assertion *as = GetForwardArcs(aSource);
-    bool    haveHash = (as) ? as->mHashEntry : false;
-
-    // if its already a hash, then nothing to do
-    if (haveHash)   return(NS_OK);
-
-    // convert aSource in forward hash into a hash
-    Assertion *hashAssertion = new Assertion(aSource);
-    NS_ASSERTION(hashAssertion, "unable to create Assertion");
-    if (!hashAssertion) return(NS_ERROR_OUT_OF_MEMORY);
-
-    // Add the datasource's owning reference.
-    hashAssertion->AddRef();
-
-    Assertion *first = GetForwardArcs(aSource);
-    SetForwardArcs(aSource, hashAssertion);
-
-    // mutate references of existing forward assertions into this hash
-    PLDHashTable *table = hashAssertion->u.hash.mPropertyHash;
-    Assertion *nextRef;
-    while(first) {
-        nextRef = first->mNext;
-        nsIRDFResource *prop = first->u.as.mProperty;
-
-        PLDHashEntryHdr* hdr = table->Search(prop);
-        Assertion* val = hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        if (val) {
-            first->mNext = val->mNext;
-            val->mNext = first;
-        }
-        else {
-            PLDHashEntryHdr* hdr = table->Add(prop, mozilla::fallible);
-            if (hdr) {
-                Entry* entry = static_cast<Entry*>(hdr);
-                entry->mNode = prop;
-                entry->mAssertions = first;
-                first->mNext = nullptr;
-            }
-        }
-        first = nextRef;
-    }
-    return(NS_OK);
-}
-
-
-////////////////////////////////////////////////////////////////////////
-// nsIRDFPropagatableDataSource methods
-NS_IMETHODIMP
-InMemoryDataSource::GetPropagateChanges(bool* aPropagateChanges)
-{
-    *aPropagateChanges = mPropagateChanges;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::SetPropagateChanges(bool aPropagateChanges)
-{
-    mPropagateChanges = aPropagateChanges;
-    return NS_OK;
-}
-
-
-////////////////////////////////////////////////////////////////////////
-// nsIRDFPurgeableDataSource methods
-
-NS_IMETHODIMP
-InMemoryDataSource::Mark(nsIRDFResource* aSource,
-                         nsIRDFResource* aProperty,
-                         nsIRDFNode* aTarget,
-                         bool aTruthValue,
-                         bool* aDidMark)
-{
-    NS_PRECONDITION(aSource != nullptr, "null ptr");
-    if (! aSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aTarget != nullptr, "null ptr");
-    if (! aTarget)
-        return NS_ERROR_NULL_POINTER;
-
-    Assertion *as = GetForwardArcs(aSource);
-    if (as && as->mHashEntry) {
-        PLDHashEntryHdr* hdr = as->u.hash.mPropertyHash->Search(aProperty);
-        Assertion* val = hdr ? static_cast<Entry*>(hdr)->mAssertions : nullptr;
-        while (val) {
-            if ((val->u.as.mTarget == aTarget) &&
-                (aTruthValue == (val->u.as.mTruthValue))) {
-
-                // found it! so mark it.
-                as->Mark();
-                *aDidMark = true;
-
-                LogOperation("MARK", aSource, aProperty, aTarget, aTruthValue);
-
-                return NS_OK;
-            }
-            val = val->mNext;
-        }
-    }
-    else for (; as != nullptr; as = as->mNext) {
-        // check target first as its most unique
-        if (aTarget != as->u.as.mTarget)
-            continue;
-
-        if (aProperty != as->u.as.mProperty)
-            continue;
-
-        if (aTruthValue != (as->u.as.mTruthValue))
-            continue;
-
-        // found it! so mark it.
-        as->Mark();
-        *aDidMark = true;
-
-        LogOperation("MARK", aSource, aProperty, aTarget, aTruthValue);
-
-        return NS_OK;
-    }
-
-    // If we get here, we couldn't find the assertion
-    *aDidMark = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::Sweep()
-{
-    SweepInfo info = { nullptr, &mReverseArcs };
-
-    // Remove all the assertions, but don't notify anyone.
-    SweepForwardArcsEntries(&mForwardArcs, &info);
-
-    // Now do the notification.
-    Assertion* as = info.mUnassertList;
-    while (as) {
-        LogOperation("SWEEP", as->mSource, as->u.as.mProperty, as->u.as.mTarget, as->u.as.mTruthValue);
-        if (!(as->mHashEntry))
-        {
-            for (int32_t i = int32_t(mNumObservers) - 1; mPropagateChanges && i >= 0; --i) {
-                nsIRDFObserver* obs = mObservers[i];
-                // XXXbz other loops over mObservers null-check |obs| here!
-                obs->OnUnassert(this, as->mSource, as->u.as.mProperty, as->u.as.mTarget);
-                // XXX ignore return value?
-            }
-        }
-
-        Assertion* doomed = as;
-        as = as->mNext;
-
-        // Unlink, and release the datasource's reference
-        doomed->mNext = doomed->u.as.mInvNext = nullptr;
-        doomed->Release();
-    }
-
-    return NS_OK;
-}
-
-
-void
-InMemoryDataSource::SweepForwardArcsEntries(PLDHashTable* aTable,
-                                            SweepInfo* aInfo)
-{
-    for (auto iter = aTable->Iter(); !iter.Done(); iter.Next()) {
-        auto entry = static_cast<Entry*>(iter.Get());
-
-        Assertion* as = entry->mAssertions;
-        if (as && (as->mHashEntry)) {
-            // Stuff in sub-hashes must be swept recursively (max depth: 1)
-            SweepForwardArcsEntries(as->u.hash.mPropertyHash, aInfo);
-
-            // If the sub-hash is now empty, clean it up.
-            if (!as->u.hash.mPropertyHash->EntryCount()) {
-                as->Release();
-                iter.Remove();
-            }
-            continue;
-        }
-
-        Assertion* prev = nullptr;
-        while (as) {
-            if (as->IsMarked()) {
-                prev = as;
-                as->Unmark();
-                as = as->mNext;
-            }
-            else {
-                // remove from the list of assertions in the datasource
-                Assertion* next = as->mNext;
-                if (prev) {
-                    prev->mNext = next;
-                }
-                else {
-                    // it's the first one. update the hashtable entry.
-                    entry->mAssertions = next;
-                }
-
-                // remove from the reverse arcs
-                PLDHashEntryHdr* hdr =
-                    aInfo->mReverseArcs->Search(as->u.as.mTarget);
-                NS_ASSERTION(hdr, "no assertion in reverse arcs");
-
-                Entry* rentry = static_cast<Entry*>(hdr);
-                Assertion* ras = rentry->mAssertions;
-                Assertion* rprev = nullptr;
-                while (ras) {
-                    if (ras == as) {
-                        if (rprev) {
-                            rprev->u.as.mInvNext = ras->u.as.mInvNext;
-                        }
-                        else {
-                            // it's the first one. update the hashtable entry.
-                            rentry->mAssertions = ras->u.as.mInvNext;
-                        }
-                        as->u.as.mInvNext = nullptr; // for my sanity.
-                        break;
-                    }
-                    rprev = ras;
-                    ras = ras->u.as.mInvNext;
-                }
-
-                // Wow, it was the _only_ one. Unhash it.
-                if (! rentry->mAssertions) {
-                    aInfo->mReverseArcs->RawRemove(hdr);
-                }
-
-                // add to the list of assertions to unassert
-                as->mNext = aInfo->mUnassertList;
-                aInfo->mUnassertList = as;
-
-                // Advance to the next assertion
-                as = next;
-            }
-        }
-
-        // if no more assertions exist for this resource, then unhash it.
-        if (! entry->mAssertions) {
-            iter.Remove();
-        }
-    }
-}
-
-////////////////////////////////////////////////////////////////////////
-// rdfIDataSource methods
-
-NS_IMETHODIMP
-InMemoryDataSource::VisitAllSubjects(rdfITripleVisitor *aVisitor)
-{
-    // Lock datasource against writes
-    ++mReadCount;
-
-    // Enumerate all of our entries.
-    nsresult rv = NS_OK;
-    for (auto iter = mForwardArcs.Iter(); !iter.Done(); iter.Next()) {
-        auto entry = static_cast<Entry*>(iter.Get());
-        nsresult rv2;
-        nsCOMPtr<nsIRDFNode> subject = do_QueryInterface(entry->mNode, &rv2);
-        if (NS_FAILED(rv2)) {
-            NS_WARNING("QI to nsIRDFNode failed");
-            continue;
-        }
-        rv = aVisitor->Visit(subject, nullptr, nullptr, true);
-        if (NS_FAILED(rv) || rv == NS_RDF_STOP_VISIT) {
-            break;
-        }
-    }
-
-    // Unlock datasource
-    --mReadCount;
-
-    return rv;
-}
-
-NS_IMETHODIMP
-InMemoryDataSource::VisitAllTriples(rdfITripleVisitor *aVisitor)
-{
-    // Lock datasource against writes
-    ++mReadCount;
-
-    // Enumerate all of our entries.
-    nsresult rv = NS_OK;
-    for (auto iter = mForwardArcs.Iter(); !iter.Done(); iter.Next()) {
-        auto entry = static_cast<Entry*>(iter.Get());
-
-        nsresult rv2;
-        nsCOMPtr<nsIRDFNode> subject = do_QueryInterface(entry->mNode, &rv2);
-        if (NS_FAILED(rv2)) {
-            NS_WARNING("QI to nsIRDFNode failed");
-
-        } else if (entry->mAssertions->mHashEntry) {
-            for (auto iter = entry->mAssertions->u.hash.mPropertyHash->Iter();
-                 !iter.Done();
-                 iter.Next()) {
-                auto entry = static_cast<Entry*>(iter.Get());
-                Assertion* assertion = entry->mAssertions;
-                while (assertion) {
-                    NS_ASSERTION(!assertion->mHashEntry, "shouldn't have to hashes");
-                    rv = aVisitor->Visit(subject, assertion->u.as.mProperty,
-                                                  assertion->u.as.mTarget,
-                                                  assertion->u.as.mTruthValue);
-                    if (NS_FAILED(rv)) {
-                        goto end;
-                    }
-                    if (rv == NS_RDF_STOP_VISIT) {
-                        goto inner_end;
-                    }
-                    assertion = assertion->mNext;
-                }
-            }
-
-        } else {
-            Assertion* assertion = entry->mAssertions;
-            while (assertion) {
-                NS_ASSERTION(!assertion->mHashEntry, "shouldn't have to hashes");
-                rv = aVisitor->Visit(subject, assertion->u.as.mProperty,
-                                              assertion->u.as.mTarget,
-                                              assertion->u.as.mTruthValue);
-                if (NS_FAILED(rv) || rv == NS_RDF_STOP_VISIT) {
-                    goto end;
-                }
-                assertion = assertion->mNext;
-            }
-        }
-
-      inner_end:
-        (void) 0;
-    }
-
-  end:
-    // Unlock datasource
-    --mReadCount;
-
-    return rv;
-}
-
-////////////////////////////////////////////////////////////////////////
-
deleted file mode 100644
--- a/rdf/base/nsNameSpaceMap.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsNameSpaceMap.h"
-#include "nsReadableUtils.h"
-
-nsNameSpaceMap::nsNameSpaceMap()
-    : mEntries(nullptr)
-{
-    MOZ_COUNT_CTOR(nsNameSpaceMap);
-}
-
-nsNameSpaceMap::~nsNameSpaceMap()
-{
-    MOZ_COUNT_DTOR(nsNameSpaceMap);
-
-    while (mEntries) {
-        Entry* doomed = mEntries;
-        mEntries = mEntries->mNext;
-        delete doomed;
-    }
-}
-
-nsresult
-nsNameSpaceMap::Put(const nsAString& aURI, nsAtom* aPrefix)
-{
-    nsCString uriUTF8;
-    AppendUTF16toUTF8(aURI, uriUTF8);
-    return Put(uriUTF8, aPrefix);
-}
-
-nsresult
-nsNameSpaceMap::Put(const nsACString& aURI, nsAtom* aPrefix)
-{
-    Entry* entry;
-
-    // Make sure we're not adding a duplicate
-    for (entry = mEntries; entry != nullptr; entry = entry->mNext) {
-        if (entry->mURI == aURI || entry->mPrefix == aPrefix)
-            return NS_ERROR_FAILURE;
-    }
-
-    entry = new Entry(aURI, aPrefix);
-    if (! entry)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    entry->mNext = mEntries;
-    mEntries = entry;
-    return NS_OK;
-}
-
-nsNameSpaceMap::const_iterator
-nsNameSpaceMap::GetNameSpaceOf(const nsACString& aURI) const
-{
-    for (Entry* entry = mEntries; entry != nullptr; entry = entry->mNext) {
-        if (StringBeginsWith(aURI, entry->mURI))
-            return const_iterator(entry);
-    }
-
-    return last();
-}
deleted file mode 100644
--- a/rdf/base/nsNameSpaceMap.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsNameSpaceMap_h__
-#define nsNameSpaceMap_h__
-
-#include "nsCOMPtr.h"
-#include "nsString.h"
-#include "nsAtom.h"
-
-class nsNameSpaceMap
-{
-public:
-    class Entry {
-    public:
-        Entry(const nsACString& aURI, nsAtom* aPrefix)
-            : mURI(aURI), mPrefix(aPrefix), mNext(nullptr) {
-            MOZ_COUNT_CTOR(nsNameSpaceMap::Entry); }
-
-        ~Entry() { MOZ_COUNT_DTOR(nsNameSpaceMap::Entry); }
-
-        nsCString mURI;
-        RefPtr<nsAtom> mPrefix;
-
-        Entry* mNext;
-    };
-
-    nsNameSpaceMap();
-    ~nsNameSpaceMap();
-
-    nsresult
-    Put(const nsAString& aURI, nsAtom* aPrefix);
-
-    nsresult
-    Put(const nsACString& aURI, nsAtom* aPrefix);
-
-    class const_iterator {
-    protected:
-        friend class nsNameSpaceMap;
-
-        explicit const_iterator(const Entry* aCurrent)
-            : mCurrent(aCurrent) {}
-
-        const Entry* mCurrent;
-
-    public:
-        const_iterator()
-            : mCurrent(nullptr) {}
-
-        const_iterator(const const_iterator& iter)
-            : mCurrent(iter.mCurrent) {}
-
-        const_iterator&
-        operator=(const const_iterator& iter) {
-            mCurrent = iter.mCurrent;
-            return *this; }
-
-        const_iterator&
-        operator++() {
-            mCurrent = mCurrent->mNext;
-            return *this; }
-
-        const_iterator
-        operator++(int) {
-            const_iterator tmp(*this);
-            mCurrent = mCurrent->mNext;
-            return tmp; }
-
-        const Entry* operator->() const { return mCurrent; }
-
-        const Entry& operator*() const { return *mCurrent; }
-
-        bool
-        operator==(const const_iterator& iter) const {
-            return mCurrent == iter.mCurrent; }
-
-        bool
-        operator!=(const const_iterator& iter) const {
-            return ! iter.operator==(*this); }
-    };
-
-    const_iterator first() const {
-        return const_iterator(mEntries); }
-
-    const_iterator last() const {
-        return const_iterator(nullptr); }
-
-    const_iterator GetNameSpaceOf(const nsACString& aURI) const;
-
-protected:
-    Entry* mEntries;
-};
-
-
-#endif // nsNameSpaceMap_h__
deleted file mode 100644
--- a/rdf/base/nsRDFBaseDataSources.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  This header file just contains prototypes for the factory methods
-  for "builtin" data sources that are included in rdf.dll.
-
-  Each of these data sources is exposed to the external world via its
-  CID in ../include/nsRDFCID.h.
-
-*/
-
-#ifndef nsBaseDataSources_h__
-#define nsBaseDataSources_h__
-
-#include "nsError.h"
-class nsIRDFDataSource;
-
-// in nsInMemoryDataSource.cpp
-nsresult
-NS_NewRDFInMemoryDataSource(nsISupports* aOuter, const nsIID& aIID, void** aResult);
-
-// in nsRDFXMLDataSource.cpp
-extern nsresult
-NS_NewRDFXMLDataSource(nsIRDFDataSource** aResult);
-
-#endif // nsBaseDataSources_h__
-
-
deleted file mode 100644
--- a/rdf/base/nsRDFContainer.cpp
+++ /dev/null
@@ -1,724 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  Implementation for the RDF container.
-
-  Notes
-  -----
-
-  1. RDF containers are one-indexed. This means that a lot of the loops
-     that you'd normally think you'd write like this:
-
-       for (i = 0; i < count; ++i) {}
-
-     You've gotta write like this:
-
-       for (i = 1; i <= count; ++i) {}
-
-     "Sure, right, yeah, of course.", you say. Well maybe I'm just
-     thick, but it's easy to slip up.
-
-  2. The RDF:nextVal property on the container is an
-     implementation-level hack that is used to quickly compute the
-     next value for appending to the container. It will no doubt
-     become royally screwed up in the case of aggregation.
-
-  3. The RDF:nextVal property is also used to retrieve the count of
-     elements in the container.
-
- */
-
-
-#include "nsCOMPtr.h"
-#include "nsIRDFContainer.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIRDFInMemoryDataSource.h"
-#include "nsIRDFPropagatableDataSource.h"
-#include "nsIRDFService.h"
-#include "nsIServiceManager.h"
-#include "nsRDFCID.h"
-#include "nsString.h"
-#include "rdf.h"
-
-#define RDF_SEQ_LIST_LIMIT   8
-
-class RDFContainerImpl : public nsIRDFContainer
-{
-public:
-
-    // nsISupports interface
-    NS_DECL_ISUPPORTS
-
-    // nsIRDFContainer interface
-    NS_DECL_NSIRDFCONTAINER
-
-private:
-    friend nsresult NS_NewRDFContainer(nsIRDFContainer** aResult);
-
-    RDFContainerImpl();
-    virtual ~RDFContainerImpl();
-
-    nsresult Init();
-
-    nsresult Renumber(int32_t aStartIndex, int32_t aIncrement);
-    nsresult SetNextValue(int32_t aIndex);
-    nsresult GetNextValue(nsIRDFResource** aResult);
-
-    nsIRDFDataSource* mDataSource;
-    nsIRDFResource*   mContainer;
-
-    // pseudo constants
-    static int32_t gRefCnt;
-    static nsIRDFService*        gRDFService;
-    static nsIRDFContainerUtils* gRDFContainerUtils;
-    static nsIRDFResource*       kRDF_nextVal;
-};
-
-
-int32_t               RDFContainerImpl::gRefCnt = 0;
-nsIRDFService*        RDFContainerImpl::gRDFService;
-nsIRDFContainerUtils* RDFContainerImpl::gRDFContainerUtils;
-nsIRDFResource*       RDFContainerImpl::kRDF_nextVal;
-
-////////////////////////////////////////////////////////////////////////
-// nsISupports interface
-
-NS_IMPL_ISUPPORTS(RDFContainerImpl, nsIRDFContainer)
-
-
-
-////////////////////////////////////////////////////////////////////////
-// nsIRDFContainer interface
-
-NS_IMETHODIMP
-RDFContainerImpl::GetDataSource(nsIRDFDataSource** _retval)
-{
-    *_retval = mDataSource;
-    NS_IF_ADDREF(*_retval);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerImpl::GetResource(nsIRDFResource** _retval)
-{
-    *_retval = mContainer;
-    NS_IF_ADDREF(*_retval);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerImpl::Init(nsIRDFDataSource *aDataSource, nsIRDFResource *aContainer)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aContainer != nullptr, "null ptr");
-    if (! aContainer)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-    bool isContainer;
-    rv = gRDFContainerUtils->IsContainer(aDataSource, aContainer, &isContainer);
-    if (NS_FAILED(rv)) return rv;
-
-    // ``throw'' if we can't create a container on the specified
-    // datasource/resource combination.
-    if (! isContainer)
-        return NS_ERROR_FAILURE;
-
-    NS_IF_RELEASE(mDataSource);
-    mDataSource = aDataSource;
-    NS_ADDREF(mDataSource);
-
-    NS_IF_RELEASE(mContainer);
-    mContainer = aContainer;
-    NS_ADDREF(mContainer);
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerImpl::GetCount(int32_t *aCount)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    nsresult rv;
-
-    // Get the next value, which hangs off of the bag via the
-    // RDF:nextVal property. This is the _next value_ that will get
-    // assigned in a one-indexed array. So, it's actually _one more_
-    // than the actual count of elements in the container.
-    //
-    // XXX To handle aggregation, this should probably be a
-    // GetTargets() that enumerates all of the values and picks the
-    // largest one.
-    nsCOMPtr<nsIRDFNode> nextValNode;
-    rv = mDataSource->GetTarget(mContainer, kRDF_nextVal, true, getter_AddRefs(nextValNode));
-    if (NS_FAILED(rv)) return rv;
-
-    if (rv == NS_RDF_NO_VALUE)
-        return NS_ERROR_UNEXPECTED;
-
-    nsCOMPtr<nsIRDFLiteral> nextValLiteral;
-    rv = nextValNode->QueryInterface(NS_GET_IID(nsIRDFLiteral), getter_AddRefs(nextValLiteral));
-    if (NS_FAILED(rv)) return rv;
-
-    const char16_t *s;
-    rv = nextValLiteral->GetValueConst( &s );
-    if (NS_FAILED(rv)) return rv;
-
-    nsAutoString nextValStr(s);
-
-    int32_t nextVal;
-    nsresult err;
-    nextVal = nextValStr.ToInteger(&err);
-    if (NS_FAILED(err))
-        return NS_ERROR_UNEXPECTED;
-
-    *aCount = nextVal - 1;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerImpl::GetElements(nsISimpleEnumerator **_retval)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    return NS_NewContainerEnumerator(mDataSource, mContainer, _retval);
-}
-
-
-NS_IMETHODIMP
-RDFContainerImpl::AppendElement(nsIRDFNode *aElement)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    NS_PRECONDITION(aElement != nullptr, "null ptr");
-    if (! aElement)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    nsCOMPtr<nsIRDFResource> nextVal;
-    rv = GetNextValue(getter_AddRefs(nextVal));
-    if (NS_FAILED(rv)) return rv;
-
-    rv = mDataSource->Assert(mContainer, nextVal, aElement, true);
-    if (NS_FAILED(rv)) return rv;
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerImpl::RemoveElement(nsIRDFNode *aElement, bool aRenumber)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    NS_PRECONDITION(aElement != nullptr, "null ptr");
-    if (! aElement)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    int32_t idx;
-    rv = IndexOf(aElement, &idx);
-    if (NS_FAILED(rv)) return rv;
-
-    if (idx < 0)
-        return NS_OK;
-
-    // Remove the element.
-    nsCOMPtr<nsIRDFResource> ordinal;
-    rv = gRDFContainerUtils->IndexToOrdinalResource(idx,
-                                                    getter_AddRefs(ordinal));
-    if (NS_FAILED(rv)) return rv;
-
-    rv = mDataSource->Unassert(mContainer, ordinal, aElement);
-    if (NS_FAILED(rv)) return rv;
-
-    if (aRenumber) {
-        // Now slide the rest of the collection backwards to fill in
-        // the gap. This will have the side effect of completely
-        // renumber the container from index to the end.
-        rv = Renumber(idx + 1, -1);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerImpl::InsertElementAt(nsIRDFNode *aElement, int32_t aIndex, bool aRenumber)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    NS_PRECONDITION(aElement != nullptr, "null ptr");
-    if (! aElement)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aIndex >= 1, "illegal value");
-    if (aIndex < 1)
-        return NS_ERROR_ILLEGAL_VALUE;
-
-    nsresult rv;
-
-    int32_t count;
-    rv = GetCount(&count);
-    if (NS_FAILED(rv)) return rv;
-
-    NS_ASSERTION(aIndex <= count + 1, "illegal value");
-    if (aIndex > count + 1)
-        return NS_ERROR_ILLEGAL_VALUE;
-
-    if (aRenumber) {
-        // Make a hole for the element. This will have the side effect of
-        // completely renumbering the container from 'aIndex' to 'count',
-        // and will spew assertions.
-        rv = Renumber(aIndex, +1);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    nsCOMPtr<nsIRDFResource> ordinal;
-    rv = gRDFContainerUtils->IndexToOrdinalResource(aIndex, getter_AddRefs(ordinal));
-    if (NS_FAILED(rv)) return rv;
-
-    rv = mDataSource->Assert(mContainer, ordinal, aElement, true);
-    if (NS_FAILED(rv)) return rv;
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContainerImpl::RemoveElementAt(int32_t aIndex, bool aRenumber, nsIRDFNode** _retval)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    *_retval = nullptr;
-
-    if (aIndex< 1)
-        return NS_ERROR_ILLEGAL_VALUE;
-
-    nsresult rv;
-
-    int32_t count;
-    rv = GetCount(&count);
-    if (NS_FAILED(rv)) return rv;
-
-    if (aIndex > count)
-        return NS_ERROR_ILLEGAL_VALUE;
-
-    nsCOMPtr<nsIRDFResource> ordinal;
-    rv = gRDFContainerUtils->IndexToOrdinalResource(aIndex, getter_AddRefs(ordinal));
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIRDFNode> old;
-    rv = mDataSource->GetTarget(mContainer, ordinal, true, getter_AddRefs(old));
-    if (NS_FAILED(rv)) return rv;
-
-    if (rv == NS_OK) {
-        rv = mDataSource->Unassert(mContainer, ordinal, old);
-        if (NS_FAILED(rv)) return rv;
-
-        if (aRenumber) {
-            // Now slide the rest of the collection backwards to fill in
-            // the gap. This will have the side effect of completely
-            // renumber the container from index to the end.
-            rv = Renumber(aIndex + 1, -1);
-            if (NS_FAILED(rv)) return rv;
-        }
-    }
-
-    old.swap(*_retval);
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContainerImpl::IndexOf(nsIRDFNode *aElement, int32_t *aIndex)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    return gRDFContainerUtils->IndexOf(mDataSource, mContainer,
-                                       aElement, aIndex);
-}
-
-
-////////////////////////////////////////////////////////////////////////
-
-
-RDFContainerImpl::RDFContainerImpl()
-    : mDataSource(nullptr), mContainer(nullptr)
-{
-}
-
-
-nsresult
-RDFContainerImpl::Init()
-{
-    if (gRefCnt++ == 0) {
-        nsresult rv;
-
-        NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-        rv = CallGetService(kRDFServiceCID, &gRDFService);
-        if (NS_FAILED(rv)) {
-            NS_ERROR("unable to get RDF service");
-            return rv;
-        }
-
-        rv = gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "nextVal"),
-                                      &kRDF_nextVal);
-        if (NS_FAILED(rv)) return rv;
-
-        NS_DEFINE_CID(kRDFContainerUtilsCID, NS_RDFCONTAINERUTILS_CID);
-        rv = CallGetService(kRDFContainerUtilsCID, &gRDFContainerUtils);
-        if (NS_FAILED(rv)) {
-            NS_ERROR("unable to get RDF container utils service");
-            return rv;
-        }
-    }
-
-    return NS_OK;
-}
-
-
-RDFContainerImpl::~RDFContainerImpl()
-{
-#ifdef DEBUG_REFS
-    --gInstanceCount;
-    fprintf(stdout, "%d - RDF: RDFContainerImpl\n", gInstanceCount);
-#endif
-
-    NS_IF_RELEASE(mContainer);
-    NS_IF_RELEASE(mDataSource);
-
-    if (--gRefCnt == 0) {
-        NS_IF_RELEASE(gRDFContainerUtils);
-        NS_IF_RELEASE(gRDFService);
-        NS_IF_RELEASE(kRDF_nextVal);
-    }
-}
-
-
-nsresult
-NS_NewRDFContainer(nsIRDFContainer** aResult)
-{
-    RDFContainerImpl* result = new RDFContainerImpl();
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    nsresult rv;
-    rv = result->Init();
-    if (NS_FAILED(rv)) {
-        delete result;
-        return rv;
-    }
-
-    NS_ADDREF(result);
-    *aResult = result;
-    return NS_OK;
-}
-
-
-nsresult
-NS_NewRDFContainer(nsIRDFDataSource* aDataSource,
-                   nsIRDFResource* aResource,
-                   nsIRDFContainer** aResult)
-{
-    nsresult rv;
-    rv = NS_NewRDFContainer(aResult);
-    if (NS_FAILED(rv)) return rv;
-
-    rv = (*aResult)->Init(aDataSource, aResource);
-    if (NS_FAILED(rv)) {
-        NS_RELEASE(*aResult);
-    }
-    return rv;
-}
-
-
-nsresult
-RDFContainerImpl::Renumber(int32_t aStartIndex, int32_t aIncrement)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    // Renumber the elements in the container starting with
-    // aStartIndex, updating each element's index by aIncrement. For
-    // example,
-    //
-    //   (1:a 2:b 3:c)
-    //   Renumber(2, +1);
-    //   (1:a 3:b 4:c)
-    //   Renumber(3, -1);
-    //   (1:a 2:b 3:c)
-    //
-    nsresult rv;
-
-    if (! aIncrement)
-        return NS_OK;
-
-    int32_t count;
-    rv = GetCount(&count);
-    if (NS_FAILED(rv)) return rv;
-
-    if (aIncrement > 0) {
-        // Update the container's nextVal to reflect the
-        // renumbering. We do this now if aIncrement > 0 because we'll
-        // want to be able to acknowledge that new elements are in the
-        // container.
-        rv = SetNextValue(count + aIncrement + 1);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    int32_t i;
-    if (aIncrement < 0) {
-        i = aStartIndex;
-    }
-    else {
-        i = count; // we're one-indexed.
-    }
-
-    // Note: once we disable notifications, don't exit this method until
-    // enabling notifications
-    nsCOMPtr<nsIRDFPropagatableDataSource> propagatable =
-        do_QueryInterface(mDataSource);
-    if (propagatable) {
-        propagatable->SetPropagateChanges(false);
-    }
-
-    bool    err = false;
-    while (!err && ((aIncrement < 0) ? (i <= count) : (i >= aStartIndex)))
-    {
-        nsCOMPtr<nsIRDFResource> oldOrdinal;
-        rv = gRDFContainerUtils->IndexToOrdinalResource(i, getter_AddRefs(oldOrdinal));
-        if (NS_FAILED(rv))
-        {
-            err = true;
-            continue;
-        }
-
-        nsCOMPtr<nsIRDFResource> newOrdinal;
-        rv = gRDFContainerUtils->IndexToOrdinalResource(i + aIncrement, getter_AddRefs(newOrdinal));
-        if (NS_FAILED(rv))
-        {
-            err = true;
-            continue;
-        }
-
-        // Because of aggregation, we need to be paranoid about the
-        // possibility that >1 element may be present per ordinal. If
-        // there _is_ in fact more than one element, they'll all get
-        // assigned to the same new ordinal; i.e., we don't make any
-        // attempt to "clean up" the duplicate numbering. (Doing so
-        // would require two passes.)
-        nsCOMPtr<nsISimpleEnumerator> targets;
-        rv = mDataSource->GetTargets(mContainer, oldOrdinal, true, getter_AddRefs(targets));
-        if (NS_FAILED(rv))
-        {
-            err = true;
-            continue;
-        }
-
-        while (1) {
-            bool hasMore;
-            rv = targets->HasMoreElements(&hasMore);
-            if (NS_FAILED(rv))
-            {
-                err = true;
-                break;
-            }
-
-            if (! hasMore)
-                break;
-
-            nsCOMPtr<nsISupports> isupports;
-            rv = targets->GetNext(getter_AddRefs(isupports));
-            if (NS_FAILED(rv))
-            {
-                err = true;
-                break;
-            }
-
-            nsCOMPtr<nsIRDFNode> element( do_QueryInterface(isupports) );
-            NS_ASSERTION(element != nullptr, "something funky in the enumerator");
-            if (! element)
-            {
-                err = true;
-                rv = NS_ERROR_UNEXPECTED;
-                break;
-            }
-
-            rv = mDataSource->Unassert(mContainer, oldOrdinal, element);
-            if (NS_FAILED(rv))
-            {
-                err = true;
-                break;
-            }
-
-            rv = mDataSource->Assert(mContainer, newOrdinal, element, true);
-            if (NS_FAILED(rv))
-            {
-                err = true;
-                break;
-            }
-        }
-
-        i -= aIncrement;
-    }
-
-    if (!err && (aIncrement < 0))
-    {
-        // Update the container's nextVal to reflect the
-        // renumbering. We do this now if aIncrement < 0 because, up
-        // until this point, we'll want people to be able to find
-        // things that are still "at the end".
-        rv = SetNextValue(count + aIncrement + 1);
-        if (NS_FAILED(rv))
-        {
-            err = true;
-        }
-    }
-
-    // Note: MUST enable notifications before exiting this method
-    if (propagatable) {
-        propagatable->SetPropagateChanges(true);
-    }
-
-    if (err) return(rv);
-
-    return NS_OK;
-}
-
-
-
-nsresult
-RDFContainerImpl::SetNextValue(int32_t aIndex)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    nsresult rv;
-
-    // Remove the current value of nextVal, if there is one.
-    nsCOMPtr<nsIRDFNode> nextValNode;
-    if (NS_SUCCEEDED(rv = mDataSource->GetTarget(mContainer,
-                                                 kRDF_nextVal,
-                                                 true,
-                                                 getter_AddRefs(nextValNode)))) {
-        if (NS_FAILED(rv = mDataSource->Unassert(mContainer, kRDF_nextVal, nextValNode))) {
-            NS_ERROR("unable to update nextVal");
-            return rv;
-        }
-    }
-
-    nsAutoString s;
-    s.AppendInt(aIndex, 10);
-
-    nsCOMPtr<nsIRDFLiteral> nextVal;
-    if (NS_FAILED(rv = gRDFService->GetLiteral(s.get(), getter_AddRefs(nextVal)))) {
-        NS_ERROR("unable to get nextVal literal");
-        return rv;
-    }
-
-    rv = mDataSource->Assert(mContainer, kRDF_nextVal, nextVal, true);
-    if (rv != NS_RDF_ASSERTION_ACCEPTED) {
-        NS_ERROR("unable to update nextVal");
-        return NS_ERROR_FAILURE;
-    }
-
-    return NS_OK;
-}
-
-
-nsresult
-RDFContainerImpl::GetNextValue(nsIRDFResource** aResult)
-{
-    if (!mDataSource || !mContainer)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    nsresult rv;
-
-    // Get the next value, which hangs off of the bag via the
-    // RDF:nextVal property.
-    nsCOMPtr<nsIRDFNode> nextValNode;
-    rv = mDataSource->GetTarget(mContainer, kRDF_nextVal, true, getter_AddRefs(nextValNode));
-    if (NS_FAILED(rv)) return rv;
-
-    if (rv == NS_RDF_NO_VALUE)
-        return NS_ERROR_UNEXPECTED;
-
-    nsCOMPtr<nsIRDFLiteral> nextValLiteral;
-    rv = nextValNode->QueryInterface(NS_GET_IID(nsIRDFLiteral), getter_AddRefs(nextValLiteral));
-    if (NS_FAILED(rv)) return rv;
-
-    const char16_t* s;
-    rv = nextValLiteral->GetValueConst(&s);
-    if (NS_FAILED(rv)) return rv;
-
-    int32_t nextVal = 0;
-    {
-        for (const char16_t* p = s; *p != 0; ++p) {
-            NS_ASSERTION(*p >= '0' && *p <= '9', "not a digit");
-            if (*p < '0' || *p > '9')
-                break;
-
-            nextVal *= 10;
-            nextVal += *p - '0';
-        }
-    }
-
-    static const char kRDFNameSpaceURI[] = RDF_NAMESPACE_URI;
-    nsAutoCStringN<sizeof(kRDFNameSpaceURI) + 16> nextValStr;
-    nextValStr = kRDFNameSpaceURI;
-    nextValStr.Append('_');
-    nextValStr.AppendInt(nextVal, 10);
-
-    rv = gRDFService->GetResource(nextValStr, aResult);
-    if (NS_FAILED(rv)) return rv;
-
-    // Now increment the RDF:nextVal property.
-    rv = mDataSource->Unassert(mContainer, kRDF_nextVal, nextValLiteral);
-    if (NS_FAILED(rv)) return rv;
-
-    ++nextVal;
-    nextValStr.Truncate();
-    nextValStr.AppendInt(nextVal, 10);
-
-    rv = gRDFService->GetLiteral(NS_ConvertASCIItoUTF16(nextValStr).get(), getter_AddRefs(nextValLiteral));
-    if (NS_FAILED(rv)) return rv;
-
-    rv = mDataSource->Assert(mContainer, kRDF_nextVal, nextValLiteral, true);
-    if (NS_FAILED(rv)) return rv;
-
-    if (RDF_SEQ_LIST_LIMIT == nextVal)
-    {
-        // focal point for RDF container mutation;
-        // basically, provide a hint to allow for fast access
-        nsCOMPtr<nsIRDFInMemoryDataSource> inMem = do_QueryInterface(mDataSource);
-        if (inMem)
-        {
-            // ignore error; failure just means slower access
-            (void)inMem->EnsureFastContainment(mContainer);
-        }
-    }
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/rdf/base/nsRDFContainerUtils.cpp
+++ /dev/null
@@ -1,513 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  Implementation for the RDF container utils.
-
- */
-
-
-#include "nsCOMPtr.h"
-#include "nsIServiceManager.h"
-#include "nsIRDFContainer.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIRDFService.h"
-#include "nsRDFCID.h"
-#include "nsString.h"
-#include "plstr.h"
-#include "rdf.h"
-#include "rdfutil.h"
-
-class RDFContainerUtilsImpl : public nsIRDFContainerUtils
-{
-public:
-    // nsISupports interface
-    NS_DECL_ISUPPORTS
-
-    // nsIRDFContainerUtils interface
-    NS_DECL_NSIRDFCONTAINERUTILS
-
-private:
-    friend nsresult NS_NewRDFContainerUtils(nsIRDFContainerUtils** aResult);
-
-    RDFContainerUtilsImpl();
-    virtual ~RDFContainerUtilsImpl();
-
-    nsresult MakeContainer(nsIRDFDataSource* aDataSource,
-                           nsIRDFResource* aResource,
-                           nsIRDFResource* aType,
-                           nsIRDFContainer** aResult);
-
-    bool IsA(nsIRDFDataSource* aDataSource, nsIRDFResource* aResource, nsIRDFResource* aType);
-
-    // pseudo constants
-    static int32_t gRefCnt;
-    static nsIRDFService* gRDFService;
-    static nsIRDFResource* kRDF_instanceOf;
-    static nsIRDFResource* kRDF_nextVal;
-    static nsIRDFResource* kRDF_Bag;
-    static nsIRDFResource* kRDF_Seq;
-    static nsIRDFResource* kRDF_Alt;
-    static nsIRDFLiteral* kOne;
-    static const char kRDFNameSpaceURI[];
-};
-
-int32_t         RDFContainerUtilsImpl::gRefCnt = 0;
-nsIRDFService*  RDFContainerUtilsImpl::gRDFService;
-nsIRDFResource* RDFContainerUtilsImpl::kRDF_instanceOf;
-nsIRDFResource* RDFContainerUtilsImpl::kRDF_nextVal;
-nsIRDFResource* RDFContainerUtilsImpl::kRDF_Bag;
-nsIRDFResource* RDFContainerUtilsImpl::kRDF_Seq;
-nsIRDFResource* RDFContainerUtilsImpl::kRDF_Alt;
-nsIRDFLiteral*  RDFContainerUtilsImpl::kOne;
-const char      RDFContainerUtilsImpl::kRDFNameSpaceURI[] = RDF_NAMESPACE_URI;
-
-////////////////////////////////////////////////////////////////////////
-// nsISupports interface
-
-NS_IMPL_ISUPPORTS(RDFContainerUtilsImpl, nsIRDFContainerUtils)
-
-////////////////////////////////////////////////////////////////////////
-// nsIRDFContainerUtils interface
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::IsOrdinalProperty(nsIRDFResource *aProperty, bool *_retval)
-{
-    NS_PRECONDITION(aProperty != nullptr, "null ptr");
-    if (! aProperty)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    const char	*propertyStr;
-    rv = aProperty->GetValueConst( &propertyStr );
-    if (NS_FAILED(rv)) return rv;
-
-    if (PL_strncmp(propertyStr, kRDFNameSpaceURI, sizeof(kRDFNameSpaceURI) - 1) != 0) {
-        *_retval = false;
-        return NS_OK;
-    }
-
-    const char* s = propertyStr;
-    s += sizeof(kRDFNameSpaceURI) - 1;
-    if (*s != '_') {
-        *_retval = false;
-        return NS_OK;
-    }
-
-    ++s;
-    while (*s) {
-        if (*s < '0' || *s > '9') {
-            *_retval = false;
-            return NS_OK;
-        }
-
-        ++s;
-    }
-
-    *_retval = true;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::IndexToOrdinalResource(int32_t aIndex, nsIRDFResource **aOrdinal)
-{
-    NS_PRECONDITION(aIndex > 0, "illegal value");
-    if (aIndex <= 0)
-        return NS_ERROR_ILLEGAL_VALUE;
-
-    nsAutoCString uri(kRDFNameSpaceURI);
-    uri.Append('_');
-    uri.AppendInt(aIndex);
-
-    nsresult rv = gRDFService->GetResource(uri, aOrdinal);
-    NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get ordinal resource");
-    if (NS_FAILED(rv)) return rv;
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::OrdinalResourceToIndex(nsIRDFResource *aOrdinal, int32_t *aIndex)
-{
-    NS_PRECONDITION(aOrdinal != nullptr, "null ptr");
-    if (! aOrdinal)
-        return NS_ERROR_NULL_POINTER;
-
-    const char	*ordinalStr;
-    if (NS_FAILED(aOrdinal->GetValueConst( &ordinalStr )))
-        return NS_ERROR_FAILURE;
-
-    const char* s = ordinalStr;
-    if (PL_strncmp(s, kRDFNameSpaceURI, sizeof(kRDFNameSpaceURI) - 1) != 0) {
-        NS_ERROR("not an ordinal");
-        return NS_ERROR_UNEXPECTED;
-    }
-
-    s += sizeof(kRDFNameSpaceURI) - 1;
-    if (*s != '_') {
-        NS_ERROR("not an ordinal");
-        return NS_ERROR_UNEXPECTED;
-    }
-
-    int32_t idx = 0;
-
-    ++s;
-    while (*s) {
-        if (*s < '0' || *s > '9') {
-            NS_ERROR("not an ordinal");
-            return NS_ERROR_UNEXPECTED;
-        }
-
-        idx *= 10;
-        idx += (*s - '0');
-
-        ++s;
-    }
-
-    *aIndex = idx;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::IsContainer(nsIRDFDataSource *aDataSource, nsIRDFResource *aResource, bool *_retval)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(_retval != nullptr, "null ptr");
-    if (! _retval)
-        return NS_ERROR_NULL_POINTER;
-
-    if (IsA(aDataSource, aResource, kRDF_Seq) ||
-        IsA(aDataSource, aResource, kRDF_Bag) ||
-        IsA(aDataSource, aResource, kRDF_Alt)) {
-        *_retval = true;
-    }
-    else {
-        *_retval = false;
-    }
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::IsEmpty(nsIRDFDataSource* aDataSource, nsIRDFResource* aResource, bool* _retval)
-{
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    // By default, say that we're an empty container. Even if we're not
-    // really even a container.
-    *_retval = true;
-
-    nsCOMPtr<nsIRDFNode> nextValNode;
-    rv = aDataSource->GetTarget(aResource, kRDF_nextVal, true, getter_AddRefs(nextValNode));
-    if (NS_FAILED(rv)) return rv;
-
-    if (rv == NS_RDF_NO_VALUE)
-        return NS_OK;
-
-    nsCOMPtr<nsIRDFLiteral> nextValLiteral;
-    rv = nextValNode->QueryInterface(NS_GET_IID(nsIRDFLiteral), getter_AddRefs(nextValLiteral));
-    if (NS_FAILED(rv)) return rv;
-
-    if (nextValLiteral.get() != kOne)
-        *_retval = false;
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::IsBag(nsIRDFDataSource *aDataSource, nsIRDFResource *aResource, bool *_retval)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(_retval != nullptr, "null ptr");
-    if (! _retval)
-        return NS_ERROR_NULL_POINTER;
-
-    *_retval = IsA(aDataSource, aResource, kRDF_Bag);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::IsSeq(nsIRDFDataSource *aDataSource, nsIRDFResource *aResource, bool *_retval)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(_retval != nullptr, "null ptr");
-    if (! _retval)
-        return NS_ERROR_NULL_POINTER;
-
-    *_retval = IsA(aDataSource, aResource, kRDF_Seq);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::IsAlt(nsIRDFDataSource *aDataSource, nsIRDFResource *aResource, bool *_retval)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(_retval != nullptr, "null ptr");
-    if (! _retval)
-        return NS_ERROR_NULL_POINTER;
-
-    *_retval = IsA(aDataSource, aResource, kRDF_Alt);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::MakeBag(nsIRDFDataSource *aDataSource, nsIRDFResource *aResource, nsIRDFContainer **_retval)
-{
-    return MakeContainer(aDataSource, aResource, kRDF_Bag, _retval);
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::MakeSeq(nsIRDFDataSource *aDataSource, nsIRDFResource *aResource, nsIRDFContainer **_retval)
-{
-    return MakeContainer(aDataSource, aResource, kRDF_Seq, _retval);
-}
-
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::MakeAlt(nsIRDFDataSource *aDataSource, nsIRDFResource *aResource, nsIRDFContainer **_retval)
-{
-    return MakeContainer(aDataSource, aResource, kRDF_Alt, _retval);
-}
-
-
-
-////////////////////////////////////////////////////////////////////////
-
-
-RDFContainerUtilsImpl::RDFContainerUtilsImpl()
-{
-    if (gRefCnt++ == 0) {
-        nsresult rv;
-
-        NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-        rv = CallGetService(kRDFServiceCID, &gRDFService);
-
-        NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get RDF service");
-        if (NS_SUCCEEDED(rv)) {
-            gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "instanceOf"),
-                                     &kRDF_instanceOf);
-            gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "nextVal"),
-                                     &kRDF_nextVal);
-            gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Bag"),
-                                     &kRDF_Bag);
-            gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Seq"),
-                                     &kRDF_Seq);
-            gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Alt"),
-                                     &kRDF_Alt);
-            gRDFService->GetLiteral(u"1", &kOne);
-        }
-    }
-}
-
-
-RDFContainerUtilsImpl::~RDFContainerUtilsImpl()
-{
-#ifdef DEBUG_REFS
-    --gInstanceCount;
-    fprintf(stdout, "%d - RDF: RDFContainerUtilsImpl\n", gInstanceCount);
-#endif
-
-    if (--gRefCnt == 0) {
-        NS_IF_RELEASE(gRDFService);
-        NS_IF_RELEASE(kRDF_instanceOf);
-        NS_IF_RELEASE(kRDF_nextVal);
-        NS_IF_RELEASE(kRDF_Bag);
-        NS_IF_RELEASE(kRDF_Seq);
-        NS_IF_RELEASE(kRDF_Alt);
-        NS_IF_RELEASE(kOne);
-    }
-}
-
-
-
-nsresult
-NS_NewRDFContainerUtils(nsIRDFContainerUtils** aResult)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    RDFContainerUtilsImpl* result =
-        new RDFContainerUtilsImpl();
-
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(result);
-    *aResult = result;
-    return NS_OK;
-}
-
-
-nsresult
-RDFContainerUtilsImpl::MakeContainer(nsIRDFDataSource* aDataSource, nsIRDFResource* aResource, nsIRDFResource* aType, nsIRDFContainer** aResult)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)	return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)	return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aType != nullptr, "null ptr");
-    if (! aType)	return NS_ERROR_NULL_POINTER;
-
-    if (aResult)	*aResult = nullptr;
-
-    nsresult rv;
-
-    // Check to see if somebody has already turned it into a container; if so
-    // don't try to do it again.
-    bool isContainer;
-    rv = IsContainer(aDataSource, aResource, &isContainer);
-    if (NS_FAILED(rv)) return rv;
-
-    if (!isContainer)
-    {
-	rv = aDataSource->Assert(aResource, kRDF_instanceOf, aType, true);
-	if (NS_FAILED(rv)) return rv;
-
-	rv = aDataSource->Assert(aResource, kRDF_nextVal, kOne, true);
-	if (NS_FAILED(rv)) return rv;
-    }
-
-    if (aResult) {
-        rv = NS_NewRDFContainer(aResult);
-        if (NS_FAILED(rv)) return rv;
-
-        rv = (*aResult)->Init(aDataSource, aResource);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    return NS_OK;
-}
-
-bool
-RDFContainerUtilsImpl::IsA(nsIRDFDataSource* aDataSource, nsIRDFResource* aResource, nsIRDFResource* aType)
-{
-    if (!aDataSource || !aResource || !aType) {
-        NS_WARNING("Unexpected null argument");
-        return false;
-    }
-
-    nsresult rv;
-
-    bool result;
-    rv = aDataSource->HasAssertion(aResource, kRDF_instanceOf, aType, true, &result);
-    if (NS_FAILED(rv))
-      return false;
-
-    return result;
-}
-
-NS_IMETHODIMP
-RDFContainerUtilsImpl::IndexOf(nsIRDFDataSource* aDataSource, nsIRDFResource* aContainer, nsIRDFNode* aElement, int32_t* aIndex)
-{
-    if (!aDataSource || !aContainer)
-        return NS_ERROR_NULL_POINTER;
-
-    // Assume we can't find it.
-    *aIndex = -1;
-
-    // If the resource is null, bail quietly
-    if (! aElement)
-      return NS_OK;
-
-    // We'll assume that fan-out is much higher than fan-in, so grovel
-    // through the inbound arcs, look for an ordinal resource, and
-    // decode it.
-    nsCOMPtr<nsISimpleEnumerator> arcsIn;
-    aDataSource->ArcLabelsIn(aElement, getter_AddRefs(arcsIn));
-    if (! arcsIn)
-        return NS_OK;
-
-    while (1) {
-        bool hasMoreArcs = false;
-        arcsIn->HasMoreElements(&hasMoreArcs);
-        if (! hasMoreArcs)
-            break;
-
-        nsCOMPtr<nsISupports> isupports;
-        arcsIn->GetNext(getter_AddRefs(isupports));
-        if (! isupports)
-            break;
-
-        nsCOMPtr<nsIRDFResource> property =
-            do_QueryInterface(isupports);
-
-        if (! property)
-            continue;
-
-        bool isOrdinal;
-        IsOrdinalProperty(property, &isOrdinal);
-        if (! isOrdinal)
-            continue;
-
-        nsCOMPtr<nsISimpleEnumerator> sources;
-        aDataSource->GetSources(property, aElement, true, getter_AddRefs(sources));
-        if (! sources)
-            continue;
-
-        while (1) {
-            bool hasMoreSources = false;
-            sources->HasMoreElements(&hasMoreSources);
-            if (! hasMoreSources)
-                break;
-
-            nsCOMPtr<nsISupports> isupports2;
-            sources->GetNext(getter_AddRefs(isupports2));
-            if (! isupports2)
-                break;
-
-            nsCOMPtr<nsIRDFResource> source =
-                do_QueryInterface(isupports2);
-
-            if (source == aContainer)
-                // Found it.
-                return OrdinalResourceToIndex(property, aIndex);
-        }
-    }
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/rdf/base/nsRDFContentSink.cpp
+++ /dev/null
@@ -1,1444 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  An implementation for an NGLayout-style content sink that knows how
-  to build an RDF content model from XML-serialized RDF.
-
-  For more information on the RDF/XML syntax,
-  see http://www.w3.org/TR/REC-rdf-syntax/
-
-  This code is based on the final W3C Recommendation,
-  http://www.w3.org/TR/1999/REC-rdf-syntax-19990222.
-
-  Open Issues ------------------
-
-  1) factoring code with nsXMLContentSink - There's some amount of
-     common code between this and the HTML content sink. This will
-     increase as we support more and more HTML elements. How can code
-     from XML/HTML be factored?
-
-  2) We don't support the `parseType' attribute on the Description
-     tag; therefore, it is impossible to "inline" raw XML in this
-     implemenation.
-
-  3) We don't build the reifications at parse time due to the
-     footprint overhead it would incur for large RDF documents. (It
-     may be possible to attach a "reification" wrapper datasource that
-     would present this information at query-time.) Because of this,
-     the `bagID' attribute is not processed correctly.
-
-  4) No attempt is made to `resolve URIs' to a canonical form (the
-     specification hints that an implementation should do this). This
-     is omitted for the obvious reason that we can ill afford to
-     resolve each URI reference.
-
-*/
-
-#include "nsCOMPtr.h"
-#include "nsInterfaceHashtable.h"
-#include "nsIContentSink.h"
-#include "nsIRDFContainer.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIRDFContentSink.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFService.h"
-#include "nsIRDFXMLSink.h"
-#include "nsIServiceManager.h"
-#include "nsIURL.h"
-#include "nsIXMLContentSink.h"
-#include "nsRDFCID.h"
-#include "nsTArray.h"
-#include "nsString.h"
-#include "mozilla/Logging.h"
-#include "rdf.h"
-#include "rdfutil.h"
-#include "nsReadableUtils.h"
-#include "nsIExpatSink.h"
-#include "nsCRT.h"
-#include "nsAtom.h"
-#include "nsGkAtoms.h"
-#include "nsIScriptError.h"
-#include "nsIDTD.h"
-
-using namespace mozilla;
-
-///////////////////////////////////////////////////////////////////////
-
-enum RDFContentSinkState {
-    eRDFContentSinkState_InProlog,
-    eRDFContentSinkState_InDocumentElement,
-    eRDFContentSinkState_InDescriptionElement,
-    eRDFContentSinkState_InContainerElement,
-    eRDFContentSinkState_InPropertyElement,
-    eRDFContentSinkState_InMemberElement,
-    eRDFContentSinkState_InEpilog
-};
-
-enum RDFContentSinkParseMode {
-    eRDFContentSinkParseMode_Resource,
-    eRDFContentSinkParseMode_Literal,
-    eRDFContentSinkParseMode_Int,
-    eRDFContentSinkParseMode_Date
-};
-
-typedef decltype(&nsIRDFContainerUtils::IsAlt) nsContainerTestFn;
-typedef decltype(&nsIRDFContainerUtils::MakeAlt) nsMakeContainerFn;
-
-class RDFContentSinkImpl : public nsIRDFContentSink,
-                           public nsIExpatSink
-{
-public:
-    RDFContentSinkImpl();
-
-    // nsISupports
-    NS_DECL_ISUPPORTS
-    NS_DECL_NSIEXPATSINK
-
-    // nsIContentSink
-    NS_IMETHOD WillParse(void) override;
-    NS_IMETHOD WillBuildModel(nsDTDMode aDTDMode) override;
-    NS_IMETHOD DidBuildModel(bool aTerminated) override;
-    NS_IMETHOD WillInterrupt(void) override;
-    NS_IMETHOD WillResume(void) override;
-    NS_IMETHOD SetParser(nsParserBase* aParser) override;
-    virtual void FlushPendingNotifications(mozilla::FlushType aType) override { }
-    virtual void SetDocumentCharset(NotNull<const Encoding*> aEncoding)
-      override { }
-    virtual nsISupports *GetTarget() override { return nullptr; }
-
-    // nsIRDFContentSink
-    NS_IMETHOD Init(nsIURI* aURL) override;
-    NS_IMETHOD SetDataSource(nsIRDFDataSource* aDataSource) override;
-    NS_IMETHOD GetDataSource(nsIRDFDataSource*& aDataSource) override;
-
-    // pseudo constants
-    static int32_t gRefCnt;
-    static nsIRDFService* gRDFService;
-    static nsIRDFContainerUtils* gRDFContainerUtils;
-    static nsIRDFResource* kRDF_type;
-    static nsIRDFResource* kRDF_instanceOf; // XXX should be RDF:type
-    static nsIRDFResource* kRDF_Alt;
-    static nsIRDFResource* kRDF_Bag;
-    static nsIRDFResource* kRDF_Seq;
-    static nsIRDFResource* kRDF_nextVal;
-
-    typedef struct ContainerInfo {
-        nsIRDFResource**  mType;
-        nsContainerTestFn mTestFn;
-        nsMakeContainerFn mMakeFn;
-    } ContainerInfo;
-
-protected:
-    virtual ~RDFContentSinkImpl();
-
-    // Text management
-    void ParseText(nsIRDFNode **aResult);
-
-    nsresult FlushText();
-    nsresult AddText(const char16_t* aText, int32_t aLength);
-
-    // RDF-specific parsing
-    nsresult OpenRDF(const char16_t* aName);
-    nsresult OpenObject(const char16_t* aName ,const char16_t** aAttributes);
-    nsresult OpenProperty(const char16_t* aName, const char16_t** aAttributes);
-    nsresult OpenMember(const char16_t* aName, const char16_t** aAttributes);
-    nsresult OpenValue(const char16_t* aName, const char16_t** aAttributes);
-
-    nsresult GetIdAboutAttribute(const char16_t** aAttributes, nsIRDFResource** aResource, bool* aIsAnonymous = nullptr);
-    nsresult GetResourceAttribute(const char16_t** aAttributes, nsIRDFResource** aResource);
-    nsresult AddProperties(const char16_t** aAttributes, nsIRDFResource* aSubject, int32_t* aCount = nullptr);
-    void SetParseMode(const char16_t **aAttributes);
-
-    char16_t* mText;
-    int32_t mTextLength;
-    int32_t mTextSize;
-
-    /**
-     * From the set of given attributes, this method extracts the
-     * namespace definitions and feeds them to the datasource.
-     * These can then be suggested to the serializer to be used again.
-     * Hopefully, this will keep namespace definitions intact in a
-     * parse - serialize cycle.
-     */
-    void RegisterNamespaces(const char16_t **aAttributes);
-
-    /**
-     * Extracts the localname from aExpatName, the name that the Expat parser
-     * passes us.
-     * aLocalName will contain the localname in aExpatName.
-     * The return value is a dependent string containing just the namespace.
-     */
-    const nsDependentSubstring SplitExpatName(const char16_t *aExpatName,
-                                              nsAtom **aLocalName);
-
-    enum eContainerType { eBag, eSeq, eAlt };
-    nsresult InitContainer(nsIRDFResource* aContainerType, nsIRDFResource* aContainer);
-    nsresult ReinitContainer(nsIRDFResource* aContainerType, nsIRDFResource* aContainer);
-
-    // The datasource in which we're assigning assertions
-    nsCOMPtr<nsIRDFDataSource> mDataSource;
-
-    // A hash of all the node IDs referred to
-    nsInterfaceHashtable<nsStringHashKey, nsIRDFResource> mNodeIDMap;
-
-    // The current state of the content sink
-    RDFContentSinkState mState;
-    RDFContentSinkParseMode mParseMode;
-
-    // content stack management
-    int32_t
-    PushContext(nsIRDFResource *aContext,
-                RDFContentSinkState aState,
-                RDFContentSinkParseMode aParseMode);
-
-    nsresult
-    PopContext(nsIRDFResource         *&aContext,
-               RDFContentSinkState     &aState,
-               RDFContentSinkParseMode &aParseMode);
-
-    nsIRDFResource* GetContextElement(int32_t ancestor = 0);
-
-
-    struct RDFContextStackElement {
-        nsCOMPtr<nsIRDFResource> mResource;
-        RDFContentSinkState      mState;
-        RDFContentSinkParseMode  mParseMode;
-    };
-
-    AutoTArray<RDFContextStackElement, 8>* mContextStack;
-
-    nsCOMPtr<nsIURI> mDocumentURL;
-
-private:
-    static mozilla::LazyLogModule gLog;
-};
-
-int32_t         RDFContentSinkImpl::gRefCnt = 0;
-nsIRDFService*  RDFContentSinkImpl::gRDFService;
-nsIRDFContainerUtils* RDFContentSinkImpl::gRDFContainerUtils;
-nsIRDFResource* RDFContentSinkImpl::kRDF_type;
-nsIRDFResource* RDFContentSinkImpl::kRDF_instanceOf;
-nsIRDFResource* RDFContentSinkImpl::kRDF_Alt;
-nsIRDFResource* RDFContentSinkImpl::kRDF_Bag;
-nsIRDFResource* RDFContentSinkImpl::kRDF_Seq;
-nsIRDFResource* RDFContentSinkImpl::kRDF_nextVal;
-
-mozilla::LazyLogModule RDFContentSinkImpl::gLog("nsRDFContentSink");
-
-////////////////////////////////////////////////////////////////////////
-
-RDFContentSinkImpl::RDFContentSinkImpl()
-    : mText(nullptr),
-      mTextLength(0),
-      mTextSize(0),
-      mState(eRDFContentSinkState_InProlog),
-      mParseMode(eRDFContentSinkParseMode_Literal),
-      mContextStack(nullptr)
-{
-    if (gRefCnt++ == 0) {
-        NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-        nsresult rv = CallGetService(kRDFServiceCID, &gRDFService);
-
-        NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get RDF service");
-        if (NS_SUCCEEDED(rv)) {
-            rv = gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "type"),
-                                          &kRDF_type);
-            rv = gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "instanceOf"),
-                                          &kRDF_instanceOf);
-            rv = gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Alt"),
-                                          &kRDF_Alt);
-            rv = gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Bag"),
-                                          &kRDF_Bag);
-            rv = gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Seq"),
-                                          &kRDF_Seq);
-            rv = gRDFService->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "nextVal"),
-                                          &kRDF_nextVal);
-        }
-
-        NS_DEFINE_CID(kRDFContainerUtilsCID, NS_RDFCONTAINERUTILS_CID);
-        rv = CallGetService(kRDFContainerUtilsCID, &gRDFContainerUtils);
-    }
-}
-
-
-RDFContentSinkImpl::~RDFContentSinkImpl()
-{
-#ifdef DEBUG_REFS
-    --gInstanceCount;
-    fprintf(stdout, "%d - RDF: RDFContentSinkImpl\n", gInstanceCount);
-#endif
-
-    if (mContextStack) {
-        MOZ_LOG(gLog, LogLevel::Warning,
-               ("rdfxml: warning! unclosed tag"));
-
-        // XXX we should never need to do this, but, we'll write the
-        // code all the same. If someone left the content stack dirty,
-        // pop all the elements off the stack and release them.
-        int32_t i = mContextStack->Length();
-        while (0 < i--) {
-            nsIRDFResource* resource = nullptr;
-            RDFContentSinkState state;
-            RDFContentSinkParseMode parseMode;
-            PopContext(resource, state, parseMode);
-
-            // print some fairly useless debugging info
-            // XXX we should save line numbers on the context stack: this'd
-            // be about 1000x more helpful.
-            if (resource && MOZ_LOG_TEST(gLog, LogLevel::Debug)) {
-                nsCString uri;
-                resource->GetValue(getter_Copies(uri));
-                MOZ_LOG(gLog, LogLevel::Debug,
-                       ("rdfxml:   uri=%s", uri.get()));
-            }
-
-            NS_IF_RELEASE(resource);
-        }
-
-        delete mContextStack;
-    }
-    free(mText);
-
-
-    if (--gRefCnt == 0) {
-        NS_IF_RELEASE(gRDFService);
-        NS_IF_RELEASE(gRDFContainerUtils);
-        NS_IF_RELEASE(kRDF_type);
-        NS_IF_RELEASE(kRDF_instanceOf);
-        NS_IF_RELEASE(kRDF_Alt);
-        NS_IF_RELEASE(kRDF_Bag);
-        NS_IF_RELEASE(kRDF_Seq);
-        NS_IF_RELEASE(kRDF_nextVal);
-    }
-}
-
-////////////////////////////////////////////////////////////////////////
-// nsISupports interface
-
-NS_IMPL_ADDREF(RDFContentSinkImpl)
-NS_IMPL_RELEASE(RDFContentSinkImpl)
-
-NS_IMETHODIMP
-RDFContentSinkImpl::QueryInterface(REFNSIID iid, void** result)
-{
-    NS_PRECONDITION(result, "null ptr");
-    if (! result)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_DEFINE_IID(kIContentSinkIID,    NS_ICONTENT_SINK_IID);
-    NS_DEFINE_IID(kIExpatSinkIID,      NS_IEXPATSINK_IID);
-    NS_DEFINE_IID(kISupportsIID,       NS_ISUPPORTS_IID);
-    NS_DEFINE_IID(kIXMLContentSinkIID, NS_IXMLCONTENT_SINK_IID);
-    NS_DEFINE_IID(kIRDFContentSinkIID, NS_IRDFCONTENTSINK_IID);
-
-    *result = nullptr;
-    if (iid.Equals(kIRDFContentSinkIID) ||
-        iid.Equals(kIXMLContentSinkIID) ||
-        iid.Equals(kIContentSinkIID) ||
-        iid.Equals(kISupportsIID)) {
-        *result = static_cast<nsIXMLContentSink*>(this);
-        AddRef();
-        return NS_OK;
-    }
-    else if (iid.Equals(kIExpatSinkIID)) {
-      *result = static_cast<nsIExpatSink*>(this);
-       AddRef();
-       return NS_OK;
-    }
-    return NS_NOINTERFACE;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::HandleStartElement(const char16_t *aName,
-                                       const char16_t **aAtts,
-                                       uint32_t aAttsCount,
-                                       uint32_t aLineNumber)
-{
-  FlushText();
-
-  nsresult rv = NS_ERROR_UNEXPECTED; // XXX
-
-  RegisterNamespaces(aAtts);
-
-  switch (mState) {
-  case eRDFContentSinkState_InProlog:
-      rv = OpenRDF(aName);
-      break;
-
-  case eRDFContentSinkState_InDocumentElement:
-      rv = OpenObject(aName,aAtts);
-      break;
-
-  case eRDFContentSinkState_InDescriptionElement:
-      rv = OpenProperty(aName,aAtts);
-      break;
-
-  case eRDFContentSinkState_InContainerElement:
-      rv = OpenMember(aName,aAtts);
-      break;
-
-  case eRDFContentSinkState_InPropertyElement:
-  case eRDFContentSinkState_InMemberElement:
-      rv = OpenValue(aName,aAtts);
-      break;
-
-  case eRDFContentSinkState_InEpilog:
-      MOZ_LOG(gLog, LogLevel::Warning,
-             ("rdfxml: unexpected content in epilog at line %d",
-              aLineNumber));
-      break;
-  }
-
-  return rv;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::HandleEndElement(const char16_t *aName)
-{
-  FlushText();
-
-  nsIRDFResource* resource;
-  if (NS_FAILED(PopContext(resource, mState, mParseMode))) {
-      // XXX parser didn't catch unmatched tags?
-      if (MOZ_LOG_TEST(gLog, LogLevel::Warning)) {
-          nsAutoString tagStr(aName);
-          char* tagCStr = ToNewCString(tagStr);
-
-          MOZ_LOG(gLog, LogLevel::Warning,
-                 ("rdfxml: extra close tag '%s' at line %d",
-                  tagCStr, 0/*XXX fix me */));
-
-          free(tagCStr);
-      }
-
-      return NS_ERROR_UNEXPECTED; // XXX
-  }
-
-  // If we've just popped a member or property element, _now_ is the
-  // time to add that element to the graph.
-  switch (mState) {
-    case eRDFContentSinkState_InMemberElement:
-      {
-        nsCOMPtr<nsIRDFContainer> container;
-        NS_NewRDFContainer(getter_AddRefs(container));
-        container->Init(mDataSource, GetContextElement(1));
-        container->AppendElement(resource);
-      }
-      break;
-
-    case eRDFContentSinkState_InPropertyElement:
-      {
-        mDataSource->Assert(GetContextElement(1), GetContextElement(0), resource, true);
-      } break;
-    default:
-      break;
-  }
-
-  if (mContextStack->IsEmpty())
-      mState = eRDFContentSinkState_InEpilog;
-
-  NS_IF_RELEASE(resource);
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::HandleComment(const char16_t *aName)
-{
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::HandleCDataSection(const char16_t *aData,
-                                       uint32_t aLength)
-{
-  return aData ?  AddText(aData, aLength) : NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::HandleDoctypeDecl(const nsAString & aSubset,
-                                      const nsAString & aName,
-                                      const nsAString & aSystemId,
-                                      const nsAString & aPublicId,
-                                      nsISupports* aCatalogData)
-{
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::HandleCharacterData(const char16_t *aData,
-                                        uint32_t aLength)
-{
-  return aData ?  AddText(aData, aLength) : NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::HandleProcessingInstruction(const char16_t *aTarget,
-                                                const char16_t *aData)
-{
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::HandleXMLDeclaration(const char16_t *aVersion,
-                                         const char16_t *aEncoding,
-                                         int32_t aStandalone)
-{
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::ReportError(const char16_t* aErrorText,
-                                const char16_t* aSourceText,
-                                nsIScriptError *aError,
-                                bool *_retval)
-{
-  NS_PRECONDITION(aError && aSourceText && aErrorText, "Check arguments!!!");
-
-  // The expat driver should report the error.
-  *_retval = true;
-  return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-// nsIContentSink interface
-
-NS_IMETHODIMP
-RDFContentSinkImpl::WillParse(void)
-{
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContentSinkImpl::WillBuildModel(nsDTDMode)
-{
-    if (mDataSource) {
-        nsCOMPtr<nsIRDFXMLSink> sink = do_QueryInterface(mDataSource);
-        if (sink)
-            return sink->BeginLoad();
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::DidBuildModel(bool aTerminated)
-{
-    if (mDataSource) {
-        nsCOMPtr<nsIRDFXMLSink> sink = do_QueryInterface(mDataSource);
-        if (sink)
-            return sink->EndLoad();
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::WillInterrupt(void)
-{
-    if (mDataSource) {
-        nsCOMPtr<nsIRDFXMLSink> sink = do_QueryInterface(mDataSource);
-        if (sink)
-            return sink->Interrupt();
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::WillResume(void)
-{
-    if (mDataSource) {
-        nsCOMPtr<nsIRDFXMLSink> sink = do_QueryInterface(mDataSource);
-        if (sink)
-            return sink->Resume();
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::SetParser(nsParserBase* aParser)
-{
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-// nsIRDFContentSink interface
-
-NS_IMETHODIMP
-RDFContentSinkImpl::Init(nsIURI* aURL)
-{
-    NS_PRECONDITION(aURL != nullptr, "null ptr");
-    if (! aURL)
-        return NS_ERROR_NULL_POINTER;
-
-    mDocumentURL = aURL;
-    mState = eRDFContentSinkState_InProlog;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFContentSinkImpl::SetDataSource(nsIRDFDataSource* aDataSource)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "SetDataSource null ptr");
-    mDataSource = aDataSource;
-    NS_ASSERTION(mDataSource != nullptr,"Couldn't QI RDF DataSource");
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFContentSinkImpl::GetDataSource(nsIRDFDataSource*& aDataSource)
-{
-    aDataSource = mDataSource;
-    NS_IF_ADDREF(aDataSource);
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-// Text buffering
-
-static bool
-rdf_IsDataInBuffer(char16_t* buffer, int32_t length)
-{
-    for (int32_t i = 0; i < length; ++i) {
-        if (buffer[i] == ' ' ||
-            buffer[i] == '\t' ||
-            buffer[i] == '\n' ||
-            buffer[i] == '\r')
-            continue;
-
-        return true;
-    }
-    return false;
-}
-
-void
-RDFContentSinkImpl::ParseText(nsIRDFNode **aResult)
-{
-    // XXXwaterson wasteful, but we'd need to make a copy anyway to be
-    // able to call nsIRDFService::Get[Resource|Literal|...]().
-    nsAutoString value;
-    value.Append(mText, mTextLength);
-    value.Trim(" \t\n\r");
-
-    switch (mParseMode) {
-    case eRDFContentSinkParseMode_Literal:
-        {
-            nsIRDFLiteral *result;
-            gRDFService->GetLiteral(value.get(), &result);
-            *aResult = result;
-        }
-        break;
-
-    case eRDFContentSinkParseMode_Resource:
-        {
-            nsIRDFResource *result;
-            gRDFService->GetUnicodeResource(value, &result);
-            *aResult = result;
-        }
-        break;
-
-    case eRDFContentSinkParseMode_Int:
-        {
-            nsresult err;
-            int32_t i = value.ToInteger(&err);
-            nsIRDFInt *result;
-            gRDFService->GetIntLiteral(i, &result);
-            *aResult = result;
-        }
-        break;
-
-    case eRDFContentSinkParseMode_Date:
-        {
-            PRTime t = rdf_ParseDate(nsDependentCString(NS_LossyConvertUTF16toASCII(value).get(), value.Length()));
-            nsIRDFDate *result;
-            gRDFService->GetDateLiteral(t, &result);
-            *aResult = result;
-        }
-        break;
-
-    default:
-        NS_NOTREACHED("unknown parse type");
-        break;
-    }
-}
-
-nsresult
-RDFContentSinkImpl::FlushText()
-{
-    nsresult rv = NS_OK;
-    if (0 != mTextLength) {
-        if (rdf_IsDataInBuffer(mText, mTextLength)) {
-            // XXX if there's anything but whitespace, then we'll
-            // create a text node.
-
-            switch (mState) {
-            case eRDFContentSinkState_InMemberElement: {
-                nsCOMPtr<nsIRDFNode> node;
-                ParseText(getter_AddRefs(node));
-
-                nsCOMPtr<nsIRDFContainer> container;
-                NS_NewRDFContainer(getter_AddRefs(container));
-                container->Init(mDataSource, GetContextElement(1));
-
-                container->AppendElement(node);
-            } break;
-
-            case eRDFContentSinkState_InPropertyElement: {
-                nsCOMPtr<nsIRDFNode> node;
-                ParseText(getter_AddRefs(node));
-
-                mDataSource->Assert(GetContextElement(1), GetContextElement(0), node, true);
-            } break;
-
-            default:
-                // just ignore it
-                break;
-            }
-        }
-        mTextLength = 0;
-    }
-    return rv;
-}
-
-
-nsresult
-RDFContentSinkImpl::AddText(const char16_t* aText, int32_t aLength)
-{
-    // Create buffer when we first need it
-    if (0 == mTextSize) {
-        mText = (char16_t *) malloc(sizeof(char16_t) * 4096);
-        if (!mText) {
-            return NS_ERROR_OUT_OF_MEMORY;
-        }
-        mTextSize = 4096;
-    }
-
-    // Copy data from string into our buffer; grow the buffer as needed.
-    // It never shrinks, but since the content sink doesn't stick around,
-    // this shouldn't be a bloat issue.
-    int32_t amount = mTextSize - mTextLength;
-    if (amount < aLength) {
-        // Grow the buffer by at least a factor of two to prevent thrashing.
-        // Since realloc() will leave mText intact if the call fails,
-        // don't clobber mText or mTextSize until the new mem is allocated.
-        int32_t newSize = (2 * mTextSize > (mTextSize + aLength)) ?
-                          (2 * mTextSize) : (mTextSize + aLength);
-        char16_t* newText =
-            (char16_t *) realloc(mText, sizeof(char16_t) * newSize);
-        if (!newText)
-            return NS_ERROR_OUT_OF_MEMORY;
-        mTextSize = newSize;
-        mText = newText;
-    }
-    memcpy(&mText[mTextLength], aText, sizeof(char16_t) * aLength);
-    mTextLength += aLength;
-
-    return NS_OK;
-}
-
-bool
-rdf_RequiresAbsoluteURI(const nsString& uri)
-{
-    // cheap shot at figuring out if this requires an absolute url translation
-    return !(StringBeginsWith(uri, NS_LITERAL_STRING("urn:")) ||
-             StringBeginsWith(uri, NS_LITERAL_STRING("chrome:")));
-}
-
-nsresult
-RDFContentSinkImpl::GetIdAboutAttribute(const char16_t** aAttributes,
-                                        nsIRDFResource** aResource,
-                                        bool* aIsAnonymous)
-{
-    // This corresponds to the dirty work of production [6.5]
-    nsresult rv = NS_OK;
-
-    nsAutoString nodeID;
-
-    RefPtr<nsAtom> localName;
-    for (; *aAttributes; aAttributes += 2) {
-        const nsDependentSubstring& nameSpaceURI =
-            SplitExpatName(aAttributes[0], getter_AddRefs(localName));
-
-        // We'll accept either `ID' or `rdf:ID' (ibid with `about' or
-        // `rdf:about') in the spirit of being liberal towards the
-        // input that we receive.
-        if (!nameSpaceURI.IsEmpty() &&
-            !nameSpaceURI.EqualsLiteral(RDF_NAMESPACE_URI)) {
-          continue;
-        }
-
-        // XXX you can't specify both, but we'll just pick up the
-        // first thing that was specified and ignore the other.
-
-        if (localName == nsGkAtoms::about) {
-            if (aIsAnonymous)
-                *aIsAnonymous = false;
-
-            nsAutoString relURI(aAttributes[1]);
-            if (rdf_RequiresAbsoluteURI(relURI)) {
-                nsAutoCString uri;
-                rv = mDocumentURL->Resolve(NS_ConvertUTF16toUTF8(aAttributes[1]), uri);
-                if (NS_FAILED(rv)) return rv;
-
-                return gRDFService->GetResource(uri,
-                                                aResource);
-            }
-            return gRDFService->GetResource(NS_ConvertUTF16toUTF8(aAttributes[1]),
-                                            aResource);
-        }
-        else if (localName == nsGkAtoms::ID) {
-            if (aIsAnonymous)
-                *aIsAnonymous = false;
-            // In the spirit of leniency, we do not bother trying to
-            // enforce that this be a valid "XML Name" (see
-            // http://www.w3.org/TR/REC-xml#NT-Nmtoken), as per
-            // 6.21. If we wanted to, this would be where to do it.
-
-            // Construct an in-line resource whose URI is the
-            // document's URI plus the XML name specified in the ID
-            // attribute.
-            nsAutoCString name;
-            nsAutoCString ref('#');
-            AppendUTF16toUTF8(aAttributes[1], ref);
-
-            rv = mDocumentURL->Resolve(ref, name);
-            if (NS_FAILED(rv)) return rv;
-
-            return gRDFService->GetResource(name, aResource);
-        }
-        else if (localName == nsGkAtoms::nodeID) {
-            nodeID.Assign(aAttributes[1]);
-        }
-        else if (localName == nsGkAtoms::about) {
-            // XXX we don't deal with aboutEach...
-            //MOZ_LOG(gLog, LogLevel::Warning,
-            //       ("rdfxml: ignoring aboutEach at line %d",
-            //        aNode.GetSourceLineNumber()));
-        }
-    }
-
-    // Otherwise, we couldn't find anything, so just gensym one...
-    if (aIsAnonymous)
-        *aIsAnonymous = true;
-
-    // If nodeID is present, check if we already know about it. If we've seen
-    // the nodeID before, use the same resource, otherwise generate a new one.
-    if (!nodeID.IsEmpty()) {
-        mNodeIDMap.Get(nodeID,aResource);
-
-        if (!*aResource) {
-            rv = gRDFService->GetAnonymousResource(aResource);
-            mNodeIDMap.Put(nodeID,*aResource);
-        }
-    }
-    else {
-        rv = gRDFService->GetAnonymousResource(aResource);
-    }
-
-    return rv;
-}
-
-nsresult
-RDFContentSinkImpl::GetResourceAttribute(const char16_t** aAttributes,
-                                         nsIRDFResource** aResource)
-{
-  RefPtr<nsAtom> localName;
-
-  nsAutoString nodeID;
-
-  for (; *aAttributes; aAttributes += 2) {
-      const nsDependentSubstring& nameSpaceURI =
-          SplitExpatName(aAttributes[0], getter_AddRefs(localName));
-
-      // We'll accept `resource' or `rdf:resource', under the spirit
-      // that we should be liberal towards the input that we
-      // receive.
-      if (!nameSpaceURI.IsEmpty() &&
-          !nameSpaceURI.EqualsLiteral(RDF_NAMESPACE_URI)) {
-          continue;
-      }
-
-      // XXX you can't specify both, but we'll just pick up the
-      // first thing that was specified and ignore the other.
-
-      if (localName == nsGkAtoms::resource) {
-          // XXX Take the URI and make it fully qualified by
-          // sticking it into the document's URL. This may not be
-          // appropriate...
-          nsAutoString relURI(aAttributes[1]);
-          if (rdf_RequiresAbsoluteURI(relURI)) {
-              nsresult rv;
-              nsAutoCString uri;
-
-              rv = mDocumentURL->Resolve(NS_ConvertUTF16toUTF8(aAttributes[1]), uri);
-              if (NS_FAILED(rv)) return rv;
-
-              return gRDFService->GetResource(uri, aResource);
-          }
-          return gRDFService->GetResource(NS_ConvertUTF16toUTF8(aAttributes[1]),
-                                          aResource);
-      }
-      else if (localName == nsGkAtoms::nodeID) {
-          nodeID.Assign(aAttributes[1]);
-      }
-  }
-
-  // If nodeID is present, check if we already know about it. If we've seen
-  // the nodeID before, use the same resource, otherwise generate a new one.
-  if (!nodeID.IsEmpty()) {
-      mNodeIDMap.Get(nodeID,aResource);
-
-      if (!*aResource) {
-          nsresult rv;
-          rv = gRDFService->GetAnonymousResource(aResource);
-          if (NS_FAILED(rv)) {
-              return rv;
-          }
-          mNodeIDMap.Put(nodeID,*aResource);
-      }
-      return NS_OK;
-  }
-
-  return NS_ERROR_FAILURE;
-}
-
-nsresult
-RDFContentSinkImpl::AddProperties(const char16_t** aAttributes,
-                                  nsIRDFResource* aSubject,
-                                  int32_t* aCount)
-{
-  if (aCount)
-      *aCount = 0;
-
-  RefPtr<nsAtom> localName;
-  for (; *aAttributes; aAttributes += 2) {
-      const nsDependentSubstring& nameSpaceURI =
-          SplitExpatName(aAttributes[0], getter_AddRefs(localName));
-
-      // skip 'xmlns' directives, these are "meta" information
-      if (nameSpaceURI.EqualsLiteral("http://www.w3.org/2000/xmlns/")) {
-        continue;
-      }
-
-      // skip `about', `ID', `resource', and 'nodeID' attributes (either with or
-      // without the `rdf:' prefix); these are all "special" and
-      // should've been dealt with by the caller.
-      if (localName == nsGkAtoms::about || localName == nsGkAtoms::ID ||
-          localName == nsGkAtoms::resource || localName == nsGkAtoms::nodeID) {
-          if (nameSpaceURI.IsEmpty() ||
-              nameSpaceURI.EqualsLiteral(RDF_NAMESPACE_URI))
-              continue;
-      }
-
-      // Skip `parseType', `RDF:parseType', and `NC:parseType'. This
-      // is meta-information that will be handled in SetParseMode.
-      if (localName == nsGkAtoms::parseType) {
-          if (nameSpaceURI.IsEmpty() ||
-              nameSpaceURI.EqualsLiteral(RDF_NAMESPACE_URI) ||
-              nameSpaceURI.EqualsLiteral(NC_NAMESPACE_URI)) {
-              continue;
-          }
-      }
-
-      NS_ConvertUTF16toUTF8 propertyStr(nameSpaceURI);
-      propertyStr.Append(nsAtomCString(localName));
-
-      // Add the assertion to RDF
-      nsCOMPtr<nsIRDFResource> property;
-      gRDFService->GetResource(propertyStr, getter_AddRefs(property));
-
-      nsCOMPtr<nsIRDFLiteral> target;
-      gRDFService->GetLiteral(aAttributes[1],
-                              getter_AddRefs(target));
-
-      mDataSource->Assert(aSubject, property, target, true);
-  }
-  return NS_OK;
-}
-
-void
-RDFContentSinkImpl::SetParseMode(const char16_t **aAttributes)
-{
-    RefPtr<nsAtom> localName;
-    for (; *aAttributes; aAttributes += 2) {
-        const nsDependentSubstring& nameSpaceURI =
-            SplitExpatName(aAttributes[0], getter_AddRefs(localName));
-
-        if (localName == nsGkAtoms::parseType) {
-            nsDependentString v(aAttributes[1]);
-
-            if (nameSpaceURI.IsEmpty() ||
-                nameSpaceURI.EqualsLiteral(RDF_NAMESPACE_URI)) {
-                if (v.EqualsLiteral("Resource"))
-                    mParseMode = eRDFContentSinkParseMode_Resource;
-
-                break;
-            }
-            else if (nameSpaceURI.EqualsLiteral(NC_NAMESPACE_URI)) {
-                if (v.EqualsLiteral("Date"))
-                    mParseMode = eRDFContentSinkParseMode_Date;
-                else if (v.EqualsLiteral("Integer"))
-                    mParseMode = eRDFContentSinkParseMode_Int;
-
-                break;
-            }
-        }
-    }
-}
-
-////////////////////////////////////////////////////////////////////////
-// RDF-specific routines used to build the model
-
-nsresult
-RDFContentSinkImpl::OpenRDF(const char16_t* aName)
-{
-    // ensure that we're actually reading RDF by making sure that the
-    // opening tag is <rdf:RDF>, where "rdf:" corresponds to whatever
-    // they've declared the standard RDF namespace to be.
-    RefPtr<nsAtom> localName;
-    const nsDependentSubstring& nameSpaceURI =
-        SplitExpatName(aName, getter_AddRefs(localName));
-
-    if (!nameSpaceURI.EqualsLiteral(RDF_NAMESPACE_URI) ||
-        localName != nsGkAtoms::RDF) {
-       // MOZ_LOG(gLog, LogLevel::Info,
-       //        ("rdfxml: expected RDF:RDF at line %d",
-       //         aNode.GetSourceLineNumber()));
-
-        return NS_ERROR_UNEXPECTED;
-    }
-
-    PushContext(nullptr, mState, mParseMode);
-    mState = eRDFContentSinkState_InDocumentElement;
-    return NS_OK;
-}
-
-nsresult
-RDFContentSinkImpl::OpenObject(const char16_t* aName,
-                               const char16_t** aAttributes)
-{
-    // an "object" non-terminal is either a "description", a "typed
-    // node", or a "container", so this change the content sink's
-    // state appropriately.
-    RefPtr<nsAtom> localName;
-    const nsDependentSubstring& nameSpaceURI =
-        SplitExpatName(aName, getter_AddRefs(localName));
-
-    // Figure out the URI of this object, and create an RDF node for it.
-    nsCOMPtr<nsIRDFResource> source;
-    GetIdAboutAttribute(aAttributes, getter_AddRefs(source));
-
-    // If there is no `ID' or `about', then there's not much we can do.
-    if (! source)
-        return NS_ERROR_FAILURE;
-
-    // Push the element onto the context stack
-    PushContext(source, mState, mParseMode);
-
-    // Now figure out what kind of state transition we need to
-    // make. We'll either be going into a mode where we parse a
-    // description or a container.
-    bool isaTypedNode = true;
-
-    if (nameSpaceURI.EqualsLiteral(RDF_NAMESPACE_URI)) {
-        isaTypedNode = false;
-
-        if (localName == nsGkAtoms::Description) {
-            // it's a description
-            mState = eRDFContentSinkState_InDescriptionElement;
-        }
-        else if (localName == nsGkAtoms::Bag) {
-            // it's a bag container
-            InitContainer(kRDF_Bag, source);
-            mState = eRDFContentSinkState_InContainerElement;
-        }
-        else if (localName == nsGkAtoms::Seq) {
-            // it's a seq container
-            InitContainer(kRDF_Seq, source);
-            mState = eRDFContentSinkState_InContainerElement;
-        }
-        else if (localName == nsGkAtoms::Alt) {
-            // it's an alt container
-            InitContainer(kRDF_Alt, source);
-            mState = eRDFContentSinkState_InContainerElement;
-        }
-        else {
-            // heh, that's not *in* the RDF namespace: just treat it
-            // like a typed node
-            isaTypedNode = true;
-        }
-    }
-
-    if (isaTypedNode) {
-        NS_ConvertUTF16toUTF8 typeStr(nameSpaceURI);
-        typeStr.Append(nsAtomCString(localName));
-
-        nsCOMPtr<nsIRDFResource> type;
-        nsresult rv = gRDFService->GetResource(typeStr, getter_AddRefs(type));
-        if (NS_FAILED(rv)) return rv;
-
-        rv = mDataSource->Assert(source, kRDF_type, type, true);
-        if (NS_FAILED(rv)) return rv;
-
-        mState = eRDFContentSinkState_InDescriptionElement;
-    }
-
-    AddProperties(aAttributes, source);
-    return NS_OK;
-}
-
-nsresult
-RDFContentSinkImpl::OpenProperty(const char16_t* aName, const char16_t** aAttributes)
-{
-    nsresult rv;
-
-    // an "object" non-terminal is either a "description", a "typed
-    // node", or a "container", so this change the content sink's
-    // state appropriately.
-    RefPtr<nsAtom> localName;
-    const nsDependentSubstring& nameSpaceURI =
-        SplitExpatName(aName, getter_AddRefs(localName));
-
-    NS_ConvertUTF16toUTF8 propertyStr(nameSpaceURI);
-    propertyStr.Append(nsAtomCString(localName));
-
-    nsCOMPtr<nsIRDFResource> property;
-    rv = gRDFService->GetResource(propertyStr, getter_AddRefs(property));
-    if (NS_FAILED(rv)) return rv;
-
-    // See if they've specified a 'resource' attribute, in which case
-    // they mean *that* to be the object of this property.
-    nsCOMPtr<nsIRDFResource> target;
-    GetResourceAttribute(aAttributes, getter_AddRefs(target));
-
-    bool isAnonymous = false;
-
-    if (! target) {
-        // See if an 'ID' attribute has been specified, in which case
-        // this corresponds to the fourth form of [6.12].
-
-        // XXX strictly speaking, we should reject the RDF/XML as
-        // invalid if they've specified both an 'ID' and a 'resource'
-        // attribute. Bah.
-
-        // XXX strictly speaking, 'about=' isn't allowed here, but
-        // what the hell.
-        GetIdAboutAttribute(aAttributes, getter_AddRefs(target), &isAnonymous);
-    }
-
-    if (target) {
-        // They specified an inline resource for the value of this
-        // property. Create an RDF resource for the inline resource
-        // URI, add the properties to it, and attach the inline
-        // resource to its parent.
-        int32_t count;
-        rv = AddProperties(aAttributes, target, &count);
-        NS_ASSERTION(NS_SUCCEEDED(rv), "problem adding properties");
-        if (NS_FAILED(rv)) return rv;
-
-        if (count || !isAnonymous) {
-            // If the resource was "anonymous" (i.e., they hadn't
-            // explicitly set an ID or resource attribute), then we'll
-            // only assert this property from the context element *if*
-            // there were properties specified on the anonymous
-            // resource.
-            rv = mDataSource->Assert(GetContextElement(0), property, target, true);
-            if (NS_FAILED(rv)) return rv;
-        }
-
-        // XXX Technically, we should _not_ fall through here and push
-        // the element onto the stack: this is supposed to be a closed
-        // node. But right now I'm lazy and the code will just Do The
-        // Right Thing so long as the RDF is well-formed.
-    }
-
-    // Push the element onto the context stack and change state.
-    PushContext(property, mState, mParseMode);
-    mState = eRDFContentSinkState_InPropertyElement;
-    SetParseMode(aAttributes);
-
-    return NS_OK;
-}
-
-nsresult
-RDFContentSinkImpl::OpenMember(const char16_t* aName,
-                               const char16_t** aAttributes)
-{
-    // ensure that we're actually reading a member element by making
-    // sure that the opening tag is <rdf:li>, where "rdf:" corresponds
-    // to whatever they've declared the standard RDF namespace to be.
-    nsresult rv;
-
-    RefPtr<nsAtom> localName;
-    const nsDependentSubstring& nameSpaceURI =
-        SplitExpatName(aName, getter_AddRefs(localName));
-
-    if (!nameSpaceURI.EqualsLiteral(RDF_NAMESPACE_URI) ||
-        localName != nsGkAtoms::li) {
-        MOZ_LOG(gLog, LogLevel::Error,
-               ("rdfxml: expected RDF:li at line %d",
-                -1)); // XXX pass in line number
-
-        return NS_ERROR_UNEXPECTED;
-    }
-
-    // The parent element is the container.
-    nsIRDFResource* container = GetContextElement(0);
-    if (! container)
-        return NS_ERROR_NULL_POINTER;
-
-    nsIRDFResource* resource;
-    if (NS_SUCCEEDED(rv = GetResourceAttribute(aAttributes, &resource))) {
-        // Okay, this node has an RDF:resource="..." attribute. That
-        // means that it's a "referenced item," as covered in [6.29].
-        nsCOMPtr<nsIRDFContainer> c;
-        NS_NewRDFContainer(getter_AddRefs(c));
-        c->Init(mDataSource, container);
-        c->AppendElement(resource);
-
-        // XXX Technically, we should _not_ fall through here and push
-        // the element onto the stack: this is supposed to be a closed
-        // node. But right now I'm lazy and the code will just Do The
-        // Right Thing so long as the RDF is well-formed.
-        NS_RELEASE(resource);
-    }
-
-    // Change state. Pushing a null context element is a bit weird,
-    // but the idea is that there really is _no_ context "property".
-    // The contained element will use nsIRDFContainer::AppendElement() to add
-    // the element to the container, which requires only the container
-    // and the element to be added.
-    PushContext(nullptr, mState, mParseMode);
-    mState = eRDFContentSinkState_InMemberElement;
-    SetParseMode(aAttributes);
-
-    return NS_OK;
-}
-
-
-nsresult
-RDFContentSinkImpl::OpenValue(const char16_t* aName, const char16_t** aAttributes)
-{
-    // a "value" can either be an object or a string: we'll only get
-    // *here* if it's an object, as raw text is added as a leaf.
-    return OpenObject(aName,aAttributes);
-}
-
-////////////////////////////////////////////////////////////////////////
-// namespace resolution
-void
-RDFContentSinkImpl::RegisterNamespaces(const char16_t **aAttributes)
-{
-    nsCOMPtr<nsIRDFXMLSink> sink = do_QueryInterface(mDataSource);
-    if (!sink) {
-        return;
-    }
-    NS_NAMED_LITERAL_STRING(xmlns, "http://www.w3.org/2000/xmlns/");
-    for (; *aAttributes; aAttributes += 2) {
-        // check the namespace
-        const char16_t* attr = aAttributes[0];
-        const char16_t* xmlnsP = xmlns.BeginReading();
-        while (*attr ==  *xmlnsP) {
-            ++attr;
-            ++xmlnsP;
-        }
-        if (*attr != 0xFFFF ||
-            xmlnsP != xmlns.EndReading()) {
-            continue;
-        }
-        // get the localname (or "xmlns" for the default namespace)
-        const char16_t* endLocal = ++attr;
-        while (*endLocal && *endLocal != 0xFFFF) {
-            ++endLocal;
-        }
-        nsDependentSubstring lname(attr, endLocal);
-        RefPtr<nsAtom> preferred = NS_Atomize(lname);
-        if (preferred == nsGkAtoms::xmlns) {
-            preferred = nullptr;
-        }
-        sink->AddNameSpace(preferred, nsDependentString(aAttributes[1]));
-    }
-}
-
-////////////////////////////////////////////////////////////////////////
-// Qualified name resolution
-
-const nsDependentSubstring
-RDFContentSinkImpl::SplitExpatName(const char16_t *aExpatName,
-                                   nsAtom **aLocalName)
-{
-    /**
-     *  Expat can send the following:
-     *    localName
-     *    namespaceURI<separator>localName
-     *    namespaceURI<separator>localName<separator>prefix
-     *
-     *  and we use 0xFFFF for the <separator>.
-     *
-     */
-
-    const char16_t *uriEnd = aExpatName;
-    const char16_t *nameStart = aExpatName;
-    const char16_t *pos;
-    for (pos = aExpatName; *pos; ++pos) {
-        if (*pos == 0xFFFF) {
-            if (uriEnd != aExpatName) {
-                break;
-            }
-
-            uriEnd = pos;
-            nameStart = pos + 1;
-        }
-    }
-
-    const nsDependentSubstring& nameSpaceURI = Substring(aExpatName, uriEnd);
-    *aLocalName = NS_Atomize(Substring(nameStart, pos)).take();
-    return nameSpaceURI;
-}
-
-nsresult
-RDFContentSinkImpl::InitContainer(nsIRDFResource* aContainerType, nsIRDFResource* aContainer)
-{
-    // Do the right kind of initialization based on the container
-    // 'type' resource, and the state of the container (i.e., 'make' a
-    // new container vs. 'reinitialize' the container).
-    nsresult rv;
-
-    static const ContainerInfo gContainerInfo[] = {
-        { &RDFContentSinkImpl::kRDF_Alt, &nsIRDFContainerUtils::IsAlt, &nsIRDFContainerUtils::MakeAlt },
-        { &RDFContentSinkImpl::kRDF_Bag, &nsIRDFContainerUtils::IsBag, &nsIRDFContainerUtils::MakeBag },
-        { &RDFContentSinkImpl::kRDF_Seq, &nsIRDFContainerUtils::IsSeq, &nsIRDFContainerUtils::MakeSeq },
-        { 0, 0, 0 },
-    };
-
-    for (const ContainerInfo* info = gContainerInfo; info->mType != 0; ++info) {
-        if (*info->mType != aContainerType)
-            continue;
-
-        bool isContainer;
-        rv = (gRDFContainerUtils->*(info->mTestFn))(mDataSource, aContainer, &isContainer);
-        if (isContainer) {
-            rv = ReinitContainer(aContainerType, aContainer);
-        }
-        else {
-            rv = (gRDFContainerUtils->*(info->mMakeFn))(mDataSource, aContainer, nullptr);
-        }
-        return rv;
-    }
-
-    NS_NOTREACHED("not an RDF container type");
-    return NS_ERROR_FAILURE;
-}
-
-
-
-nsresult
-RDFContentSinkImpl::ReinitContainer(nsIRDFResource* aContainerType, nsIRDFResource* aContainer)
-{
-    // Mega-kludge to deal with the fact that Make[Seq|Alt|Bag] is
-    // idempotent, and as such, containers will have state (e.g.,
-    // RDF:nextVal) maintained in the graph across loads. This
-    // re-initializes each container's RDF:nextVal to '1', and 'marks'
-    // the container as such.
-    nsresult rv;
-
-    nsCOMPtr<nsIRDFLiteral> one;
-    rv = gRDFService->GetLiteral(u"1", getter_AddRefs(one));
-    if (NS_FAILED(rv)) return rv;
-
-    // Re-initialize the 'nextval' property
-    nsCOMPtr<nsIRDFNode> nextval;
-    rv = mDataSource->GetTarget(aContainer, kRDF_nextVal, true, getter_AddRefs(nextval));
-    if (NS_FAILED(rv)) return rv;
-
-    rv = mDataSource->Change(aContainer, kRDF_nextVal, nextval, one);
-    if (NS_FAILED(rv)) return rv;
-
-    // Re-mark as a container. XXX should be kRDF_type
-    rv = mDataSource->Assert(aContainer, kRDF_instanceOf, aContainerType, true);
-    NS_ASSERTION(NS_SUCCEEDED(rv), "unable to mark container as such");
-    if (NS_FAILED(rv)) return rv;
-
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-// Content stack management
-
-nsIRDFResource*
-RDFContentSinkImpl::GetContextElement(int32_t ancestor /* = 0 */)
-{
-    if ((nullptr == mContextStack) ||
-        (uint32_t(ancestor) >= mContextStack->Length())) {
-        return nullptr;
-    }
-
-    return mContextStack->ElementAt(
-           mContextStack->Length()-ancestor-1).mResource;
-}
-
-int32_t
-RDFContentSinkImpl::PushContext(nsIRDFResource         *aResource,
-                                RDFContentSinkState     aState,
-                                RDFContentSinkParseMode aParseMode)
-{
-    if (! mContextStack) {
-        mContextStack = new AutoTArray<RDFContextStackElement, 8>();
-        if (! mContextStack)
-            return 0;
-    }
-
-    RDFContextStackElement* e = mContextStack->AppendElement();
-    if (! e)
-        return mContextStack->Length();
-
-    e->mResource  = aResource;
-    e->mState     = aState;
-    e->mParseMode = aParseMode;
-
-    return mContextStack->Length();
-}
-
-nsresult
-RDFContentSinkImpl::PopContext(nsIRDFResource         *&aResource,
-                               RDFContentSinkState     &aState,
-                               RDFContentSinkParseMode &aParseMode)
-{
-    if ((nullptr == mContextStack) ||
-        (mContextStack->IsEmpty())) {
-        return NS_ERROR_NULL_POINTER;
-    }
-
-    uint32_t i = mContextStack->Length() - 1;
-    RDFContextStackElement &e = mContextStack->ElementAt(i);
-
-    aResource  = e.mResource;
-    NS_IF_ADDREF(aResource);
-    aState     = e.mState;
-    aParseMode = e.mParseMode;
-
-    mContextStack->RemoveElementAt(i);
-    return NS_OK;
-}
-
-
-////////////////////////////////////////////////////////////////////////
-
-nsresult
-NS_NewRDFContentSink(nsIRDFContentSink** aResult)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    RDFContentSinkImpl* sink = new RDFContentSinkImpl();
-    if (! sink)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(sink);
-    *aResult = sink;
-    return NS_OK;
-}
deleted file mode 100644
--- a/rdf/base/nsRDFResource.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsRDFResource.h"
-#include "nsIServiceManager.h"
-#include "nsIRDFDelegateFactory.h"
-#include "nsIRDFService.h"
-#include "nsRDFCID.h"
-#include "mozilla/Logging.h"
-#include "nsComponentManagerUtils.h"
-#include "nsServiceManagerUtils.h"
-
-static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-
-nsIRDFService* nsRDFResource::gRDFService = nullptr;
-nsrefcnt nsRDFResource::gRDFServiceRefCnt = 0;
-
-////////////////////////////////////////////////////////////////////////////////
-
-nsRDFResource::nsRDFResource(void)
-    : mDelegates(nullptr)
-{
-}
-
-nsRDFResource::~nsRDFResource(void)
-{
-    // Release all of the delegate objects
-    while (mDelegates) {
-        DelegateEntry* doomed = mDelegates;
-        mDelegates = mDelegates->mNext;
-        delete doomed;
-    }
-
-    if (!gRDFService)
-        return;
-
-    gRDFService->UnregisterResource(this);
-
-    if (--gRDFServiceRefCnt == 0)
-        NS_RELEASE(gRDFService);
-}
-
-NS_IMPL_ISUPPORTS(nsRDFResource, nsIRDFResource, nsIRDFNode)
-
-////////////////////////////////////////////////////////////////////////////////
-// nsIRDFNode methods:
-
-NS_IMETHODIMP
-nsRDFResource::EqualsNode(nsIRDFNode* aNode, bool* aResult)
-{
-    NS_PRECONDITION(aNode != nullptr, "null ptr");
-    if (! aNode)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-    nsIRDFResource* resource;
-    rv = aNode->QueryInterface(NS_GET_IID(nsIRDFResource), (void**)&resource);
-    if (NS_SUCCEEDED(rv)) {
-        *aResult = (static_cast<nsIRDFResource*>(this) == resource);
-        NS_RELEASE(resource);
-        return NS_OK;
-    }
-    if (rv == NS_NOINTERFACE) {
-        *aResult = false;
-        return NS_OK;
-    }
-
-    return rv;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// nsIRDFResource methods:
-
-NS_IMETHODIMP
-nsRDFResource::Init(const char* aURI)
-{
-    NS_PRECONDITION(aURI != nullptr, "null ptr");
-    if (! aURI)
-        return NS_ERROR_NULL_POINTER;
-
-    mURI = aURI;
-
-    if (gRDFServiceRefCnt++ == 0) {
-        nsresult rv = CallGetService(kRDFServiceCID, &gRDFService);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    // don't replace an existing resource with the same URI automatically
-    return gRDFService->RegisterResource(this, true);
-}
-
-NS_IMETHODIMP
-nsRDFResource::GetValue(char* *aURI)
-{
-    NS_ASSERTION(aURI, "Null out param.");
-
-    *aURI = ToNewCString(mURI);
-
-    if (!*aURI)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsRDFResource::GetValueUTF8(nsACString& aResult)
-{
-    aResult = mURI;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsRDFResource::GetValueConst(const char** aURI)
-{
-    *aURI = mURI.get();
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsRDFResource::EqualsString(const char* aURI, bool* aResult)
-{
-    NS_PRECONDITION(aURI != nullptr, "null ptr");
-    if (! aURI)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aResult, "null ptr");
-
-    *aResult = mURI.Equals(aURI);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsRDFResource::GetDelegate(const char* aKey, REFNSIID aIID, void** aResult)
-{
-    NS_PRECONDITION(aKey != nullptr, "null ptr");
-    if (! aKey)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-    *aResult = nullptr;
-
-    DelegateEntry* entry = mDelegates;
-    while (entry) {
-        if (entry->mKey.Equals(aKey)) {
-            rv = entry->mDelegate->QueryInterface(aIID, aResult);
-            return rv;
-        }
-
-        entry = entry->mNext;
-    }
-
-    // Construct a ContractID of the form "@mozilla.org/rdf/delegate/[key]/[scheme];1
-    nsAutoCString contractID(NS_RDF_DELEGATEFACTORY_CONTRACTID_PREFIX);
-    contractID.Append(aKey);
-    contractID.AppendLiteral("&scheme=");
-
-    int32_t i = mURI.FindChar(':');
-    contractID += StringHead(mURI, i);
-
-    nsCOMPtr<nsIRDFDelegateFactory> delegateFactory =
-             do_CreateInstance(contractID.get(), &rv);
-    if (NS_FAILED(rv)) return rv;
-
-    rv = delegateFactory->CreateDelegate(this, aKey, aIID, aResult);
-    if (NS_FAILED(rv)) return rv;
-
-    // Okay, we've successfully created a delegate. Let's remember it.
-    entry = new DelegateEntry;
-    if (! entry) {
-        NS_RELEASE(*reinterpret_cast<nsISupports**>(aResult));
-        return NS_ERROR_OUT_OF_MEMORY;
-    }
-
-    entry->mKey      = aKey;
-    entry->mDelegate = do_QueryInterface(*reinterpret_cast<nsISupports**>(aResult), &rv);
-    if (NS_FAILED(rv)) {
-        NS_ERROR("nsRDFResource::GetDelegate(): can't QI to nsISupports!");
-
-        delete entry;
-        NS_RELEASE(*reinterpret_cast<nsISupports**>(aResult));
-        return NS_ERROR_FAILURE;
-    }
-
-    entry->mNext     = mDelegates;
-
-    mDelegates = entry;
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsRDFResource::ReleaseDelegate(const char* aKey)
-{
-    NS_PRECONDITION(aKey != nullptr, "null ptr");
-    if (! aKey)
-        return NS_ERROR_NULL_POINTER;
-
-    DelegateEntry* entry = mDelegates;
-    DelegateEntry** link = &mDelegates;
-
-    while (entry) {
-        if (entry->mKey.Equals(aKey)) {
-            *link = entry->mNext;
-            delete entry;
-            return NS_OK;
-        }
-
-        link = &(entry->mNext);
-        entry = entry->mNext;
-    }
-
-    NS_WARNING("nsRDFResource::ReleaseDelegate() no delegate found");
-    return NS_OK;
-}
-
-
-
-////////////////////////////////////////////////////////////////////////////////
deleted file mode 100644
--- a/rdf/base/nsRDFResource.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFResource_h__
-#define nsRDFResource_h__
-
-#include "nsCOMPtr.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFResource.h"
-#include "nscore.h"
-#include "nsString.h"
-#include "rdf.h"
-
-class nsIRDFService;
-
-/**
- * This simple base class implements nsIRDFResource, and can be used as a
- * superclass for more sophisticated resource implementations.
- */
-class nsRDFResource : public nsIRDFResource {
-public:
-
-    NS_DECL_THREADSAFE_ISUPPORTS
-
-    // nsIRDFNode methods:
-    NS_IMETHOD EqualsNode(nsIRDFNode* aNode, bool* aResult) override;
-
-    // nsIRDFResource methods:
-    NS_IMETHOD Init(const char* aURI) override;
-    NS_IMETHOD GetValue(char* *aURI) override;
-    NS_IMETHOD GetValueUTF8(nsACString& aResult) override;
-    NS_IMETHOD GetValueConst(const char** aURI) override;
-    NS_IMETHOD EqualsString(const char* aURI, bool* aResult) override;
-    NS_IMETHOD GetDelegate(const char* aKey, REFNSIID aIID, void** aResult) override;
-    NS_IMETHOD ReleaseDelegate(const char* aKey) override;
-
-    // nsRDFResource methods:
-    nsRDFResource(void);
-
-protected:
-    virtual ~nsRDFResource(void);
-    static nsIRDFService* gRDFService;
-    static nsrefcnt gRDFServiceRefCnt;
-
-protected:
-    nsCString mURI;
-
-    struct DelegateEntry {
-        nsCString             mKey;
-        nsCOMPtr<nsISupports> mDelegate;
-        DelegateEntry*        mNext;
-    };
-
-    DelegateEntry* mDelegates;
-};
-
-#endif // nsRDFResource_h__
deleted file mode 100644
--- a/rdf/base/nsRDFService.cpp
+++ /dev/null
@@ -1,1540 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.  */
-
-/*
-
-  This file provides the implementation for the RDF service manager.
-
-  TO DO
-  -----
-
-  1) Implement the CreateDataBase() methods.
-
-  2) Cache date and int literals.
-
- */
-
-#include "nsRDFService.h"
-#include "nsCOMPtr.h"
-#include "nsAutoPtr.h"
-#include "nsMemory.h"
-#include "nsAtom.h"
-#include "nsIComponentManager.h"
-#include "nsIRDFDataSource.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFRemoteDataSource.h"
-#include "nsIServiceManager.h"
-#include "nsIFactory.h"
-#include "nsRDFCID.h"
-#include "nsString.h"
-#include "nsNetUtil.h"
-#include "nsIURI.h"
-#include "PLDHashTable.h"
-#include "plhash.h"
-#include "plstr.h"
-#include "mozilla/Logging.h"
-#include "prprf.h"
-#include "rdf.h"
-#include "nsCRT.h"
-#include "nsCRTGlue.h"
-#include "mozilla/HashFunctions.h"
-#include "mozilla/IntegerPrintfMacros.h"
-
-using namespace mozilla;
-
-////////////////////////////////////////////////////////////////////////
-
-static NS_DEFINE_CID(kRDFXMLDataSourceCID,    NS_RDFXMLDATASOURCE_CID);
-static NS_DEFINE_CID(kRDFDefaultResourceCID,  NS_RDFDEFAULTRESOURCE_CID);
-
-static NS_DEFINE_IID(kIRDFLiteralIID,         NS_IRDFLITERAL_IID);
-static NS_DEFINE_IID(kIRDFDateIID,         NS_IRDFDATE_IID);
-static NS_DEFINE_IID(kIRDFIntIID,         NS_IRDFINT_IID);
-static NS_DEFINE_IID(kIRDFNodeIID,            NS_IRDFNODE_IID);
-static NS_DEFINE_IID(kISupportsIID,           NS_ISUPPORTS_IID);
-
-static LazyLogModule gLog("nsRDFService");
-
-class BlobImpl;
-
-// These functions are copied from nsprpub/lib/ds/plhash.c, with one
-// change to free the key in DataSourceFreeEntry.
-// XXX sigh, why were DefaultAllocTable et. al. declared static, anyway?
-
-static void *
-DataSourceAllocTable(void *pool, size_t size)
-{
-    return malloc(size);
-}
-
-static void
-DataSourceFreeTable(void *pool, void *item)
-{
-    free(item);
-}
-
-static PLHashEntry *
-DataSourceAllocEntry(void *pool, const void *key)
-{
-    return (PLHashEntry*) malloc(sizeof(PLHashEntry));
-}
-
-static void
-DataSourceFreeEntry(void *pool, PLHashEntry *he, unsigned flag)
-{
-    if (flag == HT_FREE_ENTRY) {
-        PL_strfree((char*) he->key);
-        free(he);
-    }
-}
-
-static PLHashAllocOps dataSourceHashAllocOps = {
-    DataSourceAllocTable, DataSourceFreeTable,
-    DataSourceAllocEntry, DataSourceFreeEntry
-};
-
-//----------------------------------------------------------------------
-//
-// For the mResources hashtable.
-//
-
-struct ResourceHashEntry : public PLDHashEntryHdr {
-    const char *mKey;
-    nsIRDFResource *mResource;
-
-    static PLDHashNumber
-    HashKey(const void *key)
-    {
-        return HashString(static_cast<const char *>(key));
-    }
-
-    static bool
-    MatchEntry(const PLDHashEntryHdr *hdr, const void *key)
-    {
-        const ResourceHashEntry *entry =
-            static_cast<const ResourceHashEntry *>(hdr);
-
-        return 0 == nsCRT::strcmp(static_cast<const char *>(key),
-                                  entry->mKey);
-    }
-};
-
-static const PLDHashTableOps gResourceTableOps = {
-    ResourceHashEntry::HashKey,
-    ResourceHashEntry::MatchEntry,
-    PLDHashTable::MoveEntryStub,
-    PLDHashTable::ClearEntryStub,
-    nullptr
-};
-
-// ----------------------------------------------------------------------
-//
-// For the mLiterals hashtable.
-//
-
-struct LiteralHashEntry : public PLDHashEntryHdr {
-    nsIRDFLiteral *mLiteral;
-    const char16_t *mKey;
-
-    static PLDHashNumber
-    HashKey(const void *key)
-    {
-        return HashString(static_cast<const char16_t *>(key));
-    }
-
-    static bool
-    MatchEntry(const PLDHashEntryHdr *hdr, const void *key)
-    {
-        const LiteralHashEntry *entry =
-            static_cast<const LiteralHashEntry *>(hdr);
-
-        return 0 == nsCRT::strcmp(static_cast<const char16_t *>(key),
-                                  entry->mKey);
-    }
-};
-
-static const PLDHashTableOps gLiteralTableOps = {
-    LiteralHashEntry::HashKey,
-    LiteralHashEntry::MatchEntry,
-    PLDHashTable::MoveEntryStub,
-    PLDHashTable::ClearEntryStub,
-    nullptr
-};
-
-// ----------------------------------------------------------------------
-//
-// For the mInts hashtable.
-//
-
-struct IntHashEntry : public PLDHashEntryHdr {
-    nsIRDFInt *mInt;
-    int32_t    mKey;
-
-    static PLDHashNumber
-    HashKey(const void *key)
-    {
-        return PLDHashNumber(*static_cast<const int32_t *>(key));
-    }
-
-    static bool
-    MatchEntry(const PLDHashEntryHdr *hdr, const void *key)
-    {
-        const IntHashEntry *entry =
-            static_cast<const IntHashEntry *>(hdr);
-
-        return *static_cast<const int32_t *>(key) == entry->mKey;
-    }
-};
-
-static const PLDHashTableOps gIntTableOps = {
-    IntHashEntry::HashKey,
-    IntHashEntry::MatchEntry,
-    PLDHashTable::MoveEntryStub,
-    PLDHashTable::ClearEntryStub,
-    nullptr
-};
-
-// ----------------------------------------------------------------------
-//
-// For the mDates hashtable.
-//
-
-struct DateHashEntry : public PLDHashEntryHdr {
-    nsIRDFDate *mDate;
-    PRTime      mKey;
-
-    static PLDHashNumber
-    HashKey(const void *key)
-    {
-        // xor the low 32 bits with the high 32 bits.
-        PRTime t = *static_cast<const PRTime *>(key);
-        int32_t h32 = int32_t(t >> 32);
-        int32_t l32 = int32_t(0xffffffff & t);
-        return PLDHashNumber(l32 ^ h32);
-    }
-
-    static bool
-    MatchEntry(const PLDHashEntryHdr *hdr, const void *key)
-    {
-        const DateHashEntry *entry =
-            static_cast<const DateHashEntry *>(hdr);
-
-        return *static_cast<const PRTime *>(key) == entry->mKey;
-    }
-};
-
-static const PLDHashTableOps gDateTableOps = {
-    DateHashEntry::HashKey,
-    DateHashEntry::MatchEntry,
-    PLDHashTable::MoveEntryStub,
-    PLDHashTable::ClearEntryStub,
-    nullptr
-};
-
-class BlobImpl : public nsIRDFBlob
-{
-public:
-    struct Data {
-        int32_t  mLength;
-        uint8_t *mBytes;
-    };
-
-    BlobImpl(const uint8_t *aBytes, int32_t aLength)
-    {
-        mData.mLength = aLength;
-        mData.mBytes = new uint8_t[aLength];
-        memcpy(mData.mBytes, aBytes, aLength);
-        NS_ADDREF(RDFServiceImpl::gRDFService);
-        RDFServiceImpl::gRDFService->RegisterBlob(this);
-    }
-
-protected:
-    virtual ~BlobImpl()
-    {
-        RDFServiceImpl::gRDFService->UnregisterBlob(this);
-        // Use NS_RELEASE2() here, because we want to decrease the
-        // refcount, but not null out the gRDFService pointer (which is
-        // what a vanilla NS_RELEASE() would do).
-        nsrefcnt refcnt;
-        NS_RELEASE2(RDFServiceImpl::gRDFService, refcnt);
-        delete[] mData.mBytes;
-    }
-
-public:
-    NS_DECL_ISUPPORTS
-    NS_DECL_NSIRDFNODE
-    NS_DECL_NSIRDFBLOB
-
-    Data mData;
-};
-
-NS_IMPL_ISUPPORTS(BlobImpl, nsIRDFNode, nsIRDFBlob)
-
-NS_IMETHODIMP
-BlobImpl::EqualsNode(nsIRDFNode *aNode, bool *aEquals)
-{
-    nsCOMPtr<nsIRDFBlob> blob = do_QueryInterface(aNode);
-    if (blob) {
-        int32_t length;
-        blob->GetLength(&length);
-
-        if (length == mData.mLength) {
-            const uint8_t *bytes;
-            blob->GetValue(&bytes);
-
-            if (0 == memcmp(bytes, mData.mBytes, length)) {
-                *aEquals = true;
-                return NS_OK;
-            }
-        }
-    }
-
-    *aEquals = false;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-BlobImpl::GetValue(const uint8_t **aResult)
-{
-    *aResult = mData.mBytes;
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-BlobImpl::GetLength(int32_t *aResult)
-{
-    *aResult = mData.mLength;
-    return NS_OK;
-}
-
-// ----------------------------------------------------------------------
-//
-// For the mBlobs hashtable.
-//
-
-struct BlobHashEntry : public PLDHashEntryHdr {
-    BlobImpl *mBlob;
-
-    static PLDHashNumber
-    HashKey(const void *key)
-    {
-        const BlobImpl::Data *data =
-            static_cast<const BlobImpl::Data *>(key);
-        return HashBytes(data->mBytes, data->mLength);
-    }
-
-    static bool
-    MatchEntry(const PLDHashEntryHdr *hdr, const void *key)
-    {
-        const BlobHashEntry *entry =
-            static_cast<const BlobHashEntry *>(hdr);
-
-        const BlobImpl::Data *left = &entry->mBlob->mData;
-
-        const BlobImpl::Data *right =
-            static_cast<const BlobImpl::Data *>(key);
-
-        return (left->mLength == right->mLength)
-            && 0 == memcmp(left->mBytes, right->mBytes, right->mLength);
-    }
-};
-
-static const PLDHashTableOps gBlobTableOps = {
-    BlobHashEntry::HashKey,
-    BlobHashEntry::MatchEntry,
-    PLDHashTable::MoveEntryStub,
-    PLDHashTable::ClearEntryStub,
-    nullptr
-};
-
-////////////////////////////////////////////////////////////////////////
-// LiteralImpl
-//
-//   Currently, all literals are implemented exactly the same way;
-//   i.e., there is are no resource factories to allow you to generate
-//   customer resources. I doubt that makes sense, anyway.
-//
-class LiteralImpl : public nsIRDFLiteral {
-public:
-    static nsresult
-    Create(const char16_t* aValue, nsIRDFLiteral** aResult);
-
-    // nsISupports
-    NS_DECL_THREADSAFE_ISUPPORTS
-
-    // nsIRDFNode
-    NS_DECL_NSIRDFNODE
-
-    // nsIRDFLiteral
-    NS_DECL_NSIRDFLITERAL
-
-protected:
-    explicit LiteralImpl(const char16_t* s);
-    virtual ~LiteralImpl();
-
-    const char16_t* GetValue() const {
-        size_t objectSize = ((sizeof(LiteralImpl) + sizeof(char16_t) - 1) / sizeof(char16_t)) * sizeof(char16_t);
-        return reinterpret_cast<const char16_t*>(reinterpret_cast<const unsigned char*>(this) + objectSize);
-    }
-};
-
-
-nsresult
-LiteralImpl::Create(const char16_t* aValue, nsIRDFLiteral** aResult)
-{
-    // Goofy math to get alignment right. Copied from nsSharedString.h.
-    size_t objectSize = ((sizeof(LiteralImpl) + sizeof(char16_t) - 1) / sizeof(char16_t)) * sizeof(char16_t);
-    size_t stringLen = nsCharTraits<char16_t>::length(aValue);
-    size_t stringSize = (stringLen + 1) * sizeof(char16_t);
-
-    void* objectPtr = operator new(objectSize + stringSize);
-    if (! objectPtr)
-        return NS_ERROR_NULL_POINTER;
-
-    char16_t* buf = reinterpret_cast<char16_t*>(static_cast<unsigned char*>(objectPtr) + objectSize);
-    nsCharTraits<char16_t>::copy(buf, aValue, stringLen + 1);
-
-    NS_ADDREF(*aResult = new (objectPtr) LiteralImpl(buf));
-    return NS_OK;
-}
-
-
-LiteralImpl::LiteralImpl(const char16_t* s)
-{
-    RDFServiceImpl::gRDFService->RegisterLiteral(this);
-    NS_ADDREF(RDFServiceImpl::gRDFService);
-}
-
-LiteralImpl::~LiteralImpl()
-{
-    RDFServiceImpl::gRDFService->UnregisterLiteral(this);
-
-    // Use NS_RELEASE2() here, because we want to decrease the
-    // refcount, but not null out the gRDFService pointer (which is
-    // what a vanilla NS_RELEASE() would do).
-    nsrefcnt refcnt;
-    NS_RELEASE2(RDFServiceImpl::gRDFService, refcnt);
-}
-
-NS_IMPL_ADDREF(LiteralImpl)
-NS_IMPL_RELEASE(LiteralImpl)
-
-nsresult
-LiteralImpl::QueryInterface(REFNSIID iid, void** result)
-{
-    if (! result)
-        return NS_ERROR_NULL_POINTER;
-
-    *result = nullptr;
-    if (iid.Equals(kIRDFLiteralIID) ||
-        iid.Equals(kIRDFNodeIID) ||
-        iid.Equals(kISupportsIID)) {
-        *result = static_cast<nsIRDFLiteral*>(this);
-        AddRef();
-        return NS_OK;
-    }
-    return NS_NOINTERFACE;
-}
-
-NS_IMETHODIMP
-LiteralImpl::EqualsNode(nsIRDFNode* aNode, bool* aResult)
-{
-    nsresult rv;
-    nsIRDFLiteral* literal;
-    rv = aNode->QueryInterface(kIRDFLiteralIID, (void**) &literal);
-    if (NS_SUCCEEDED(rv)) {
-        *aResult = (static_cast<nsIRDFLiteral*>(this) == literal);
-        NS_RELEASE(literal);
-        return NS_OK;
-    }
-    else if (rv == NS_NOINTERFACE) {
-        *aResult = false;
-        return NS_OK;
-    }
-    else {
-        return rv;
-    }
-}
-
-NS_IMETHODIMP
-LiteralImpl::GetValue(char16_t* *value)
-{
-    NS_ASSERTION(value, "null ptr");
-    if (! value)
-        return NS_ERROR_NULL_POINTER;
-
-    const char16_t *temp = GetValue();
-    *value = temp? NS_strdup(temp) : 0;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-LiteralImpl::GetValueConst(const char16_t** aValue)
-{
-    *aValue = GetValue();
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-// DateImpl
-//
-
-class DateImpl : public nsIRDFDate {
-public:
-    explicit DateImpl(const PRTime s);
-
-    // nsISupports
-    NS_DECL_ISUPPORTS
-
-    // nsIRDFNode
-    NS_DECL_NSIRDFNODE
-
-    // nsIRDFDate
-    NS_IMETHOD GetValue(PRTime *value) override;
-
-private:
-    virtual ~DateImpl();
-
-    nsresult EqualsDate(nsIRDFDate* date, bool* result);
-    PRTime mValue;
-};
-
-
-DateImpl::DateImpl(const PRTime s)
-    : mValue(s)
-{
-    RDFServiceImpl::gRDFService->RegisterDate(this);
-    NS_ADDREF(RDFServiceImpl::gRDFService);
-}
-
-DateImpl::~DateImpl()
-{
-    RDFServiceImpl::gRDFService->UnregisterDate(this);
-
-    // Use NS_RELEASE2() here, because we want to decrease the
-    // refcount, but not null out the gRDFService pointer (which is
-    // what a vanilla NS_RELEASE() would do).
-    nsrefcnt refcnt;
-    NS_RELEASE2(RDFServiceImpl::gRDFService, refcnt);
-}
-
-NS_IMPL_ADDREF(DateImpl)
-NS_IMPL_RELEASE(DateImpl)
-
-nsresult
-DateImpl::QueryInterface(REFNSIID iid, void** result)
-{
-    if (! result)
-        return NS_ERROR_NULL_POINTER;
-
-    *result = nullptr;
-    if (iid.Equals(kIRDFDateIID) ||
-        iid.Equals(kIRDFNodeIID) ||
-        iid.Equals(kISupportsIID)) {
-        *result = static_cast<nsIRDFDate*>(this);
-        AddRef();
-        return NS_OK;
-    }
-    return NS_NOINTERFACE;
-}
-
-NS_IMETHODIMP
-DateImpl::EqualsNode(nsIRDFNode* node, bool* result)
-{
-    nsresult rv;
-    nsIRDFDate* date;
-    if (NS_SUCCEEDED(node->QueryInterface(kIRDFDateIID, (void**) &date))) {
-        rv = EqualsDate(date, result);
-        NS_RELEASE(date);
-    }
-    else {
-        *result = false;
-        rv = NS_OK;
-    }
-    return rv;
-}
-
-NS_IMETHODIMP
-DateImpl::GetValue(PRTime *value)
-{
-    NS_ASSERTION(value, "null ptr");
-    if (! value)
-        return NS_ERROR_NULL_POINTER;
-
-    *value = mValue;
-    return NS_OK;
-}
-
-
-nsresult
-DateImpl::EqualsDate(nsIRDFDate* date, bool* result)
-{
-    NS_ASSERTION(date && result, "null ptr");
-    if (!date || !result)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-    PRTime p;
-    if (NS_FAILED(rv = date->GetValue(&p)))
-        return rv;
-
-    *result = p == mValue;
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-// IntImpl
-//
-
-class IntImpl : public nsIRDFInt {
-public:
-    explicit IntImpl(int32_t s);
-
-    // nsISupports
-    NS_DECL_ISUPPORTS
-
-    // nsIRDFNode
-    NS_DECL_NSIRDFNODE
-
-    // nsIRDFInt
-    NS_IMETHOD GetValue(int32_t *value) override;
-
-private:
-    virtual ~IntImpl();
-
-    nsresult EqualsInt(nsIRDFInt* value, bool* result);
-    int32_t mValue;
-};
-
-
-IntImpl::IntImpl(int32_t s)
-    : mValue(s)
-{
-    RDFServiceImpl::gRDFService->RegisterInt(this);
-    NS_ADDREF(RDFServiceImpl::gRDFService);
-}
-
-IntImpl::~IntImpl()
-{
-    RDFServiceImpl::gRDFService->UnregisterInt(this);
-
-    // Use NS_RELEASE2() here, because we want to decrease the
-    // refcount, but not null out the gRDFService pointer (which is
-    // what a vanilla NS_RELEASE() would do).
-    nsrefcnt refcnt;
-    NS_RELEASE2(RDFServiceImpl::gRDFService, refcnt);
-}
-
-NS_IMPL_ADDREF(IntImpl)
-NS_IMPL_RELEASE(IntImpl)
-
-nsresult
-IntImpl::QueryInterface(REFNSIID iid, void** result)
-{
-    if (! result)
-        return NS_ERROR_NULL_POINTER;
-
-    *result = nullptr;
-    if (iid.Equals(kIRDFIntIID) ||
-        iid.Equals(kIRDFNodeIID) ||
-        iid.Equals(kISupportsIID)) {
-        *result = static_cast<nsIRDFInt*>(this);
-        AddRef();
-        return NS_OK;
-    }
-    return NS_NOINTERFACE;
-}
-
-NS_IMETHODIMP
-IntImpl::EqualsNode(nsIRDFNode* node, bool* result)
-{
-    nsresult rv;
-    nsIRDFInt* intValue;
-    if (NS_SUCCEEDED(node->QueryInterface(kIRDFIntIID, (void**) &intValue))) {
-        rv = EqualsInt(intValue, result);
-        NS_RELEASE(intValue);
-    }
-    else {
-        *result = false;
-        rv = NS_OK;
-    }
-    return rv;
-}
-
-NS_IMETHODIMP
-IntImpl::GetValue(int32_t *value)
-{
-    NS_ASSERTION(value, "null ptr");
-    if (! value)
-        return NS_ERROR_NULL_POINTER;
-
-    *value = mValue;
-    return NS_OK;
-}
-
-
-nsresult
-IntImpl::EqualsInt(nsIRDFInt* intValue, bool* result)
-{
-    NS_ASSERTION(intValue && result, "null ptr");
-    if (!intValue || !result)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-    int32_t p;
-    if (NS_FAILED(rv = intValue->GetValue(&p)))
-        return rv;
-
-    *result = (p == mValue);
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-// RDFServiceImpl
-
-RDFServiceImpl*
-RDFServiceImpl::gRDFService;
-
-RDFServiceImpl::RDFServiceImpl()
-    : mNamedDataSources(nullptr)
-    , mResources(&gResourceTableOps, sizeof(ResourceHashEntry))
-    , mLiterals(&gLiteralTableOps, sizeof(LiteralHashEntry))
-    , mInts(&gIntTableOps, sizeof(IntHashEntry))
-    , mDates(&gDateTableOps, sizeof(DateHashEntry))
-    , mBlobs(&gBlobTableOps, sizeof(BlobHashEntry))
-{
-    gRDFService = this;
-}
-
-nsresult
-RDFServiceImpl::Init()
-{
-    nsresult rv;
-
-    mNamedDataSources = PL_NewHashTable(23,
-                                        PL_HashString,
-                                        PL_CompareStrings,
-                                        PL_CompareValues,
-                                        &dataSourceHashAllocOps, nullptr);
-
-    if (! mNamedDataSources)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    mDefaultResourceFactory = do_GetClassObject(kRDFDefaultResourceCID, &rv);
-    NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get default resource factory");
-    if (NS_FAILED(rv)) return rv;
-
-    return NS_OK;
-}
-
-
-RDFServiceImpl::~RDFServiceImpl()
-{
-    if (mNamedDataSources) {
-        PL_HashTableDestroy(mNamedDataSources);
-        mNamedDataSources = nullptr;
-    }
-    gRDFService = nullptr;
-}
-
-
-// static
-nsresult
-RDFServiceImpl::CreateSingleton(nsISupports* aOuter,
-                                const nsIID& aIID, void **aResult)
-{
-    NS_ENSURE_NO_AGGREGATION(aOuter);
-
-    if (gRDFService) {
-        NS_ERROR("Trying to create RDF serviec twice.");
-        return gRDFService->QueryInterface(aIID, aResult);
-    }
-
-    RefPtr<RDFServiceImpl> serv = new RDFServiceImpl();
-    nsresult rv = serv->Init();
-    if (NS_FAILED(rv))
-        return rv;
-
-    return serv->QueryInterface(aIID, aResult);
-}
-
-NS_IMPL_ISUPPORTS(RDFServiceImpl, nsIRDFService, nsISupportsWeakReference)
-
-// Per RFC2396.
-static const uint8_t
-kLegalSchemeChars[] = {
-          //        ASCII    Bits     Ordered  Hex
-          //                 01234567 76543210
-    0x00, // 00-07
-    0x00, // 08-0F
-    0x00, // 10-17
-    0x00, // 18-1F
-    0x00, // 20-27   !"#$%&' 00000000 00000000
-    0x28, // 28-2F  ()*+,-./ 00010100 00101000 0x28
-    0xff, // 30-37  01234567 11111111 11111111 0xFF
-    0x03, // 38-3F  89:;<=>? 11000000 00000011 0x03
-    0xfe, // 40-47  @ABCDEFG 01111111 11111110 0xFE
-    0xff, // 48-4F  HIJKLMNO 11111111 11111111 0xFF
-    0xff, // 50-57  PQRSTUVW 11111111 11111111 0xFF
-    0x87, // 58-5F  XYZ[\]^_ 11100001 10000111 0x87
-    0xfe, // 60-67  `abcdefg 01111111 11111110 0xFE
-    0xff, // 68-6F  hijklmno 11111111 11111111 0xFF
-    0xff, // 70-77  pqrstuvw 11111111 11111111 0xFF
-    0x07, // 78-7F  xyz{|}~  11100000 00000111 0x07
-    0x00, 0x00, 0x00, 0x00, // >= 80
-    0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00,
-    0x00, 0x00, 0x00, 0x00
-};
-
-static inline bool
-IsLegalSchemeCharacter(const char aChar)
-{
-    uint8_t mask = kLegalSchemeChars[aChar >> 3];
-    uint8_t bit = 1u << (aChar & 0x7);
-    return bool((mask & bit) != 0);
-}
-
-
-NS_IMETHODIMP
-RDFServiceImpl::GetResource(const nsACString& aURI, nsIRDFResource** aResource)
-{
-    // Sanity checks
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    NS_PRECONDITION(!aURI.IsEmpty(), "URI is empty");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-    if (aURI.IsEmpty())
-        return NS_ERROR_INVALID_ARG;
-
-    const nsCString& flatURI = PromiseFlatCString(aURI);
-    MOZ_LOG(gLog, LogLevel::Debug, ("rdfserv get-resource %s", flatURI.get()));
-
-    // First, check the cache to see if we've already created and
-    // registered this thing.
-    PLDHashEntryHdr *hdr = mResources.Search(flatURI.get());
-    if (hdr) {
-        ResourceHashEntry *entry = static_cast<ResourceHashEntry *>(hdr);
-        NS_ADDREF(*aResource = entry->mResource);
-        return NS_OK;
-    }
-
-    // Nope. So go to the repository to create it.
-
-    // Compute the scheme of the URI. Scan forward until we either:
-    //
-    // 1. Reach the end of the string
-    // 2. Encounter a non-alpha character
-    // 3. Encouter a colon.
-    //
-    // If we encounter a colon _before_ encountering a non-alpha
-    // character, then assume it's the scheme.
-    //
-    // XXX Although it's really not correct, we'll allow underscore
-    // characters ('_'), too.
-    nsACString::const_iterator p, end;
-    aURI.BeginReading(p);
-    aURI.EndReading(end);
-    while (p != end && IsLegalSchemeCharacter(*p))
-        ++p;
-
-    nsresult rv;
-    nsCOMPtr<nsIFactory> factory;
-
-    nsACString::const_iterator begin;
-    aURI.BeginReading(begin);
-    if (*p == ':') {
-        // There _was_ a scheme. First see if it's the same scheme
-        // that we just tried to use...
-        if (mLastFactory && mLastURIPrefix.Equals(Substring(begin, p)))
-            factory = mLastFactory;
-        else {
-            // Try to find a factory using the component manager.
-            nsACString::const_iterator begin;
-            aURI.BeginReading(begin);
-            nsAutoCString contractID;
-            contractID = NS_LITERAL_CSTRING(NS_RDF_RESOURCE_FACTORY_CONTRACTID_PREFIX) +
-                         Substring(begin, p);
-
-            factory = do_GetClassObject(contractID.get());
-            if (factory) {
-                // Store the factory in our one-element cache.
-                if (p != begin) {
-                    mLastFactory = factory;
-                    mLastURIPrefix = Substring(begin, p);
-                }
-            }
-        }
-    }
-
-    if (! factory) {
-        // fall through to using the "default" resource factory if either:
-        //
-        // 1. The URI didn't have a scheme, or
-        // 2. There was no resource factory registered for the scheme.
-        factory = mDefaultResourceFactory;
-
-        // Store the factory in our one-element cache.
-        if (p != begin) {
-            mLastFactory = factory;
-            mLastURIPrefix = Substring(begin, p);
-        }
-    }
-
-    nsIRDFResource *result;
-    rv = factory->CreateInstance(nullptr, NS_GET_IID(nsIRDFResource), (void**) &result);
-    if (NS_FAILED(rv)) return rv;
-
-    // Now initialize it with its URI. At this point, the resource
-    // implementation should register itself with the RDF service.
-    rv = result->Init(flatURI.get());
-    if (NS_FAILED(rv)) {
-        NS_ERROR("unable to initialize resource");
-        NS_RELEASE(result);
-        return rv;
-    }
-
-    *aResource = result; // already refcounted from repository
-    return rv;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::GetUnicodeResource(const nsAString& aURI, nsIRDFResource** aResource)
-{
-    return GetResource(NS_ConvertUTF16toUTF8(aURI), aResource);
-}
-
-
-NS_IMETHODIMP
-RDFServiceImpl::GetAnonymousResource(nsIRDFResource** aResult)
-{
-static uint32_t gCounter = 0;
-static char gChars[] = "0123456789abcdef"
-                       "ghijklmnopqrstuv"
-                       "wxyzABCDEFGHIJKL"
-                       "MNOPQRSTUVWXYZ.+";
-
-static int32_t kMask  = 0x003f;
-static int32_t kShift = 6;
-
-    if (! gCounter) {
-        // Start it at a semi-unique value, just to minimize the
-        // chance that we get into a situation where
-        //
-        // 1. An anonymous resource gets serialized out in a graph
-        // 2. Reboot
-        // 3. The same anonymous resource gets requested, and refers
-        //    to something completely different.
-        // 4. The serialization is read back in.
-        gCounter = uint32_t(PR_Now());
-    }
-
-    nsresult rv;
-    nsAutoCString s;
-
-    do {
-        // Ugh, this is a really sloppy way to do this; I copied the
-        // implementation from the days when it lived outside the RDF
-        // service. Now that it's a member we can be more cleverer.
-
-        s.Truncate();
-        s.AppendLiteral("rdf:#$");
-
-        uint32_t id = ++gCounter;
-        while (id) {
-            char ch = gChars[(id & kMask)];
-            s.Append(ch);
-            id >>= kShift;
-        }
-
-        nsIRDFResource* resource;
-        rv = GetResource(s, &resource);
-        if (NS_FAILED(rv)) return rv;
-
-        // XXX an ugly but effective way to make sure that this
-        // resource is really unique in the world.
-        resource->AddRef();
-        nsrefcnt refcnt = resource->Release();
-
-        if (refcnt == 1) {
-            *aResult = resource;
-            break;
-        }
-
-        NS_RELEASE(resource);
-    } while (1);
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFServiceImpl::GetLiteral(const char16_t* aValue, nsIRDFLiteral** aLiteral)
-{
-    NS_PRECONDITION(aValue != nullptr, "null ptr");
-    if (! aValue)
-        return NS_ERROR_NULL_POINTER;
-
-    NS_PRECONDITION(aLiteral != nullptr, "null ptr");
-    if (! aLiteral)
-        return NS_ERROR_NULL_POINTER;
-
-    // See if we have one already cached
-    PLDHashEntryHdr *hdr = mLiterals.Search(aValue);
-    if (hdr) {
-        LiteralHashEntry *entry = static_cast<LiteralHashEntry *>(hdr);
-        NS_ADDREF(*aLiteral = entry->mLiteral);
-        return NS_OK;
-    }
-
-    // Nope. Create a new one
-    return LiteralImpl::Create(aValue, aLiteral);
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::GetDateLiteral(PRTime aTime, nsIRDFDate** aResult)
-{
-    // See if we have one already cached
-    PLDHashEntryHdr *hdr = mDates.Search(&aTime);
-    if (hdr) {
-        DateHashEntry *entry = static_cast<DateHashEntry *>(hdr);
-        NS_ADDREF(*aResult = entry->mDate);
-        return NS_OK;
-    }
-
-    DateImpl* result = new DateImpl(aTime);
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(*aResult = result);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::GetIntLiteral(int32_t aInt, nsIRDFInt** aResult)
-{
-    // See if we have one already cached
-    PLDHashEntryHdr *hdr = mInts.Search(&aInt);
-    if (hdr) {
-        IntHashEntry *entry = static_cast<IntHashEntry *>(hdr);
-        NS_ADDREF(*aResult = entry->mInt);
-        return NS_OK;
-    }
-
-    IntImpl* result = new IntImpl(aInt);
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(*aResult = result);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::GetBlobLiteral(const uint8_t *aBytes, int32_t aLength,
-                               nsIRDFBlob **aResult)
-{
-    BlobImpl::Data key = { aLength, const_cast<uint8_t *>(aBytes) };
-
-    PLDHashEntryHdr *hdr = mBlobs.Search(&key);
-    if (hdr) {
-        BlobHashEntry *entry = static_cast<BlobHashEntry *>(hdr);
-        NS_ADDREF(*aResult = entry->mBlob);
-        return NS_OK;
-    }
-
-    BlobImpl *result = new BlobImpl(aBytes, aLength);
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(*aResult = result);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::IsAnonymousResource(nsIRDFResource* aResource, bool* _result)
-{
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    const char* uri;
-    rv = aResource->GetValueConst(&uri);
-    if (NS_FAILED(rv)) return rv;
-
-    if ((uri[0] == 'r') &&
-        (uri[1] == 'd') &&
-        (uri[2] == 'f') &&
-        (uri[3] == ':') &&
-        (uri[4] == '#') &&
-        (uri[5] == '$')) {
-        *_result = true;
-    }
-    else {
-        *_result = false;
-    }
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::RegisterResource(nsIRDFResource* aResource, bool aReplace)
-{
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    const char* uri;
-    rv = aResource->GetValueConst(&uri);
-    NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get URI from resource");
-    if (NS_FAILED(rv)) return rv;
-
-    NS_ASSERTION(uri != nullptr, "resource has no URI");
-    if (! uri)
-        return NS_ERROR_NULL_POINTER;
-
-    PLDHashEntryHdr *hdr = mResources.Search(uri);
-    if (hdr) {
-        if (!aReplace) {
-            NS_WARNING("resource already registered, and replace not specified");
-            return NS_ERROR_FAILURE;    // already registered
-        }
-
-        // N.B., we do _not_ release the original resource because we
-        // only ever held a weak reference to it. We simply replace
-        // it.
-
-        MOZ_LOG(gLog, LogLevel::Debug,
-               ("rdfserv   replace-resource [%p] <-- [%p] %s",
-                static_cast<ResourceHashEntry *>(hdr)->mResource,
-                aResource, (const char*) uri));
-    }
-    else {
-        hdr = mResources.Add(uri, fallible);
-        if (! hdr)
-            return NS_ERROR_OUT_OF_MEMORY;
-
-        MOZ_LOG(gLog, LogLevel::Debug,
-               ("rdfserv   register-resource [%p] %s",
-                aResource, (const char*) uri));
-    }
-
-    // N.B., we only hold a weak reference to the resource: that way,
-    // the resource can be destroyed when the last refcount goes
-    // away. The single addref that the CreateResource() call made
-    // will be owned by the callee.
-    ResourceHashEntry *entry = static_cast<ResourceHashEntry *>(hdr);
-    entry->mResource = aResource;
-    entry->mKey = uri;
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::UnregisterResource(nsIRDFResource* aResource)
-{
-    NS_PRECONDITION(aResource != nullptr, "null ptr");
-    if (! aResource)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    const char* uri;
-    rv = aResource->GetValueConst(&uri);
-    if (NS_FAILED(rv)) return rv;
-
-    NS_ASSERTION(uri != nullptr, "resource has no URI");
-    if (! uri)
-        return NS_ERROR_UNEXPECTED;
-
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv unregister-resource [%p] %s",
-            aResource, (const char*) uri));
-
-#ifdef DEBUG
-    if (!mResources.Search(uri))
-        NS_WARNING("resource was never registered");
-#endif
-
-    mResources.Remove(uri);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::RegisterDataSource(nsIRDFDataSource* aDataSource, bool aReplace)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    nsAutoCString uri;
-    rv = aDataSource->GetURI(uri);
-    if (NS_FAILED(rv)) return rv;
-
-    PLHashEntry** hep =
-      PL_HashTableRawLookup(mNamedDataSources,
-                            (*mNamedDataSources->keyHash)(uri.get()),
-                            uri.get());
-
-    if (*hep) {
-        if (! aReplace)
-            return NS_ERROR_FAILURE; // already registered
-
-        // N.B., we only hold a weak reference to the datasource, so
-        // just replace the old with the new and don't touch any
-        // refcounts.
-        MOZ_LOG(gLog, LogLevel::Debug,
-               ("rdfserv    replace-datasource [%p] <-- [%p] %s",
-                (*hep)->value, aDataSource, uri.get()));
-
-        (*hep)->value = aDataSource;
-    }
-    else {
-        const char* key = PL_strdup(uri.get());
-        if (! key)
-            return NS_ERROR_OUT_OF_MEMORY;
-
-        PL_HashTableAdd(mNamedDataSources, key, aDataSource);
-
-        MOZ_LOG(gLog, LogLevel::Debug,
-               ("rdfserv   register-datasource [%p] %s",
-                aDataSource, uri.get()));
-
-        // N.B., we only hold a weak reference to the datasource, so don't
-        // addref.
-    }
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::UnregisterDataSource(nsIRDFDataSource* aDataSource)
-{
-    NS_PRECONDITION(aDataSource != nullptr, "null ptr");
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    nsAutoCString uri;
-    rv = aDataSource->GetURI(uri);
-    if (NS_FAILED(rv)) return rv;
-
-    //NS_ASSERTION(uri != nullptr, "datasource has no URI");
-    if (uri.IsVoid())
-        return NS_ERROR_UNEXPECTED;
-
-    PLHashEntry** hep =
-        PL_HashTableRawLookup(mNamedDataSources,
-                              (*mNamedDataSources->keyHash)(uri.get()),
-                              uri.get());
-
-    // It may well be that this datasource was never registered. If
-    // so, don't unregister it.
-    if (! *hep || ((*hep)->value != aDataSource))
-        return NS_OK;
-
-    // N.B., we only held a weak reference to the datasource, so we
-    // don't release here.
-    PL_HashTableRawRemove(mNamedDataSources, hep, *hep);
-
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv unregister-datasource [%p] %s",
-            aDataSource, uri.get()));
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::GetDataSource(const char* aURI, nsIRDFDataSource** aDataSource)
-{
-    // Use the other GetDataSource and ask for a non-blocking Refresh.
-    // If you wanted it loaded synchronously, then you should've tried to do it
-    // yourself, or used GetDataSourceBlocking.
-    return GetDataSource( aURI, false, aDataSource );
-}
-
-NS_IMETHODIMP
-RDFServiceImpl::GetDataSourceBlocking(const char* aURI, nsIRDFDataSource** aDataSource)
-{
-    // Use GetDataSource and ask for a blocking Refresh.
-    return GetDataSource( aURI, true, aDataSource );
-}
-
-nsresult
-RDFServiceImpl::GetDataSource(const char* aURI, bool aBlock, nsIRDFDataSource** aDataSource)
-{
-    NS_PRECONDITION(aURI != nullptr, "null ptr");
-    if (! aURI)
-        return NS_ERROR_NULL_POINTER;
-
-    nsresult rv;
-
-    // Attempt to canonify the URI before we look for it in the
-    // cache. We won't bother doing this on `rdf:' URIs to avoid
-    // useless (and expensive) protocol handler lookups.
-    nsAutoCString spec(aURI);
-
-    if (!StringBeginsWith(spec, NS_LITERAL_CSTRING("rdf:"))) {
-        nsCOMPtr<nsIURI> uri;
-        NS_NewURI(getter_AddRefs(uri), spec);
-        if (uri) {
-            rv = uri->GetSpec(spec);
-            if (NS_FAILED(rv)) return rv;
-        }
-    }
-
-    // First, check the cache to see if we already have this
-    // datasource loaded and initialized.
-    {
-        nsIRDFDataSource* cached =
-            static_cast<nsIRDFDataSource*>(PL_HashTableLookup(mNamedDataSources, spec.get()));
-
-        if (cached) {
-            NS_ADDREF(cached);
-            *aDataSource = cached;
-            return NS_OK;
-        }
-    }
-
-    // Nope. So go to the repository to try to create it.
-    nsCOMPtr<nsIRDFDataSource> ds;
-    if (StringBeginsWith(spec, NS_LITERAL_CSTRING("rdf:"))) {
-        // It's a built-in data source. Convert it to a contract ID.
-        nsAutoCString contractID(
-                NS_LITERAL_CSTRING(NS_RDF_DATASOURCE_CONTRACTID_PREFIX) +
-                Substring(spec, 4, spec.Length() - 4));
-
-        // Strip params to get ``base'' contractID for data source.
-        int32_t p = contractID.FindChar(char16_t('&'));
-        if (p >= 0)
-            contractID.Truncate(p);
-
-        ds = do_GetService(contractID.get(), &rv);
-        if (NS_FAILED(rv)) return rv;
-
-        nsCOMPtr<nsIRDFRemoteDataSource> remote = do_QueryInterface(ds);
-        if (remote) {
-            rv = remote->Init(spec.get());
-            if (NS_FAILED(rv)) return rv;
-        }
-    }
-    else {
-        // Try to load this as an RDF/XML data source
-        ds = do_CreateInstance(kRDFXMLDataSourceCID, &rv);
-        if (NS_FAILED(rv)) return rv;
-
-        nsCOMPtr<nsIRDFRemoteDataSource> remote(do_QueryInterface(ds));
-        NS_ASSERTION(remote, "not a remote RDF/XML data source!");
-        if (! remote) return NS_ERROR_UNEXPECTED;
-
-        rv = remote->Init(spec.get());
-        if (NS_FAILED(rv)) return rv;
-
-        rv = remote->Refresh(aBlock);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    *aDataSource = ds;
-    NS_ADDREF(*aDataSource);
-    return NS_OK;
-}
-
-////////////////////////////////////////////////////////////////////////
-
-nsresult
-RDFServiceImpl::RegisterLiteral(nsIRDFLiteral* aLiteral)
-{
-    const char16_t* value;
-    aLiteral->GetValueConst(&value);
-
-    NS_ASSERTION(!mLiterals.Search(value), "literal already registered");
-
-    PLDHashEntryHdr *hdr = mLiterals.Add(value, fallible);
-    if (! hdr)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    LiteralHashEntry *entry = static_cast<LiteralHashEntry *>(hdr);
-
-    // N.B., we only hold a weak reference to the literal: that
-    // way, the literal can be destroyed when the last refcount
-    // goes away. The single addref that the CreateLiteral() call
-    // made will be owned by the callee.
-    entry->mLiteral = aLiteral;
-    entry->mKey = value;
-
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv   register-literal [%p] %s",
-            aLiteral, NS_ConvertUTF16toUTF8(value).get()));
-
-    return NS_OK;
-}
-
-
-nsresult
-RDFServiceImpl::UnregisterLiteral(nsIRDFLiteral* aLiteral)
-{
-    const char16_t* value;
-    aLiteral->GetValueConst(&value);
-
-    NS_ASSERTION(mLiterals.Search(value), "literal was never registered");
-
-    mLiterals.Remove(value);
-
-    // N.B. that we _don't_ release the literal: we only held a weak
-    // reference to it in the hashtable.
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv unregister-literal [%p] %s",
-            aLiteral, NS_ConvertUTF16toUTF8(value).get()));
-
-    return NS_OK;
-}
-
-//----------------------------------------------------------------------
-
-nsresult
-RDFServiceImpl::RegisterInt(nsIRDFInt* aInt)
-{
-    int32_t value;
-    aInt->GetValue(&value);
-
-    NS_ASSERTION(!mInts.Search(&value), "int already registered");
-
-    PLDHashEntryHdr *hdr = mInts.Add(&value, fallible);
-    if (! hdr)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    IntHashEntry *entry = static_cast<IntHashEntry *>(hdr);
-
-    // N.B., we only hold a weak reference to the literal: that
-    // way, the literal can be destroyed when the last refcount
-    // goes away. The single addref that the CreateInt() call
-    // made will be owned by the callee.
-    entry->mInt = aInt;
-    entry->mKey = value;
-
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv   register-int [%p] %d",
-            aInt, value));
-
-    return NS_OK;
-}
-
-
-nsresult
-RDFServiceImpl::UnregisterInt(nsIRDFInt* aInt)
-{
-    int32_t value;
-    aInt->GetValue(&value);
-
-    NS_ASSERTION(mInts.Search(&value), "int was never registered");
-
-    mInts.Remove(&value);
-
-    // N.B. that we _don't_ release the literal: we only held a weak
-    // reference to it in the hashtable.
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv unregister-int [%p] %d",
-            aInt, value));
-
-    return NS_OK;
-}
-
-//----------------------------------------------------------------------
-
-nsresult
-RDFServiceImpl::RegisterDate(nsIRDFDate* aDate)
-{
-    PRTime value;
-    aDate->GetValue(&value);
-
-    NS_ASSERTION(!mDates.Search(&value), "date already registered");
-
-    PLDHashEntryHdr *hdr = mDates.Add(&value, fallible);
-    if (! hdr)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    DateHashEntry *entry = static_cast<DateHashEntry *>(hdr);
-
-    // N.B., we only hold a weak reference to the literal: that
-    // way, the literal can be destroyed when the last refcount
-    // goes away. The single addref that the CreateDate() call
-    // made will be owned by the callee.
-    entry->mDate = aDate;
-    entry->mKey = value;
-
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv   register-date [%p] %" PRId64,
-            aDate, value));
-
-    return NS_OK;
-}
-
-
-nsresult
-RDFServiceImpl::UnregisterDate(nsIRDFDate* aDate)
-{
-    PRTime value;
-    aDate->GetValue(&value);
-
-    NS_ASSERTION(mDates.Search(&value), "date was never registered");
-
-    mDates.Remove(&value);
-
-    // N.B. that we _don't_ release the literal: we only held a weak
-    // reference to it in the hashtable.
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv unregister-date [%p] %" PRId64,
-            aDate, value));
-
-    return NS_OK;
-}
-
-nsresult
-RDFServiceImpl::RegisterBlob(BlobImpl *aBlob)
-{
-    NS_ASSERTION(!mBlobs.Search(&aBlob->mData), "blob already registered");
-
-    PLDHashEntryHdr *hdr = mBlobs.Add(&aBlob->mData, fallible);
-    if (! hdr)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    BlobHashEntry *entry = static_cast<BlobHashEntry *>(hdr);
-
-    // N.B., we only hold a weak reference to the literal: that
-    // way, the literal can be destroyed when the last refcount
-    // goes away. The single addref that the CreateInt() call
-    // made will be owned by the callee.
-    entry->mBlob = aBlob;
-
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv   register-blob [%p] %s",
-            aBlob, aBlob->mData.mBytes));
-
-    return NS_OK;
-}
-
-nsresult
-RDFServiceImpl::UnregisterBlob(BlobImpl *aBlob)
-{
-    NS_ASSERTION(mBlobs.Search(&aBlob->mData), "blob was never registered");
-
-    mBlobs.Remove(&aBlob->mData);
-
-     // N.B. that we _don't_ release the literal: we only held a weak
-     // reference to it in the hashtable.
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfserv unregister-blob [%p] %s",
-            aBlob, aBlob->mData.mBytes));
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/rdf/base/nsRDFService.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFService_h__
-#define nsRDFService_h__
-
-#include "nsIRDFService.h"
-#include "nsWeakReference.h"
-#include "nsIFactory.h"
-#include "nsCOMPtr.h"
-#include "PLDHashTable.h"
-#include "nsString.h"
-
-struct PLHashTable;
-class nsIRDFLiteral;
-class nsIRDFInt;
-class nsIRDFDate;
-class BlobImpl;
-
-class RDFServiceImpl final : public nsIRDFService,
-                             public nsSupportsWeakReference
-{
-protected:
-    PLHashTable* mNamedDataSources;
-    PLDHashTable mResources;
-    PLDHashTable mLiterals;
-    PLDHashTable mInts;
-    PLDHashTable mDates;
-    PLDHashTable mBlobs;
-
-    nsCString mLastURIPrefix;
-    nsCOMPtr<nsIFactory> mLastFactory;
-    nsCOMPtr<nsIFactory> mDefaultResourceFactory;
-
-    RDFServiceImpl();
-    nsresult Init();
-    virtual ~RDFServiceImpl();
-
-public:
-    static RDFServiceImpl *gRDFService NS_VISIBILITY_HIDDEN;
-    static nsresult CreateSingleton(nsISupports* aOuter,
-                                    const nsIID& aIID, void **aResult);
-
-    // nsISupports
-    NS_DECL_ISUPPORTS
-
-    // nsIRDFService
-    NS_DECL_NSIRDFSERVICE
-
-    // Implementation methods
-    nsresult RegisterLiteral(nsIRDFLiteral* aLiteral);
-    nsresult UnregisterLiteral(nsIRDFLiteral* aLiteral);
-    nsresult RegisterInt(nsIRDFInt* aInt);
-    nsresult UnregisterInt(nsIRDFInt* aInt);
-    nsresult RegisterDate(nsIRDFDate* aDate);
-    nsresult UnregisterDate(nsIRDFDate* aDate);
-    nsresult RegisterBlob(BlobImpl* aBlob);
-    nsresult UnregisterBlob(BlobImpl* aBlob);
-
-    nsresult GetDataSource(const char *aURI, bool aBlock, nsIRDFDataSource **aDataSource );
-};
-
-#endif // nsRDFService_h__
deleted file mode 100644
--- a/rdf/base/nsRDFXMLDataSource.cpp
+++ /dev/null
@@ -1,1173 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  A data source that can read itself from and write itself to an
-  RDF/XML stream.
-
-  For more information on the RDF/XML syntax,
-  see http://www.w3.org/TR/REC-rdf-syntax/.
-
-  This code is based on the final W3C Recommendation,
-  http://www.w3.org/TR/1999/REC-rdf-syntax-19990222.
-
-
-  TO DO
-  -----
-
-  1) Right now, the only kind of stream data sources that are _really_
-     writable are "file:" URIs. (In fact, _all_ "file:" URIs are
-     writable, modulo file system permissions; this may lead to some
-     surprising behavior.) Eventually, it'd be great if we could open
-     an arbitrary nsIOutputStream on *any* URL, and Netlib could just
-     do the magic.
-
-  2) Implement a more terse output for "typed" nodes; that is, instead
-     of "RDF:Description type='ns:foo'", just output "ns:foo".
-
-  3) When re-serializing, we "cheat" for Descriptions that talk about
-     inline resources (i.e.., using the `ID' attribute specified in
-     [6.21]). Instead of writing an `ID="foo"' for the first instance,
-     and then `about="#foo"' for each subsequent instance, we just
-     _always_ write `about="#foo"'.
-
-     We do this so that we can handle the case where an RDF container
-     has been assigned arbitrary properties: the spec says we can't
-     dangle the attributes directly off the container, so we need to
-     refer to it. Of course, with a little cleverness, we could fix
-     this. But who cares?
-
-  4) When re-serializing containers. We have to cheat on some
-     containers, and use an illegal "about=" construct. We do this to
-     handle containers that have been assigned URIs outside of the
-     local document.
-
-
-  Logging
-  -------
-
-  To turn on logging for this module, set
-
-    MOZ_LOG=nsRDFXMLDataSource:5
-
- */
-
-#include "nsIFileStreams.h"
-#include "nsIOutputStream.h"
-#include "nsIFile.h"
-#include "nsIFileChannel.h"
-#include "nsIDTD.h"
-#include "nsIRDFPurgeableDataSource.h"
-#include "nsIInputStream.h"
-#include "nsIOutputStream.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFRemoteDataSource.h"
-#include "nsIRDFService.h"
-#include "nsIRDFXMLParser.h"
-#include "nsIRDFXMLSerializer.h"
-#include "nsIRDFXMLSink.h"
-#include "nsIRDFXMLSource.h"
-#include "nsISafeOutputStream.h"
-#include "nsIServiceManager.h"
-#include "nsIStreamListener.h"
-#include "nsIURL.h"
-#include "nsIFileURL.h"
-#include "nsISafeOutputStream.h"
-#include "nsIChannel.h"
-#include "nsRDFCID.h"
-#include "nsRDFBaseDataSources.h"
-#include "nsCOMArray.h"
-#include "nsString.h"
-#include "plstr.h"
-#include "prio.h"
-#include "prthread.h"
-#include "rdf.h"
-#include "rdfutil.h"
-#include "mozilla/Logging.h"
-#include "nsNameSpaceMap.h"
-#include "nsCRT.h"
-#include "nsCycleCollectionParticipant.h"
-#include "nsIScriptSecurityManager.h"
-#include "nsIChannelEventSink.h"
-#include "nsIAsyncVerifyRedirectCallback.h"
-#include "nsNetUtil.h"
-#include "nsIContentPolicy.h"
-#include "nsContentUtils.h"
-
-#include "rdfIDataSource.h"
-
-//----------------------------------------------------------------------
-//
-// RDFXMLDataSourceImpl
-//
-
-class RDFXMLDataSourceImpl : public nsIRDFDataSource,
-                             public nsIRDFRemoteDataSource,
-                             public nsIRDFXMLSink,
-                             public nsIRDFXMLSource,
-                             public nsIStreamListener,
-                             public rdfIDataSource,
-                             public nsIInterfaceRequestor,
-                             public nsIChannelEventSink
-{
-protected:
-    enum LoadState {
-        eLoadState_Unloaded,
-        eLoadState_Pending,
-        eLoadState_Loading,
-        eLoadState_Loaded
-    };
-
-    nsCOMPtr<nsIRDFDataSource> mInner;
-    bool                mIsWritable;    // true if the document can be written back
-    bool                mIsDirty;       // true if the document should be written back
-    LoadState           mLoadState;     // what we're doing now
-    nsCOMArray<nsIRDFXMLSinkObserver> mObservers;
-    nsCOMPtr<nsIURI>    mURL;
-    nsCOMPtr<nsIStreamListener> mListener;
-    nsNameSpaceMap      mNameSpaces;
-
-    // pseudo-constants
-    static int32_t gRefCnt;
-    static nsIRDFService* gRDFService;
-
-    static mozilla::LazyLogModule gLog;
-
-    nsresult Init();
-    RDFXMLDataSourceImpl(void);
-    virtual ~RDFXMLDataSourceImpl(void);
-    nsresult rdfXMLFlush(nsIURI *aURI);
-
-    friend nsresult
-    NS_NewRDFXMLDataSource(nsIRDFDataSource** aResult);
-
-    inline bool IsLoading() {
-        return (mLoadState == eLoadState_Pending) ||
-               (mLoadState == eLoadState_Loading);
-    }
-
-public:
-    // nsISupports
-    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-    NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(RDFXMLDataSourceImpl,
-                                             nsIRDFDataSource)
-
-    // nsIRDFDataSource
-    NS_IMETHOD GetURI(nsACString& aURI) override;
-
-    NS_IMETHOD GetSource(nsIRDFResource* property,
-                         nsIRDFNode* target,
-                         bool tv,
-                         nsIRDFResource** source) override {
-        return mInner->GetSource(property, target, tv, source);
-    }
-
-    NS_IMETHOD GetSources(nsIRDFResource* property,
-                          nsIRDFNode* target,
-                          bool tv,
-                          nsISimpleEnumerator** sources) override {
-        return mInner->GetSources(property, target, tv, sources);
-    }
-
-    NS_IMETHOD GetTarget(nsIRDFResource* source,
-                         nsIRDFResource* property,
-                         bool tv,
-                         nsIRDFNode** target) override {
-        return mInner->GetTarget(source, property, tv, target);
-    }
-
-    NS_IMETHOD GetTargets(nsIRDFResource* source,
-                          nsIRDFResource* property,
-                          bool tv,
-                          nsISimpleEnumerator** targets) override {
-        return mInner->GetTargets(source, property, tv, targets);
-    }
-
-    NS_IMETHOD Assert(nsIRDFResource* aSource,
-                      nsIRDFResource* aProperty,
-                      nsIRDFNode* aTarget,
-                      bool tv) override;
-
-    NS_IMETHOD Unassert(nsIRDFResource* source,
-                        nsIRDFResource* property,
-                        nsIRDFNode* target) override;
-
-    NS_IMETHOD Change(nsIRDFResource* aSource,
-                      nsIRDFResource* aProperty,
-                      nsIRDFNode* aOldTarget,
-                      nsIRDFNode* aNewTarget) override;
-
-    NS_IMETHOD Move(nsIRDFResource* aOldSource,
-                    nsIRDFResource* aNewSource,
-                    nsIRDFResource* aProperty,
-                    nsIRDFNode* aTarget) override;
-
-    NS_IMETHOD HasAssertion(nsIRDFResource* source,
-                            nsIRDFResource* property,
-                            nsIRDFNode* target,
-                            bool tv,
-                            bool* hasAssertion) override {
-        return mInner->HasAssertion(source, property, target, tv, hasAssertion);
-    }
-
-    NS_IMETHOD AddObserver(nsIRDFObserver* aObserver) override {
-        return mInner->AddObserver(aObserver);
-    }
-
-    NS_IMETHOD RemoveObserver(nsIRDFObserver* aObserver) override {
-        return mInner->RemoveObserver(aObserver);
-    }
-
-    NS_IMETHOD HasArcIn(nsIRDFNode *aNode, nsIRDFResource *aArc, bool *_retval) override {
-        return mInner->HasArcIn(aNode, aArc, _retval);
-    }
-
-    NS_IMETHOD HasArcOut(nsIRDFResource *aSource, nsIRDFResource *aArc, bool *_retval) override {
-        return mInner->HasArcOut(aSource, aArc, _retval);
-    }
-
-    NS_IMETHOD ArcLabelsIn(nsIRDFNode* node,
-                           nsISimpleEnumerator** labels) override {
-        return mInner->ArcLabelsIn(node, labels);
-    }
-
-    NS_IMETHOD ArcLabelsOut(nsIRDFResource* source,
-                            nsISimpleEnumerator** labels) override {
-        return mInner->ArcLabelsOut(source, labels);
-    }
-
-    NS_IMETHOD GetAllResources(nsISimpleEnumerator** aResult) override {
-        return mInner->GetAllResources(aResult);
-    }
-
-    NS_IMETHOD GetAllCmds(nsIRDFResource* source,
-                              nsISimpleEnumerator/*<nsIRDFResource>*/** commands) override {
-        return mInner->GetAllCmds(source, commands);
-    }
-
-    NS_IMETHOD IsCommandEnabled(nsISupports* aSources,
-                                nsIRDFResource*   aCommand,
-                                nsISupports* aArguments,
-                                bool* aResult) override {
-        return NS_ERROR_NOT_IMPLEMENTED;
-    }
-
-    NS_IMETHOD DoCommand(nsISupports* aSources,
-                         nsIRDFResource*   aCommand,
-                         nsISupports* aArguments) override {
-        return NS_ERROR_NOT_IMPLEMENTED;
-    }
-
-    NS_IMETHOD BeginUpdateBatch() override {
-        return mInner->BeginUpdateBatch();
-    }
-
-    NS_IMETHOD EndUpdateBatch() override {
-        return mInner->EndUpdateBatch();
-    }
-
-    // nsIRDFRemoteDataSource interface
-    NS_DECL_NSIRDFREMOTEDATASOURCE
-
-    // nsIRDFXMLSink interface
-    NS_DECL_NSIRDFXMLSINK
-
-    // nsIRDFXMLSource interface
-    NS_DECL_NSIRDFXMLSOURCE
-
-    // nsIRequestObserver
-    NS_DECL_NSIREQUESTOBSERVER
-
-    // nsIStreamListener
-    NS_DECL_NSISTREAMLISTENER
-
-    // nsIInterfaceRequestor
-    NS_DECL_NSIINTERFACEREQUESTOR
-
-    // nsIChannelEventSink
-    NS_DECL_NSICHANNELEVENTSINK
-
-    // rdfIDataSource
-    NS_IMETHOD VisitAllSubjects(rdfITripleVisitor *aVisitor) override {
-        nsresult rv;
-        nsCOMPtr<rdfIDataSource> rdfds = do_QueryInterface(mInner, &rv);
-        if (NS_FAILED(rv)) return rv;
-        return rdfds->VisitAllSubjects(aVisitor);
-    }
-
-    NS_IMETHOD VisitAllTriples(rdfITripleVisitor *aVisitor) override {
-        nsresult rv;
-        nsCOMPtr<rdfIDataSource> rdfds = do_QueryInterface(mInner, &rv);
-        if (NS_FAILED(rv)) return rv;
-        return rdfds->VisitAllTriples(aVisitor);
-    }
-
-    // Implementation methods
-    bool
-    MakeQName(nsIRDFResource* aResource,
-              nsString& property,
-              nsString& nameSpacePrefix,
-              nsString& nameSpaceURI);
-
-    nsresult
-    SerializeAssertion(nsIOutputStream* aStream,
-                       nsIRDFResource* aResource,
-                       nsIRDFResource* aProperty,
-                       nsIRDFNode* aValue);
-
-    nsresult
-    SerializeProperty(nsIOutputStream* aStream,
-                      nsIRDFResource* aResource,
-                      nsIRDFResource* aProperty);
-
-    bool
-    IsContainerProperty(nsIRDFResource* aProperty);
-
-    nsresult
-    SerializeDescription(nsIOutputStream* aStream,
-                         nsIRDFResource* aResource);
-
-    nsresult
-    SerializeMember(nsIOutputStream* aStream,
-                    nsIRDFResource* aContainer,
-                    nsIRDFNode* aMember);
-
-    nsresult
-    SerializeContainer(nsIOutputStream* aStream,
-                       nsIRDFResource* aContainer);
-
-    nsresult
-    SerializePrologue(nsIOutputStream* aStream);
-
-    nsresult
-    SerializeEpilogue(nsIOutputStream* aStream);
-
-    bool
-    IsA(nsIRDFDataSource* aDataSource, nsIRDFResource* aResource, nsIRDFResource* aType);
-
-protected:
-    nsresult
-    BlockingParse(nsIURI* aURL, nsIStreamListener* aConsumer);
-};
-
-int32_t         RDFXMLDataSourceImpl::gRefCnt = 0;
-nsIRDFService*  RDFXMLDataSourceImpl::gRDFService;
-
-mozilla::LazyLogModule RDFXMLDataSourceImpl::gLog("nsRDFXMLDataSource");
-
-static const char kFileURIPrefix[] = "file:";
-static const char kResourceURIPrefix[] = "resource:";
-
-
-//----------------------------------------------------------------------
-
-nsresult
-NS_NewRDFXMLDataSource(nsIRDFDataSource** aResult)
-{
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    RDFXMLDataSourceImpl* datasource = new RDFXMLDataSourceImpl();
-    if (! datasource)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    nsresult rv;
-    rv = datasource->Init();
-
-    if (NS_FAILED(rv)) {
-        delete datasource;
-        return rv;
-    }
-
-    NS_ADDREF(datasource);
-    *aResult = datasource;
-    return NS_OK;
-}
-
-
-RDFXMLDataSourceImpl::RDFXMLDataSourceImpl(void)
-    : mIsWritable(true),
-      mIsDirty(false),
-      mLoadState(eLoadState_Unloaded)
-{
-}
-
-
-nsresult
-RDFXMLDataSourceImpl::Init()
-{
-    nsresult rv;
-    NS_DEFINE_CID(kRDFInMemoryDataSourceCID, NS_RDFINMEMORYDATASOURCE_CID);
-    mInner = do_CreateInstance(kRDFInMemoryDataSourceCID, &rv);
-    if (NS_FAILED(rv)) return rv;
-
-    if (gRefCnt++ == 0) {
-        NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-        rv = CallGetService(kRDFServiceCID, &gRDFService);
-
-        NS_ASSERTION(NS_SUCCEEDED(rv), "unable to get RDF service");
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    return NS_OK;
-}
-
-
-RDFXMLDataSourceImpl::~RDFXMLDataSourceImpl(void)
-{
-    // Unregister first so that nobody else tries to get us.
-    (void) gRDFService->UnregisterDataSource(this);
-
-    // Now flush contents
-    (void) Flush();
-
-    // Release RDF/XML sink observers
-    mObservers.Clear();
-
-    if (--gRefCnt == 0)
-        NS_IF_RELEASE(gRDFService);
-}
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(RDFXMLDataSourceImpl)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_0(RDFXMLDataSourceImpl)
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(RDFXMLDataSourceImpl)
-    NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mInner)
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-
-NS_IMPL_CYCLE_COLLECTING_ADDREF(RDFXMLDataSourceImpl)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(RDFXMLDataSourceImpl)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(RDFXMLDataSourceImpl)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFRemoteDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFXMLSink)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFXMLSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRequestObserver)
-    NS_INTERFACE_MAP_ENTRY(nsIStreamListener)
-    NS_INTERFACE_MAP_ENTRY(rdfIDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
-    NS_INTERFACE_MAP_ENTRY(nsIChannelEventSink)
-    NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIRDFDataSource)
-NS_INTERFACE_MAP_END
-
-// nsIInterfaceRequestor
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::GetInterface(const nsIID& aIID, void** aSink)
-{
-  return QueryInterface(aIID, aSink);
-}
-
-nsresult
-RDFXMLDataSourceImpl::BlockingParse(nsIURI* aURL, nsIStreamListener* aConsumer)
-{
-    nsresult rv;
-
-    // XXX I really hate the way that we're spoon-feeding this stuff
-    // to the parser: it seems like this is something that netlib
-    // should be able to do by itself.
-
-    nsCOMPtr<nsIChannel> channel;
-
-    // Null LoadGroup ?
-    rv = NS_NewChannel(getter_AddRefs(channel),
-                       aURL,
-                       nsContentUtils::GetSystemPrincipal(),
-                       nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL,
-                       nsIContentPolicy::TYPE_OTHER);
-
-    if (NS_FAILED(rv)) return rv;
-    nsCOMPtr<nsIInputStream> in;
-    rv = channel->Open2(getter_AddRefs(in));
-
-    // Report success if the file doesn't exist, but propagate other errors.
-    if (rv == NS_ERROR_FILE_NOT_FOUND) return NS_OK;
-    if (NS_FAILED(rv)) return rv;
-
-    if (! in) {
-        NS_ERROR("no input stream");
-        return NS_ERROR_FAILURE;
-    }
-
-    // Wrap the channel's input stream in a buffered stream to ensure that
-    // ReadSegments is implemented (which OnDataAvailable expects).
-    nsCOMPtr<nsIInputStream> bufStream;
-    rv = NS_NewBufferedInputStream(getter_AddRefs(bufStream), in.forget(),
-                                   4096 /* buffer size */);
-    if (NS_FAILED(rv)) return rv;
-
-    // Notify load observers
-    int32_t i;
-    for (i = mObservers.Count() - 1; i >= 0; --i) {
-        // Make sure to hold a strong reference to the observer so
-        // that it doesn't go away in this call if it removes itself
-        // as an observer
-        nsCOMPtr<nsIRDFXMLSinkObserver> obs = mObservers[i];
-
-        if (obs) {
-            obs->OnBeginLoad(this);
-        }
-    }
-
-    rv = aConsumer->OnStartRequest(channel, nullptr);
-
-    uint64_t offset = 0;
-    while (NS_SUCCEEDED(rv)) {
-        // Skip ODA if the channel is canceled
-        channel->GetStatus(&rv);
-        if (NS_FAILED(rv))
-            break;
-
-        uint64_t avail;
-        if (NS_FAILED(rv = bufStream->Available(&avail)))
-            break; // error
-
-        if (avail == 0)
-            break; // eof
-
-        if (avail > UINT32_MAX)
-            avail = UINT32_MAX;
-
-        rv = aConsumer->OnDataAvailable(channel, nullptr, bufStream, offset, (uint32_t)avail);
-        if (NS_SUCCEEDED(rv))
-            offset += avail;
-    }
-
-    if (NS_FAILED(rv))
-        channel->Cancel(rv);
-
-    channel->GetStatus(&rv);
-    aConsumer->OnStopRequest(channel, nullptr, rv);
-
-    // Notify load observers
-    for (i = mObservers.Count() - 1; i >= 0; --i) {
-        // Make sure to hold a strong reference to the observer so
-        // that it doesn't go away in this call if it removes itself
-        // as an observer
-        nsCOMPtr<nsIRDFXMLSinkObserver> obs = mObservers[i];
-
-        if (obs) {
-            if (NS_FAILED(rv))
-                obs->OnError(this, rv, nullptr);
-
-            obs->OnEndLoad(this);
-        }
-    }
-
-    return rv;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::GetLoaded(bool* _result)
-{
-    *_result = (mLoadState == eLoadState_Loaded);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Init(const char* uri)
-{
-    NS_PRECONDITION(mInner != nullptr, "not initialized");
-    if (! mInner)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    nsresult rv;
-
-    rv = NS_NewURI(getter_AddRefs(mURL), nsDependentCString(uri));
-    if (NS_FAILED(rv)) return rv;
-
-    // XXX this is a hack: any "file:" URI is considered writable. All
-    // others are considered read-only.
-    if ((PL_strncmp(uri, kFileURIPrefix, sizeof(kFileURIPrefix) - 1) != 0) &&
-        (PL_strncmp(uri, kResourceURIPrefix, sizeof(kResourceURIPrefix) - 1) != 0)) {
-        mIsWritable = false;
-    }
-
-    rv = gRDFService->RegisterDataSource(this, false);
-    if (NS_FAILED(rv)) return rv;
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::GetURI(nsACString& aURI)
-{
-    if (!mURL) {
-        aURI.SetIsVoid(true);
-        return NS_OK;
-    }
-
-    return mURL->GetSpec(aURI);
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Assert(nsIRDFResource* aSource,
-                             nsIRDFResource* aProperty,
-                             nsIRDFNode* aTarget,
-                             bool aTruthValue)
-{
-    // We don't accept assertions unless we're writable (except in the
-    // case that we're actually _reading_ the datasource in).
-    nsresult rv;
-
-    if (IsLoading()) {
-        bool hasAssertion = false;
-
-        nsCOMPtr<nsIRDFPurgeableDataSource> gcable = do_QueryInterface(mInner);
-        if (gcable) {
-            rv = gcable->Mark(aSource, aProperty, aTarget, aTruthValue, &hasAssertion);
-            if (NS_FAILED(rv)) return rv;
-        }
-
-        rv = NS_RDF_ASSERTION_ACCEPTED;
-
-        if (! hasAssertion) {
-            rv = mInner->Assert(aSource, aProperty, aTarget, aTruthValue);
-
-            if (NS_SUCCEEDED(rv) && gcable) {
-                // Now mark the new assertion, so it doesn't get
-                // removed when we sweep. Ignore rv, because we want
-                // to return what mInner->Assert() gave us.
-                bool didMark;
-                (void) gcable->Mark(aSource, aProperty, aTarget, aTruthValue, &didMark);
-            }
-
-            if (NS_FAILED(rv)) return rv;
-        }
-
-        return rv;
-    }
-    else if (mIsWritable) {
-        rv = mInner->Assert(aSource, aProperty, aTarget, aTruthValue);
-
-        if (rv == NS_RDF_ASSERTION_ACCEPTED)
-            mIsDirty = true;
-
-        return rv;
-    }
-    else {
-        return NS_RDF_ASSERTION_REJECTED;
-    }
-}
-
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Unassert(nsIRDFResource* source,
-                               nsIRDFResource* property,
-                               nsIRDFNode* target)
-{
-    // We don't accept assertions unless we're writable (except in the
-    // case that we're actually _reading_ the datasource in).
-    nsresult rv;
-
-    if (IsLoading() || mIsWritable) {
-        rv = mInner->Unassert(source, property, target);
-        if (!IsLoading() && rv == NS_RDF_ASSERTION_ACCEPTED)
-            mIsDirty = true;
-    }
-    else {
-        rv = NS_RDF_ASSERTION_REJECTED;
-    }
-
-    return rv;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Change(nsIRDFResource* aSource,
-                             nsIRDFResource* aProperty,
-                             nsIRDFNode* aOldTarget,
-                             nsIRDFNode* aNewTarget)
-{
-    nsresult rv;
-
-    if (IsLoading() || mIsWritable) {
-        rv = mInner->Change(aSource, aProperty, aOldTarget, aNewTarget);
-
-        if (!IsLoading() && rv == NS_RDF_ASSERTION_ACCEPTED)
-            mIsDirty = true;
-    }
-    else {
-        rv = NS_RDF_ASSERTION_REJECTED;
-    }
-
-    return rv;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Move(nsIRDFResource* aOldSource,
-                           nsIRDFResource* aNewSource,
-                           nsIRDFResource* aProperty,
-                           nsIRDFNode* aTarget)
-{
-    nsresult rv;
-
-    if (IsLoading() || mIsWritable) {
-        rv = mInner->Move(aOldSource, aNewSource, aProperty, aTarget);
-        if (!IsLoading() && rv == NS_RDF_ASSERTION_ACCEPTED)
-            mIsDirty = true;
-    }
-    else {
-        rv = NS_RDF_ASSERTION_REJECTED;
-    }
-
-    return rv;
-}
-
-
-nsresult
-RDFXMLDataSourceImpl::rdfXMLFlush(nsIURI *aURI)
-{
-
-    nsresult rv;
-
-    {
-        // Quick and dirty check to see if we're in XPCOM shutdown. If
-        // we are, we're screwed: it's too late to serialize because
-        // many of the services that we'll need to acquire to properly
-        // write the file will be unaquirable.
-        NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
-        nsCOMPtr<nsIRDFService> dummy = do_GetService(kRDFServiceCID, &rv);
-        if (NS_FAILED(rv)) {
-            NS_WARNING("unable to Flush() dirty datasource during XPCOM shutdown");
-            return rv;
-        }
-    }
-
-    // Is it a file? If so, we can write to it. Some day, it'd be nice
-    // if we didn't care what kind of stream this was...
-    nsCOMPtr<nsIFileURL> fileURL = do_QueryInterface(aURI);
-
-    if (fileURL) {
-        nsCOMPtr<nsIFile> file;
-        fileURL->GetFile(getter_AddRefs(file));
-        if (file) {
-            // get a safe output stream, so we don't clobber the datasource file unless
-            // all the writes succeeded.
-            nsCOMPtr<nsIOutputStream> out;
-            rv = NS_NewSafeLocalFileOutputStream(getter_AddRefs(out),
-                                                 file,
-                                                 PR_WRONLY | PR_CREATE_FILE,
-                                                 /*octal*/ 0666,
-                                                 0);
-            if (NS_FAILED(rv)) return rv;
-
-            nsCOMPtr<nsIOutputStream> bufferedOut;
-            rv = NS_NewBufferedOutputStream(getter_AddRefs(bufferedOut),
-                                            out.forget(), 4096);
-            if (NS_FAILED(rv)) return rv;
-
-            rv = Serialize(bufferedOut);
-            if (NS_FAILED(rv)) return rv;
-
-            // All went ok. Maybe except for problems in Write(), but the stream detects
-            // that for us
-            nsCOMPtr<nsISafeOutputStream> safeStream = do_QueryInterface(bufferedOut, &rv);
-            if (NS_FAILED(rv)) return rv;
-
-            rv = safeStream->Finish();
-            if (NS_FAILED(rv)) {
-                NS_WARNING("failed to save datasource file! possible dataloss");
-                return rv;
-            }
-        }
-    }
-
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::FlushTo(const char *aURI)
-{
-    NS_PRECONDITION(aURI != nullptr, "not initialized");
-    if (!aURI)
-        return NS_ERROR_NULL_POINTER;
-
-    // XXX this is a hack: any "file:" URI is considered writable. All
-    // others are considered read-only.
-    if ((PL_strncmp(aURI, kFileURIPrefix, sizeof(kFileURIPrefix) - 1) != 0) &&
-        (PL_strncmp(aURI, kResourceURIPrefix, sizeof(kResourceURIPrefix) - 1) != 0))
-    {
-        return NS_ERROR_ILLEGAL_VALUE;
-    }
-
-    nsCOMPtr<nsIURI>  url;
-    nsresult rv = NS_NewURI(getter_AddRefs(url), aURI);
-    if (NS_FAILED(rv))
-      return rv;
-    rv = rdfXMLFlush(url);
-    return rv;
-}
-
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Flush(void)
-{
-    if (!mIsWritable || !mIsDirty)
-        return NS_OK;
-
-    // while it is not fatal if mURL is not set,
-    // indicate failure since we can't flush back to an unknown origin
-    if (! mURL)
-        return NS_ERROR_NOT_INITIALIZED;
-
-    if (MOZ_LOG_TEST(gLog, LogLevel::Debug)) {
-      MOZ_LOG(gLog, LogLevel::Debug,
-              ("rdfxml[%p] flush(%s)", this, mURL->GetSpecOrDefault().get()));
-    }
-
-    nsresult rv;
-    if (NS_SUCCEEDED(rv = rdfXMLFlush(mURL)))
-    {
-      mIsDirty = false;
-    }
-    return rv;
-}
-
-
-//----------------------------------------------------------------------
-//
-// nsIRDFXMLDataSource methods
-//
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::GetReadOnly(bool* aIsReadOnly)
-{
-    *aIsReadOnly = !mIsWritable;
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::SetReadOnly(bool aIsReadOnly)
-{
-    if (mIsWritable && aIsReadOnly)
-        mIsWritable = false;
-
-    return NS_OK;
-}
-
-// nsIChannelEventSink
-
-// This code is copied from nsSameOriginChecker::OnChannelRedirect. See
-// bug 475940 on providing this code in a shared location.
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::AsyncOnChannelRedirect(nsIChannel *aOldChannel,
-                                             nsIChannel *aNewChannel,
-                                             uint32_t aFlags,
-                                             nsIAsyncVerifyRedirectCallback *cb)
-{
-    NS_PRECONDITION(aNewChannel, "Redirecting to null channel?");
-
-    nsresult rv;
-    nsCOMPtr<nsIScriptSecurityManager> secMan =
-        do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsCOMPtr<nsIPrincipal> oldPrincipal;
-    secMan->GetChannelResultPrincipal(aOldChannel, getter_AddRefs(oldPrincipal));
-
-    nsCOMPtr<nsIURI> newURI;
-    aNewChannel->GetURI(getter_AddRefs(newURI));
-    nsCOMPtr<nsIURI> newOriginalURI;
-    aNewChannel->GetOriginalURI(getter_AddRefs(newOriginalURI));
-
-    NS_ENSURE_STATE(oldPrincipal && newURI && newOriginalURI);
-
-    rv = oldPrincipal->CheckMayLoad(newURI, false, false);
-    if (NS_SUCCEEDED(rv) && newOriginalURI != newURI) {
-        rv = oldPrincipal->CheckMayLoad(newOriginalURI, false, false);
-    }
-
-    if (NS_FAILED(rv))
-        return rv;
-
-    cb->OnRedirectVerifyCallback(NS_OK);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Refresh(bool aBlocking)
-{
-    nsAutoCString spec;
-    if (mURL) {
-        spec = mURL->GetSpecOrDefault();
-    }
-    MOZ_LOG(gLog, LogLevel::Debug,
-           ("rdfxml[%p] refresh(%s) %sblocking", this, spec.get(), (aBlocking ? "" : "non")));
-
-    // If an asynchronous load is already pending, then just let it do
-    // the honors.
-    if (IsLoading()) {
-        MOZ_LOG(gLog, LogLevel::Debug,
-               ("rdfxml[%p] refresh(%s) a load was pending", this, spec.get()));
-
-        if (aBlocking) {
-            NS_WARNING("blocking load requested when async load pending");
-            return NS_ERROR_FAILURE;
-        }
-        else {
-            return NS_OK;
-        }
-    }
-
-    if (! mURL)
-        return NS_ERROR_FAILURE;
-    nsCOMPtr<nsIRDFXMLParser> parser = do_CreateInstance("@mozilla.org/rdf/xml-parser;1");
-    if (! parser)
-        return NS_ERROR_FAILURE;
-
-    nsresult rv = parser->ParseAsync(this, mURL, getter_AddRefs(mListener));
-    if (NS_FAILED(rv)) return rv;
-
-    if (aBlocking) {
-        rv = BlockingParse(mURL, this);
-
-        mListener = nullptr; // release the parser
-
-        if (NS_FAILED(rv)) return rv;
-    }
-    else {
-        // Null LoadGroup ?
-        nsCOMPtr<nsIChannel> channel;
-        rv = NS_NewChannel(getter_AddRefs(channel),
-                           mURL,
-                           nsContentUtils::GetSystemPrincipal(),
-                           nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL,
-                           nsIContentPolicy::TYPE_OTHER,
-                           nullptr, // aPerformanceStorage
-                           nullptr, // aLoadGroup
-                           this);   // aCallbacks
-        NS_ENSURE_SUCCESS(rv, rv);
-        rv = channel->AsyncOpen2(this);
-        NS_ENSURE_SUCCESS(rv, rv);
-
-        // So we don't try to issue two asynchronous loads at once.
-        mLoadState = eLoadState_Pending;
-    }
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::BeginLoad(void)
-{
-    if (MOZ_LOG_TEST(gLog, LogLevel::Debug)) {
-      MOZ_LOG(gLog, LogLevel::Debug,
-              ("rdfxml[%p] begin-load(%s)", this,
-               mURL ? mURL->GetSpecOrDefault().get() : ""));
-    }
-
-    mLoadState = eLoadState_Loading;
-    for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-        // Make sure to hold a strong reference to the observer so
-        // that it doesn't go away in this call if it removes itself
-        // as an observer
-        nsCOMPtr<nsIRDFXMLSinkObserver> obs = mObservers[i];
-
-        if (obs) {
-            obs->OnBeginLoad(this);
-        }
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Interrupt(void)
-{
-    if (MOZ_LOG_TEST(gLog, LogLevel::Debug)) {
-      MOZ_LOG(gLog, LogLevel::Debug,
-              ("rdfxml[%p] interrupt(%s)", this,
-               mURL ? mURL->GetSpecOrDefault().get() : ""));
-    }
-
-    for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-        // Make sure to hold a strong reference to the observer so
-        // that it doesn't go away in this call if it removes itself
-        // as an observer
-        nsCOMPtr<nsIRDFXMLSinkObserver> obs = mObservers[i];
-
-        if (obs) {
-            obs->OnInterrupt(this);
-        }
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Resume(void)
-{
-    if (MOZ_LOG_TEST(gLog, LogLevel::Debug)) {
-      MOZ_LOG(gLog, LogLevel::Debug,
-             ("rdfxml[%p] resume(%s)", this,
-              mURL ? mURL->GetSpecOrDefault().get() : ""));
-    }
-
-    for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-        // Make sure to hold a strong reference to the observer so
-        // that it doesn't go away in this call if it removes itself
-        // as an observer
-        nsCOMPtr<nsIRDFXMLSinkObserver> obs = mObservers[i];
-
-        if (obs) {
-            obs->OnResume(this);
-        }
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::EndLoad(void)
-{
-    if (MOZ_LOG_TEST(gLog, LogLevel::Debug)) {
-      MOZ_LOG(gLog, LogLevel::Debug,
-              ("rdfxml[%p] end-load(%s)", this,
-               mURL ? mURL->GetSpecOrDefault().get() : ""));
-    }
-
-    mLoadState = eLoadState_Loaded;
-
-    // Clear out any unmarked assertions from the datasource.
-    nsCOMPtr<nsIRDFPurgeableDataSource> gcable = do_QueryInterface(mInner);
-    if (gcable) {
-        gcable->Sweep();
-    }
-
-    // Notify load observers
-    for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-        // Make sure to hold a strong reference to the observer so
-        // that it doesn't go away in this call if it removes itself
-        // as an observer
-        nsCOMPtr<nsIRDFXMLSinkObserver> obs = mObservers[i];
-
-        if (obs) {
-            obs->OnEndLoad(this);
-        }
-    }
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::AddNameSpace(nsAtom* aPrefix, const nsString& aURI)
-{
-    mNameSpaces.Put(aURI, aPrefix);
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::AddXMLSinkObserver(nsIRDFXMLSinkObserver* aObserver)
-{
-    if (! aObserver)
-        return NS_ERROR_NULL_POINTER;
-
-    mObservers.AppendObject(aObserver);
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::RemoveXMLSinkObserver(nsIRDFXMLSinkObserver* aObserver)
-{
-    if (! aObserver)
-        return NS_ERROR_NULL_POINTER;
-
-    mObservers.RemoveObject(aObserver);
-
-    return NS_OK;
-}
-
-
-//----------------------------------------------------------------------
-//
-// nsIRequestObserver
-//
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::OnStartRequest(nsIRequest *request, nsISupports *ctxt)
-{
-    return mListener->OnStartRequest(request, ctxt);
-}
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::OnStopRequest(nsIRequest *request,
-                                    nsISupports *ctxt,
-                                    nsresult status)
-{
-    if (NS_FAILED(status)) {
-        for (int32_t i = mObservers.Count() - 1; i >= 0; --i) {
-            // Make sure to hold a strong reference to the observer so
-            // that it doesn't go away in this call if it removes
-            // itself as an observer
-            nsCOMPtr<nsIRDFXMLSinkObserver> obs = mObservers[i];
-
-            if (obs) {
-                obs->OnError(this, status, nullptr);
-            }
-        }
-    }
-
-    nsresult rv;
-    rv = mListener->OnStopRequest(request, ctxt, status);
-
-    mListener = nullptr; // release the parser
-
-    return rv;
-}
-
-//----------------------------------------------------------------------
-//
-// nsIStreamListener
-//
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::OnDataAvailable(nsIRequest *request,
-                                      nsISupports *ctxt,
-                                      nsIInputStream *inStr,
-                                      uint64_t sourceOffset,
-                                      uint32_t count)
-{
-    return mListener->OnDataAvailable(request, ctxt, inStr, sourceOffset, count);
-}
-
-//----------------------------------------------------------------------
-//
-// nsIRDFXMLSource
-//
-
-NS_IMETHODIMP
-RDFXMLDataSourceImpl::Serialize(nsIOutputStream* aStream)
-{
-    nsresult rv;
-    nsCOMPtr<nsIRDFXMLSerializer> serializer
-        = do_CreateInstance("@mozilla.org/rdf/xml-serializer;1", &rv);
-
-    if (! serializer)
-        return rv;
-
-    rv = serializer->Init(this);
-    if (NS_FAILED(rv)) return rv;
-
-    // Add any namespace information that we picked up when reading
-    // the RDF/XML
-    nsNameSpaceMap::const_iterator last = mNameSpaces.last();
-    for (nsNameSpaceMap::const_iterator iter = mNameSpaces.first();
-         iter != last; ++iter) {
-        // We might wanna change nsIRDFXMLSerializer to nsACString and
-        // use a heap allocated buffer here in the future.
-        NS_ConvertUTF8toUTF16 uri(iter->mURI);
-        serializer->AddNameSpace(iter->mPrefix, uri);
-    }
-
-    // Serialize!
-    nsCOMPtr<nsIRDFXMLSource> source = do_QueryInterface(serializer);
-    if (! source)
-        return NS_ERROR_FAILURE;
-
-    return source->Serialize(aStream);
-}
deleted file mode 100644
--- a/rdf/base/nsRDFXMLParser.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsRDFXMLParser.h"
-
-#include "mozilla/Encoding.h"
-#include "nsIComponentManager.h"
-#include "nsIParser.h"
-#include "nsCharsetSource.h"
-#include "nsIRDFContentSink.h"
-#include "nsParserCIID.h"
-#include "nsStringStream.h"
-#include "nsNetUtil.h"
-#include "NullPrincipal.h"
-
-static NS_DEFINE_CID(kParserCID, NS_PARSER_CID);
-
-NS_IMPL_ISUPPORTS(nsRDFXMLParser, nsIRDFXMLParser)
-
-nsresult
-nsRDFXMLParser::Create(nsISupports* aOuter, REFNSIID aIID, void** aResult)
-{
-    if (aOuter)
-        return NS_ERROR_NO_AGGREGATION;
-
-    nsRDFXMLParser* result = new nsRDFXMLParser();
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    nsresult rv;
-    NS_ADDREF(result);
-    rv = result->QueryInterface(aIID, aResult);
-    NS_RELEASE(result);
-    return rv;
-}
-
-nsRDFXMLParser::nsRDFXMLParser()
-{
-}
-
-nsRDFXMLParser::~nsRDFXMLParser()
-{
-}
-
-NS_IMETHODIMP
-nsRDFXMLParser::ParseAsync(nsIRDFDataSource* aSink, nsIURI* aBaseURI, nsIStreamListener** aResult)
-{
-    nsresult rv;
-
-    nsCOMPtr<nsIRDFContentSink> sink =
-        do_CreateInstance("@mozilla.org/rdf/content-sink;1", &rv);
-
-    if (NS_FAILED(rv)) return rv;
-
-    rv = sink->Init(aBaseURI);
-    if (NS_FAILED(rv)) return rv;
-
-    // We set the content sink's data source directly to our in-memory
-    // store. This allows the initial content to be generated "directly".
-    rv = sink->SetDataSource(aSink);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIParser> parser = do_CreateInstance(kParserCID, &rv);
-    if (NS_FAILED(rv)) return rv;
-
-    parser->SetDocumentCharset(UTF_8_ENCODING,
-                               kCharsetFromDocTypeDefault);
-    parser->SetContentSink(sink);
-
-    rv = parser->Parse(aBaseURI);
-    if (NS_FAILED(rv)) return rv;
-
-    return CallQueryInterface(parser, aResult);
-}
-
-NS_IMETHODIMP
-nsRDFXMLParser::ParseString(nsIRDFDataSource* aSink, nsIURI* aBaseURI, const nsACString& aString)
-{
-    nsresult rv;
-
-    nsCOMPtr<nsIRDFContentSink> sink =
-        do_CreateInstance("@mozilla.org/rdf/content-sink;1", &rv);
-
-    if (NS_FAILED(rv)) return rv;
-
-    rv = sink->Init(aBaseURI);
-    if (NS_FAILED(rv)) return rv;
-
-    // We set the content sink's data source directly to our in-memory
-    // store. This allows the initial content to be generated "directly".
-    rv = sink->SetDataSource(aSink);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIParser> parser = do_CreateInstance(kParserCID, &rv);
-    if (NS_FAILED(rv)) return rv;
-
-    parser->SetDocumentCharset(UTF_8_ENCODING,
-                               kCharsetFromOtherComponent);
-    parser->SetContentSink(sink);
-
-    rv = parser->Parse(aBaseURI);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIStreamListener> listener =
-        do_QueryInterface(parser);
-
-    if (! listener)
-        return NS_ERROR_FAILURE;
-
-    nsCOMPtr<nsIInputStream> stream;
-    rv = NS_NewCStringInputStream(getter_AddRefs(stream), aString);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIPrincipal> nullPrincipal = NullPrincipal::CreateWithoutOriginAttributes();
-
-    // The following channel is never openend, so it does not matter what
-    // securityFlags we pass; let's follow the principle of least privilege.
-    nsCOMPtr<nsIChannel> channel;
-    nsCOMPtr<nsIInputStream> tmpStream = stream;
-    rv = NS_NewInputStreamChannel(getter_AddRefs(channel),
-                                  aBaseURI,
-                                  tmpStream.forget(),
-                                  nullPrincipal,
-                                  nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_IS_BLOCKED,
-                                  nsIContentPolicy::TYPE_OTHER,
-                                  NS_LITERAL_CSTRING("text/xml"));
-    if (NS_FAILED(rv)) return rv;
-
-    listener->OnStartRequest(channel, nullptr);
-    listener->OnDataAvailable(channel, nullptr, stream, 0, aString.Length());
-    listener->OnStopRequest(channel, nullptr, NS_OK);
-
-    return NS_OK;
-}
deleted file mode 100644
--- a/rdf/base/nsRDFXMLParser.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFParser_h__
-#define nsRDFParser_h__
-
-#include "nsCOMPtr.h"
-#include "nsString.h"
-#include "nsIRDFXMLParser.h"
-#include "nsIRDFDataSource.h"
-
-/**
- * A helper class that is used to parse RDF/XML.
- */
-class nsRDFXMLParser : public nsIRDFXMLParser {
-public:
-    static nsresult
-    Create(nsISupports* aOuter, REFNSIID aIID, void** aResult);
-
-    NS_DECL_ISUPPORTS
-    NS_DECL_NSIRDFXMLPARSER
-
-protected:
-    nsRDFXMLParser();
-    virtual ~nsRDFXMLParser();
-};
-
-#endif // nsRDFParser_h__
deleted file mode 100644
--- a/rdf/base/nsRDFXMLSerializer.cpp
+++ /dev/null
@@ -1,1123 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- * vim: set ts=4 sw=4 et tw=80:
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsRDFXMLSerializer.h"
-
-#include "nsAtom.h"
-#include "nsIOutputStream.h"
-#include "nsIRDFService.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIServiceManager.h"
-#include "nsString.h"
-#include "nsTArray.h"
-#include "rdf.h"
-#include "rdfutil.h"
-#include "mozilla/Attributes.h"
-
-#include "rdfIDataSource.h"
-
-int32_t nsRDFXMLSerializer::gRefCnt = 0;
-nsIRDFContainerUtils* nsRDFXMLSerializer::gRDFC;
-nsIRDFResource* nsRDFXMLSerializer::kRDF_instanceOf;
-nsIRDFResource* nsRDFXMLSerializer::kRDF_type;
-nsIRDFResource* nsRDFXMLSerializer::kRDF_nextVal;
-nsIRDFResource* nsRDFXMLSerializer::kRDF_Bag;
-nsIRDFResource* nsRDFXMLSerializer::kRDF_Seq;
-nsIRDFResource* nsRDFXMLSerializer::kRDF_Alt;
-
-static const char kRDFDescriptionOpen[]      = "  <RDF:Description";
-static const char kIDAttr[]                  = " RDF:ID=\"";
-static const char kAboutAttr[]               = " RDF:about=\"";
-static const char kRDFDescriptionClose[]     = "  </RDF:Description>\n";
-static const char kRDFResource1[] = " RDF:resource=\"";
-static const char kRDFResource2[] = "\"/>\n";
-static const char kRDFParseTypeInteger[] = " NC:parseType=\"Integer\">";
-static const char kRDFParseTypeDate[] = " NC:parseType=\"Date\">";
-static const char kRDFUnknown[] = "><!-- unknown node type -->";
-
-nsresult
-nsRDFXMLSerializer::Create(nsISupports* aOuter, REFNSIID aIID, void** aResult)
-{
-    if (aOuter)
-        return NS_ERROR_NO_AGGREGATION;
-
-    nsCOMPtr<nsIRDFXMLSerializer> result = new nsRDFXMLSerializer();
-    if (! result)
-        return NS_ERROR_OUT_OF_MEMORY;
-    // The serializer object is here, addref gRefCnt so that the
-    // destructor can safely release it.
-    gRefCnt++;
-
-    nsresult rv;
-    rv = result->QueryInterface(aIID, aResult);
-
-    if (NS_FAILED(rv)) return rv;
-
-    if (gRefCnt == 1) do {
-        nsCOMPtr<nsIRDFService> rdf = do_GetService("@mozilla.org/rdf/rdf-service;1", &rv);
-        if (NS_FAILED(rv)) break;
-
-        rv = rdf->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "instanceOf"),
-                              &kRDF_instanceOf);
-        if (NS_FAILED(rv)) break;
-
-        rv = rdf->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "type"),
-                              &kRDF_type);
-        if (NS_FAILED(rv)) break;
-
-        rv = rdf->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "nextVal"),
-                              &kRDF_nextVal);
-        if (NS_FAILED(rv)) break;
-
-        rv = rdf->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Bag"),
-                              &kRDF_Bag);
-        if (NS_FAILED(rv)) break;
-
-        rv = rdf->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Seq"),
-                              &kRDF_Seq);
-        if (NS_FAILED(rv)) break;
-
-        rv = rdf->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "Alt"),
-                              &kRDF_Alt);
-        if (NS_FAILED(rv)) break;
-
-        rv = CallGetService("@mozilla.org/rdf/container-utils;1", &gRDFC);
-        if (NS_FAILED(rv)) break;
-    } while (0);
-
-    return rv;
-}
-
-nsRDFXMLSerializer::nsRDFXMLSerializer()
-{
-}
-
-nsRDFXMLSerializer::~nsRDFXMLSerializer()
-{
-    if (--gRefCnt == 0) {
-        NS_IF_RELEASE(kRDF_Bag);
-        NS_IF_RELEASE(kRDF_Seq);
-        NS_IF_RELEASE(kRDF_Alt);
-        NS_IF_RELEASE(kRDF_instanceOf);
-        NS_IF_RELEASE(kRDF_type);
-        NS_IF_RELEASE(kRDF_nextVal);
-        NS_IF_RELEASE(gRDFC);
-    }
-}
-
-NS_IMPL_ISUPPORTS(nsRDFXMLSerializer, nsIRDFXMLSerializer, nsIRDFXMLSource)
-
-NS_IMETHODIMP
-nsRDFXMLSerializer::Init(nsIRDFDataSource* aDataSource)
-{
-    if (! aDataSource)
-        return NS_ERROR_NULL_POINTER;
-
-    mDataSource = aDataSource;
-    mDataSource->GetURI(mBaseURLSpec);
-
-    // Add the ``RDF'' prefix, by default.
-    RefPtr<nsAtom> prefix;
-
-    prefix = NS_Atomize("RDF");
-    AddNameSpace(prefix, NS_LITERAL_STRING("http://www.w3.org/1999/02/22-rdf-syntax-ns#"));
-
-    prefix = NS_Atomize("NC");
-    AddNameSpace(prefix, NS_LITERAL_STRING("http://home.netscape.com/NC-rdf#"));
-
-    mPrefixID = 0;
-
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsRDFXMLSerializer::AddNameSpace(nsAtom* aPrefix, const nsAString& aURI)
-{
-    RefPtr<nsAtom> prefix = aPrefix;
-    if (!prefix) {
-        // Make up a prefix, we don't want default namespaces, so
-        // that we can use QNames for elements and attributes alike.
-        prefix = EnsureNewPrefix();
-    }
-    mNameSpaces.Put(aURI, prefix);
-    return NS_OK;
-}
-
-static nsresult
-rdf_BlockingWrite(nsIOutputStream* stream, const char* buf, uint32_t size)
-{
-    uint32_t written = 0;
-    uint32_t remaining = size;
-    while (remaining > 0) {
-        nsresult rv;
-        uint32_t cb;
-
-        if (NS_FAILED(rv = stream->Write(buf + written, remaining, &cb)))
-            return rv;
-
-        written += cb;
-        remaining -= cb;
-    }
-    return NS_OK;
-}
-
-static nsresult
-rdf_BlockingWrite(nsIOutputStream* stream, const nsACString& s)
-{
-    return rdf_BlockingWrite(stream, s.BeginReading(), s.Length());
-}
-
-static nsresult
-rdf_BlockingWrite(nsIOutputStream* stream, const nsAString& s)
-{
-    NS_ConvertUTF16toUTF8 utf8(s);
-    return rdf_BlockingWrite(stream, utf8.get(), utf8.Length());
-}
-
-already_AddRefed<nsAtom>
-nsRDFXMLSerializer::EnsureNewPrefix()
-{
-    nsAutoString qname;
-    RefPtr<nsAtom> prefix;
-    bool isNewPrefix;
-    do {
-        isNewPrefix = true;
-        qname.AssignLiteral("NS");
-        qname.AppendInt(++mPrefixID, 10);
-        prefix = NS_Atomize(qname);
-        nsNameSpaceMap::const_iterator iter = mNameSpaces.first();
-        while (iter != mNameSpaces.last() && isNewPrefix) {
-            isNewPrefix = (iter->mPrefix != prefix);
-            ++iter;
-        }
-    } while (!isNewPrefix);
-    return prefix.forget();
-}
-
-// This converts a property resource (like
-// "http://www.w3.org/TR/WD-rdf-syntax#Description") into a QName
-// ("RDF:Description"), and registers the namespace, if it's made up.
-
-nsresult
-nsRDFXMLSerializer::RegisterQName(nsIRDFResource* aResource)
-{
-    nsAutoCString uri, qname;
-    aResource->GetValueUTF8(uri);
-
-    nsNameSpaceMap::const_iterator iter = mNameSpaces.GetNameSpaceOf(uri);
-    if (iter != mNameSpaces.last()) {
-        NS_ENSURE_TRUE(iter->mPrefix, NS_ERROR_UNEXPECTED);
-        iter->mPrefix->ToUTF8String(qname);
-        qname.Append(':');
-        qname += StringTail(uri, uri.Length() - iter->mURI.Length());
-        mQNames.Put(aResource, qname);
-        return NS_OK;
-    }
-
-    // Okay, so we don't have it in our map. Try to make one up. This
-    // is very bogus.
-    int32_t i = uri.RFindChar('#'); // first try a '#'
-    if (i == -1) {
-        i = uri.RFindChar('/');
-        if (i == -1) {
-            // Okay, just punt and assume there is _no_ namespace on
-            // this thing...
-            mQNames.Put(aResource, uri);
-            return NS_OK;
-        }
-    }
-
-    // Take whatever is to the right of the '#' or '/' and call it the
-    // local name, make up a prefix.
-    RefPtr<nsAtom> prefix = EnsureNewPrefix();
-    mNameSpaces.Put(StringHead(uri, i+1), prefix);
-    prefix->ToUTF8String(qname);
-    qname.Append(':');
-    qname += StringTail(uri, uri.Length() - (i + 1));
-
-    mQNames.Put(aResource, qname);
-    return NS_OK;
-}
-
-nsresult
-nsRDFXMLSerializer::GetQName(nsIRDFResource* aResource, nsCString& aQName)
-{
-    return mQNames.Get(aResource, &aQName) ? NS_OK : NS_ERROR_UNEXPECTED;
-}
-
-bool
-nsRDFXMLSerializer::IsContainerProperty(nsIRDFResource* aProperty)
-{
-    // Return `true' if the property is an internal property related
-    // to being a container.
-    if (aProperty == kRDF_instanceOf)
-        return true;
-
-    if (aProperty == kRDF_nextVal)
-        return true;
-
-    bool isOrdinal = false;
-    gRDFC->IsOrdinalProperty(aProperty, &isOrdinal);
-    if (isOrdinal)
-        return true;
-
-    return false;
-}
-
-
-// convert '&', '<', and '>' into "&amp;", "&lt;", and "&gt", respectively.
-static const char amp[] = "&amp;";
-static const char lt[] = "&lt;";
-static const char gt[] = "&gt;";
-static const char quot[] = "&quot;";
-
-static void
-rdf_EscapeAmpersandsAndAngleBrackets(nsCString& s)
-{
-    uint32_t newLength, origLength;
-    newLength = origLength = s.Length();
-
-    // Compute the length of the result string.
-    const char* start = s.BeginReading();
-    const char* end = s.EndReading();
-    const char* c = start;
-    while (c != end) {
-        switch (*c) {
-        case '&' :
-            newLength += sizeof(amp) - 2;
-            break;
-        case '<':
-        case '>':
-            newLength += sizeof(gt) - 2;
-            break;
-        default:
-            break;
-        }
-        ++c;
-    }
-    if (newLength == origLength) {
-        // nothing to escape
-        return;
-    }
-
-    // escape the chars from the end back to the front.
-    s.SetLength(newLength);
-
-    // Buffer might have changed, get the pointers again
-    start = s.BeginReading(); // begin of string
-    c = start + origLength - 1; // last char in original string
-    char* w = s.EndWriting() - 1; // last char in grown buffer
-    while (c >= start) {
-        switch (*c) {
-        case '&' :
-            w -= 4;
-            nsCharTraits<char>::copy(w, amp, sizeof(amp) - 1);
-            break;
-        case '<':
-            w -= 3;
-            nsCharTraits<char>::copy(w, lt, sizeof(lt) - 1);
-            break;
-        case '>':
-            w -= 3;
-            nsCharTraits<char>::copy(w, gt, sizeof(gt) - 1);
-            break;
-        default:
-            *w = *c;
-        }
-        --w;
-        --c;
-    }
-}
-
-// convert '"' to "&quot;"
-static void
-rdf_EscapeQuotes(nsCString& s)
-{
-    int32_t i = 0;
-    while ((i = s.FindChar('"', i)) != -1) {
-        s.Replace(i, 1, quot, sizeof(quot) - 1);
-        i += sizeof(quot) - 2;
-    }
-}
-
-static void
-rdf_EscapeAttributeValue(nsCString& s)
-{
-    rdf_EscapeAmpersandsAndAngleBrackets(s);
-    rdf_EscapeQuotes(s);
-}
-
-
-nsresult
-nsRDFXMLSerializer::SerializeInlineAssertion(nsIOutputStream* aStream,
-                                             nsIRDFResource* aResource,
-                                             nsIRDFResource* aProperty,
-                                             nsIRDFLiteral* aValue)
-{
-    nsresult rv;
-    nsCString qname;
-    rv = GetQName(aProperty, qname);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    rv = rdf_BlockingWrite(aStream,
-                           NS_LITERAL_CSTRING("\n                   "));
-    if (NS_FAILED(rv)) return rv;
-
-    const char16_t* value;
-    aValue->GetValueConst(&value);
-    NS_ConvertUTF16toUTF8 s(value);
-
-    rdf_EscapeAttributeValue(s);
-
-    rv = rdf_BlockingWrite(aStream, qname);
-    if (NS_FAILED(rv)) return rv;
-    rv = rdf_BlockingWrite(aStream, "=\"", 2);
-    if (NS_FAILED(rv)) return rv;
-    s.Append('"');
-    return rdf_BlockingWrite(aStream, s);
-}
-
-nsresult
-nsRDFXMLSerializer::SerializeChildAssertion(nsIOutputStream* aStream,
-                                            nsIRDFResource* aResource,
-                                            nsIRDFResource* aProperty,
-                                            nsIRDFNode* aValue)
-{
-    nsCString qname;
-    nsresult rv = GetQName(aProperty, qname);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    rv = rdf_BlockingWrite(aStream, "    <", 5);
-    if (NS_FAILED(rv)) return rv;
-    rv = rdf_BlockingWrite(aStream, qname);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIRDFResource> resource;
-    nsCOMPtr<nsIRDFLiteral> literal;
-    nsCOMPtr<nsIRDFInt> number;
-    nsCOMPtr<nsIRDFDate> date;
-
-    if ((resource = do_QueryInterface(aValue)) != nullptr) {
-        nsAutoCString uri;
-        resource->GetValueUTF8(uri);
-
-        rdf_MakeRelativeRef(mBaseURLSpec, uri);
-        rdf_EscapeAttributeValue(uri);
-
-        rv = rdf_BlockingWrite(aStream, kRDFResource1,
-                               sizeof(kRDFResource1) - 1);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, uri);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, kRDFResource2,
-                               sizeof(kRDFResource2) - 1);
-        if (NS_FAILED(rv)) return rv;
-
-        goto no_close_tag;
-    }
-    else if ((literal = do_QueryInterface(aValue)) != nullptr) {
-        const char16_t *value;
-        literal->GetValueConst(&value);
-        NS_ConvertUTF16toUTF8 s(value);
-
-        rdf_EscapeAmpersandsAndAngleBrackets(s);
-
-        rv = rdf_BlockingWrite(aStream, ">", 1);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, s);
-        if (NS_FAILED(rv)) return rv;
-    }
-    else if ((number = do_QueryInterface(aValue)) != nullptr) {
-        int32_t value;
-        number->GetValue(&value);
-
-        nsAutoCString n;
-        n.AppendInt(value);
-
-        rv = rdf_BlockingWrite(aStream, kRDFParseTypeInteger,
-                               sizeof(kRDFParseTypeInteger) - 1);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, n);
-        if (NS_FAILED(rv)) return rv;
-    }
-    else if ((date = do_QueryInterface(aValue)) != nullptr) {
-        PRTime value;
-        date->GetValue(&value);
-
-        nsAutoCString s;
-        rdf_FormatDate(value, s);
-
-        rv = rdf_BlockingWrite(aStream, kRDFParseTypeDate,
-                               sizeof(kRDFParseTypeDate) - 1);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, s);
-        if (NS_FAILED(rv)) return rv;
-    }
-    else {
-        // XXX it doesn't support nsIRDFResource _or_ nsIRDFLiteral???
-        // We should serialize nsIRDFInt, nsIRDFDate, etc...
-        NS_WARNING("unknown RDF node type");
-
-        rv = rdf_BlockingWrite(aStream, kRDFUnknown, sizeof(kRDFUnknown) - 1);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    rv = rdf_BlockingWrite(aStream, "</", 2);
-    if (NS_FAILED(rv)) return rv;
-    rv = rdf_BlockingWrite(aStream, qname);
-    if (NS_FAILED(rv)) return rv;
-    return rdf_BlockingWrite(aStream, ">\n", 2);
-
- no_close_tag:
-    return NS_OK;
-}
-
-nsresult
-nsRDFXMLSerializer::SerializeProperty(nsIOutputStream* aStream,
-                                      nsIRDFResource* aResource,
-                                      nsIRDFResource* aProperty,
-                                      bool aInline,
-                                      int32_t* aSkipped)
-{
-    nsresult rv = NS_OK;
-
-    int32_t skipped = 0;
-
-    nsCOMPtr<nsISimpleEnumerator> assertions;
-    mDataSource->GetTargets(aResource, aProperty, true, getter_AddRefs(assertions));
-    if (! assertions)
-        return NS_ERROR_FAILURE;
-
-    // Serializing the assertion inline is ok as long as the property has
-    // only one target value, and it is a literal that doesn't include line
-    // breaks.
-    bool needsChild = false;
-
-    while (1) {
-        bool hasMore = false;
-        assertions->HasMoreElements(&hasMore);
-        if (! hasMore)
-            break;
-
-        nsCOMPtr<nsISupports> isupports;
-        assertions->GetNext(getter_AddRefs(isupports));
-        nsCOMPtr<nsIRDFLiteral> literal = do_QueryInterface(isupports);
-        needsChild |= (!literal);
-
-        if (!needsChild) {
-            assertions->HasMoreElements(&needsChild);
-            if (!needsChild) {
-                const char16_t* literalVal = nullptr;
-                literal->GetValueConst(&literalVal);
-                if (literalVal) {
-                    for (; *literalVal; literalVal++) {
-                        if (*literalVal == char16_t('\n') ||
-                            *literalVal == char16_t('\r')) {
-                            needsChild = true;
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-
-        if (aInline && !needsChild) {
-            rv = SerializeInlineAssertion(aStream, aResource, aProperty, literal);
-        }
-        else if (!aInline && needsChild) {
-            nsCOMPtr<nsIRDFNode> value = do_QueryInterface(isupports);
-            rv = SerializeChildAssertion(aStream, aResource, aProperty, value);
-        }
-        else {
-            ++skipped;
-            rv = NS_OK;
-        }
-
-        if (NS_FAILED(rv))
-            break;
-    }
-
-    *aSkipped += skipped;
-    return rv;
-}
-
-
-nsresult
-nsRDFXMLSerializer::SerializeDescription(nsIOutputStream* aStream,
-                                         nsIRDFResource* aResource)
-{
-    nsresult rv;
-
-    bool isTypedNode = false;
-    nsCString typeQName;
-
-    nsCOMPtr<nsIRDFNode> typeNode;
-    mDataSource->GetTarget(aResource, kRDF_type, true, getter_AddRefs(typeNode));
-    if (typeNode) {
-        nsCOMPtr<nsIRDFResource> type = do_QueryInterface(typeNode, &rv);
-        if (type) {
-            // Try to get a namespace prefix.  If none is available,
-            // just treat the description as if it weren't a typed node
-            // after all and emit rdf:type as a normal property.  This
-            // seems preferable to using a bogus (invented) prefix.
-            isTypedNode = NS_SUCCEEDED(GetQName(type, typeQName));
-        }
-    }
-
-    nsAutoCString uri;
-    rv = aResource->GetValueUTF8(uri);
-    if (NS_FAILED(rv)) return rv;
-
-    rdf_MakeRelativeRef(mBaseURLSpec, uri);
-    rdf_EscapeAttributeValue(uri);
-
-    // Emit an open tag and the subject
-    if (isTypedNode) {
-        rv = rdf_BlockingWrite(aStream, NS_LITERAL_STRING("  <"));
-        if (NS_FAILED(rv)) return rv;
-        // Watch out for the default namespace!
-        rv = rdf_BlockingWrite(aStream, typeQName);
-        if (NS_FAILED(rv)) return rv;
-    }
-    else {
-        rv = rdf_BlockingWrite(aStream, kRDFDescriptionOpen,
-                               sizeof(kRDFDescriptionOpen) - 1);
-        if (NS_FAILED(rv)) return rv;
-    }
-    if (uri[0] == char16_t('#')) {
-        uri.Cut(0, 1);
-        rv = rdf_BlockingWrite(aStream, kIDAttr, sizeof(kIDAttr) - 1);
-    }
-    else {
-        rv = rdf_BlockingWrite(aStream, kAboutAttr, sizeof(kAboutAttr) - 1);
-    }
-    if (NS_FAILED(rv)) return rv;
-
-    uri.Append('"');
-    rv = rdf_BlockingWrite(aStream, uri);
-    if (NS_FAILED(rv)) return rv;
-
-    // Any value that's a literal we can write out as an inline
-    // attribute on the RDF:Description
-    AutoTArray<nsIRDFResource*, 8> visited;
-    int32_t skipped = 0;
-
-    nsCOMPtr<nsISimpleEnumerator> arcs;
-    mDataSource->ArcLabelsOut(aResource, getter_AddRefs(arcs));
-
-    if (arcs) {
-        // Don't re-serialize rdf:type later on
-        if (isTypedNode)
-            visited.AppendElement(kRDF_type);
-
-        while (1) {
-            bool hasMore = false;
-            arcs->HasMoreElements(&hasMore);
-            if (! hasMore)
-                break;
-
-            nsCOMPtr<nsISupports> isupports;
-            arcs->GetNext(getter_AddRefs(isupports));
-
-            nsCOMPtr<nsIRDFResource> property = do_QueryInterface(isupports);
-            if (! property)
-                continue;
-
-            // Ignore properties that pertain to containers; we may be
-            // called from SerializeContainer() if the container resource
-            // has been assigned non-container properties.
-            if (IsContainerProperty(property))
-                continue;
-
-            // Only serialize values for the property once.
-            if (visited.Contains(property.get()))
-                continue;
-
-            visited.AppendElement(property.get());
-
-            SerializeProperty(aStream, aResource, property, true, &skipped);
-        }
-    }
-
-    if (skipped) {
-        // Close the RDF:Description tag.
-        rv = rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING(">\n"));
-        if (NS_FAILED(rv)) return rv;
-
-        // Now write out resources (which might have their own
-        // substructure) as children.
-        mDataSource->ArcLabelsOut(aResource, getter_AddRefs(arcs));
-
-        if (arcs) {
-            // Forget that we've visited anything
-            visited.Clear();
-            // ... except for rdf:type
-            if (isTypedNode)
-                visited.AppendElement(kRDF_type);
-
-            while (1) {
-                bool hasMore = false;
-                arcs->HasMoreElements(&hasMore);
-                if (! hasMore)
-                    break;
-
-                nsCOMPtr<nsISupports> isupports;
-                arcs->GetNext(getter_AddRefs(isupports));
-
-                nsCOMPtr<nsIRDFResource> property = do_QueryInterface(isupports);
-                if (! property)
-                    continue;
-
-                // Ignore properties that pertain to containers; we may be
-                // called from SerializeContainer() if the container
-                // resource has been assigned non-container properties.
-                if (IsContainerProperty(property))
-                    continue;
-
-                // have we already seen this property?  If so, don't write it
-                // out again; serialize property will write each instance.
-                if (visited.Contains(property.get()))
-                    continue;
-
-                visited.AppendElement(property.get());
-
-                SerializeProperty(aStream, aResource, property, false, &skipped);
-            }
-        }
-
-        // Emit a proper close-tag.
-        if (isTypedNode) {
-            rv = rdf_BlockingWrite(aStream,  NS_LITERAL_CSTRING("  </"));
-            if (NS_FAILED(rv)) return rv;
-            // Watch out for the default namespace!
-            rdf_BlockingWrite(aStream, typeQName);
-            if (NS_FAILED(rv)) return rv;
-            rdf_BlockingWrite(aStream, ">\n", 2);
-            if (NS_FAILED(rv)) return rv;
-        }
-        else {
-            rv = rdf_BlockingWrite(aStream, kRDFDescriptionClose,
-                                   sizeof(kRDFDescriptionClose) - 1);
-            if (NS_FAILED(rv)) return rv;
-        }
-    }
-    else {
-        // If we saw _no_ child properties, then we can don't need a
-        // close-tag.
-        rv = rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING(" />\n"));
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    return NS_OK;
-}
-
-nsresult
-nsRDFXMLSerializer::SerializeMember(nsIOutputStream* aStream,
-                                      nsIRDFResource* aContainer,
-                                      nsIRDFNode* aMember)
-{
-    // If it's a resource, then output a "<RDF:li RDF:resource=... />"
-    // tag, because we'll be dumping the resource separately. (We
-    // iterate thru all the resources in the datasource,
-    // remember?) Otherwise, output the literal value.
-
-    nsCOMPtr<nsIRDFResource> resource;
-    nsCOMPtr<nsIRDFLiteral> literal;
-    nsCOMPtr<nsIRDFInt> number;
-    nsCOMPtr<nsIRDFDate> date;
-
-static const char kRDFLIOpen[] = "    <RDF:li";
-    nsresult rv = rdf_BlockingWrite(aStream, kRDFLIOpen,
-                                    sizeof(kRDFLIOpen) - 1);
-    if (NS_FAILED(rv)) return rv;
-
-    if ((resource = do_QueryInterface(aMember)) != nullptr) {
-        nsAutoCString uri;
-        resource->GetValueUTF8(uri);
-
-        rdf_MakeRelativeRef(mBaseURLSpec, uri);
-        rdf_EscapeAttributeValue(uri);
-
-        rv = rdf_BlockingWrite(aStream, kRDFResource1,
-                               sizeof(kRDFResource1) - 1);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, uri);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, kRDFResource2,
-                               sizeof(kRDFResource2) - 1);
-        if (NS_FAILED(rv)) return rv;
-
-        goto no_close_tag;
-    }
-    else if ((literal = do_QueryInterface(aMember)) != nullptr) {
-        const char16_t *value;
-        literal->GetValueConst(&value);
-static const char kRDFLIOpenGT[] = ">";
-        // close the '<RDF:LI' before adding the literal
-        rv = rdf_BlockingWrite(aStream, kRDFLIOpenGT,
-                               sizeof(kRDFLIOpenGT) - 1);
-        if (NS_FAILED(rv)) return rv;
-
-        NS_ConvertUTF16toUTF8 s(value);
-        rdf_EscapeAmpersandsAndAngleBrackets(s);
-
-        rv = rdf_BlockingWrite(aStream, s);
-        if (NS_FAILED(rv)) return rv;
-    }
-    else if ((number = do_QueryInterface(aMember)) != nullptr) {
-        int32_t value;
-        number->GetValue(&value);
-
-        nsAutoCString n;
-        n.AppendInt(value);
-
-        rv = rdf_BlockingWrite(aStream, kRDFParseTypeInteger,
-                               sizeof(kRDFParseTypeInteger) - 1);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, n);
-        if (NS_FAILED(rv)) return rv;
-    }
-    else if ((date = do_QueryInterface(aMember)) != nullptr) {
-        PRTime value;
-        date->GetValue(&value);
-
-        nsAutoCString s;
-        rdf_FormatDate(value, s);
-
-        rv = rdf_BlockingWrite(aStream, kRDFParseTypeDate,
-                               sizeof(kRDFParseTypeDate) - 1);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, s);
-        if (NS_FAILED(rv)) return rv;
-    }
-    else {
-        // XXX it doesn't support nsIRDFResource _or_ nsIRDFLiteral???
-        // We should serialize nsIRDFInt, nsIRDFDate, etc...
-        NS_WARNING("unknown RDF node type");
-
-        rv = rdf_BlockingWrite(aStream, kRDFUnknown, sizeof(kRDFUnknown) - 1);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    {
-static const char kRDFLIClose[] = "</RDF:li>\n";
-        rv = rdf_BlockingWrite(aStream, kRDFLIClose, sizeof(kRDFLIClose) - 1);
-        if (NS_FAILED(rv)) return rv;
-    }
-
- no_close_tag:
-    return NS_OK;
-}
-
-
-nsresult
-nsRDFXMLSerializer::SerializeContainer(nsIOutputStream* aStream,
-                                         nsIRDFResource* aContainer)
-{
-    nsresult rv;
-    nsAutoCString tag;
-
-    // Decide if it's a sequence, bag, or alternation, and print the
-    // appropriate tag-open sequence
-
-    if (IsA(mDataSource, aContainer, kRDF_Bag)) {
-        tag.AssignLiteral("RDF:Bag");
-    }
-    else if (IsA(mDataSource, aContainer, kRDF_Seq)) {
-        tag.AssignLiteral("RDF:Seq");
-    }
-    else if (IsA(mDataSource, aContainer, kRDF_Alt)) {
-        tag.AssignLiteral("RDF:Alt");
-    }
-    else {
-        NS_ASSERTION(false, "huh? this is _not_ a container.");
-        return NS_ERROR_UNEXPECTED;
-    }
-
-    rv = rdf_BlockingWrite(aStream, "  <", 3);
-    if (NS_FAILED(rv)) return rv;
-    rv = rdf_BlockingWrite(aStream, tag);
-    if (NS_FAILED(rv)) return rv;
-
-
-    // Unfortunately, we always need to print out the identity of the
-    // resource, even if was constructed "anonymously". We need to do
-    // this because we never really know who else might be referring
-    // to it...
-
-    nsAutoCString uri;
-    if (NS_SUCCEEDED(aContainer->GetValueUTF8(uri))) {
-        rdf_MakeRelativeRef(mBaseURLSpec, uri);
-
-        rdf_EscapeAttributeValue(uri);
-
-        if (uri.First() == '#') {
-            // Okay, it's actually identified as an element in the
-            // current document, not trying to decorate some absolute
-            // URI. We can use the 'ID=' attribute...
-
-            uri.Cut(0, 1); // chop the '#'
-            rv = rdf_BlockingWrite(aStream, kIDAttr, sizeof(kIDAttr) - 1);
-            if (NS_FAILED(rv)) return rv;
-        }
-        else {
-            // We need to cheat and spit out an illegal 'about=' on
-            // the sequence.
-            rv = rdf_BlockingWrite(aStream, kAboutAttr,
-                                   sizeof(kAboutAttr) - 1);
-            if (NS_FAILED(rv)) return rv;
-        }
-
-        rv = rdf_BlockingWrite(aStream, uri);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, "\"", 1);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    rv = rdf_BlockingWrite(aStream, ">\n", 2);
-    if (NS_FAILED(rv)) return rv;
-
-    // First iterate through each of the ordinal elements (the RDF/XML
-    // syntax doesn't allow us to place properties on RDF container
-    // elements).
-    nsCOMPtr<nsISimpleEnumerator> elements;
-    rv = NS_NewContainerEnumerator(mDataSource, aContainer, getter_AddRefs(elements));
-
-    if (NS_SUCCEEDED(rv)) {
-        while (1) {
-            bool hasMore;
-            rv = elements->HasMoreElements(&hasMore);
-            if (NS_FAILED(rv)) break;
-
-            if (! hasMore)
-                break;
-
-            nsCOMPtr<nsISupports> isupports;
-            elements->GetNext(getter_AddRefs(isupports));
-
-            nsCOMPtr<nsIRDFNode> element = do_QueryInterface(isupports);
-            NS_ASSERTION(element != nullptr, "not an nsIRDFNode");
-            if (! element)
-                continue;
-
-            SerializeMember(aStream, aContainer, element);
-        }
-    }
-
-    // close the container tag
-    rv = rdf_BlockingWrite(aStream, "  </", 4);
-    if (NS_FAILED(rv)) return rv;
-    tag.Append(">\n", 2);
-    rv = rdf_BlockingWrite(aStream, tag);
-    if (NS_FAILED(rv)) return rv;
-
-    // Now, we iterate through _all_ of the arcs, in case someone has
-    // applied properties to the bag itself. These'll be placed in a
-    // separate RDF:Description element.
-    nsCOMPtr<nsISimpleEnumerator> arcs;
-    mDataSource->ArcLabelsOut(aContainer, getter_AddRefs(arcs));
-
-    bool wroteDescription = false;
-    while (! wroteDescription) {
-        bool hasMore = false;
-        rv = arcs->HasMoreElements(&hasMore);
-        if (NS_FAILED(rv)) break;
-
-        if (! hasMore)
-            break;
-
-        nsIRDFResource* property;
-        rv = arcs->GetNext((nsISupports**) &property);
-        if (NS_FAILED(rv)) break;
-
-        // If it's a membership property, then output a "LI"
-        // tag. Otherwise, output a property.
-        if (! IsContainerProperty(property)) {
-            rv = SerializeDescription(aStream, aContainer);
-            wroteDescription = true;
-        }
-
-        NS_RELEASE(property);
-        if (NS_FAILED(rv))
-            break;
-    }
-
-    return NS_OK;
-}
-
-
-nsresult
-nsRDFXMLSerializer::SerializePrologue(nsIOutputStream* aStream)
-{
-static const char kXMLVersion[] = "<?xml version=\"1.0\"?>\n";
-
-    nsresult rv;
-    rv = rdf_BlockingWrite(aStream, kXMLVersion, sizeof(kXMLVersion) - 1);
-    if (NS_FAILED(rv)) return rv;
-
-    // global name space declarations
-    rv = rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING("<RDF:RDF "));
-    if (NS_FAILED(rv)) return rv;
-
-    nsNameSpaceMap::const_iterator first = mNameSpaces.first();
-    nsNameSpaceMap::const_iterator last = mNameSpaces.last();
-    for (nsNameSpaceMap::const_iterator entry = first; entry != last; ++entry) {
-        if (entry != first) {
-            rv = rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING("\n         "));
-            if (NS_FAILED(rv)) return rv;
-        }
-        rv = rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING("xmlns"));
-        if (NS_FAILED(rv)) return rv;
-
-        if (entry->mPrefix) {
-            rv = rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING(":"));
-            if (NS_FAILED(rv)) return rv;
-            nsAutoCString prefix;
-            entry->mPrefix->ToUTF8String(prefix);
-            rv = rdf_BlockingWrite(aStream, prefix);
-            if (NS_FAILED(rv)) return rv;
-        }
-
-        rv = rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING("=\""));
-        if (NS_FAILED(rv)) return rv;
-        nsAutoCString uri(entry->mURI);
-        rdf_EscapeAttributeValue(uri);
-        rv = rdf_BlockingWrite(aStream, uri);
-        if (NS_FAILED(rv)) return rv;
-        rv = rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING("\""));
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    return rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING(">\n"));
-}
-
-
-nsresult
-nsRDFXMLSerializer::SerializeEpilogue(nsIOutputStream* aStream)
-{
-    return rdf_BlockingWrite(aStream, NS_LITERAL_CSTRING("</RDF:RDF>\n"));
-}
-
-class QNameCollector final : public rdfITripleVisitor {
-public:
-    NS_DECL_ISUPPORTS
-    NS_DECL_RDFITRIPLEVISITOR
-    explicit QNameCollector(nsRDFXMLSerializer* aParent)
-        : mParent(aParent){}
-private:
-    ~QNameCollector() {}
-    nsRDFXMLSerializer* mParent;
-};
-
-NS_IMPL_ISUPPORTS(QNameCollector, rdfITripleVisitor)
-nsresult
-QNameCollector::Visit(nsIRDFNode* aSubject, nsIRDFResource* aPredicate,
-                      nsIRDFNode* aObject, bool aTruthValue)
-{
-    if (aPredicate == nsRDFXMLSerializer::kRDF_type) {
-        // try to get a type QName for aObject, should be a resource
-        nsCOMPtr<nsIRDFResource> resType = do_QueryInterface(aObject);
-        if (!resType) {
-            // ignore error
-            return NS_OK;
-        }
-        if (mParent->mQNames.Get(resType, nullptr)) {
-            return NS_OK;
-        }
-        mParent->RegisterQName(resType);
-        return NS_OK;
-    }
-
-    if (mParent->mQNames.Get(aPredicate, nullptr)) {
-        return NS_OK;
-    }
-    if (aPredicate == nsRDFXMLSerializer::kRDF_instanceOf ||
-        aPredicate == nsRDFXMLSerializer::kRDF_nextVal)
-        return NS_OK;
-    bool isOrdinal = false;
-    nsRDFXMLSerializer::gRDFC->IsOrdinalProperty(aPredicate, &isOrdinal);
-    if (isOrdinal)
-        return NS_OK;
-
-    mParent->RegisterQName(aPredicate);
-
-    return NS_OK;
-}
-
-nsresult
-nsRDFXMLSerializer::CollectNamespaces()
-{
-    // Iterate over all Triples to get namespaces for subject resource types
-    // and Predicates and cache all the QNames we want to use.
-    nsCOMPtr<rdfITripleVisitor> collector =
-        new QNameCollector(this);
-    nsCOMPtr<rdfIDataSource> ds = do_QueryInterface(mDataSource); // XXX API
-    NS_ENSURE_TRUE(collector && ds, NS_ERROR_FAILURE);
-    return ds->VisitAllTriples(collector);
-}
-
-//----------------------------------------------------------------------
-
-NS_IMETHODIMP
-nsRDFXMLSerializer::Serialize(nsIOutputStream* aStream)
-{
-    nsresult rv;
-
-    rv = CollectNamespaces();
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsISimpleEnumerator> resources;
-    rv = mDataSource->GetAllResources(getter_AddRefs(resources));
-    if (NS_FAILED(rv)) return rv;
-
-    rv = SerializePrologue(aStream);
-    if (NS_FAILED(rv))
-        return rv;
-
-    while (1) {
-        bool hasMore = false;
-        resources->HasMoreElements(&hasMore);
-        if (! hasMore)
-            break;
-
-        nsCOMPtr<nsISupports> isupports;
-        resources->GetNext(getter_AddRefs(isupports));
-
-        nsCOMPtr<nsIRDFResource> resource = do_QueryInterface(isupports);
-        if (! resource)
-            continue;
-
-        if (IsA(mDataSource, resource, kRDF_Bag) ||
-            IsA(mDataSource, resource, kRDF_Seq) ||
-            IsA(mDataSource, resource, kRDF_Alt)) {
-            rv = SerializeContainer(aStream, resource);
-        }
-        else {
-            rv = SerializeDescription(aStream, resource);
-        }
-
-        if (NS_FAILED(rv))
-            break;
-    }
-
-    rv = SerializeEpilogue(aStream);
-
-    return rv;
-}
-
-
-bool
-nsRDFXMLSerializer::IsA(nsIRDFDataSource* aDataSource, nsIRDFResource* aResource, nsIRDFResource* aType)
-{
-    nsresult rv;
-
-    bool result;
-    rv = aDataSource->HasAssertion(aResource, kRDF_instanceOf, aType, true, &result);
-    if (NS_FAILED(rv)) return false;
-
-    return result;
-}
deleted file mode 100644
--- a/rdf/base/nsRDFXMLSerializer.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsRDFXMLSerializer_h__
-#define nsRDFXMLSerializer_h__
-
-#include "nsIRDFLiteral.h"
-#include "nsIRDFXMLSerializer.h"
-#include "nsIRDFXMLSource.h"
-#include "nsNameSpaceMap.h"
-#include "nsString.h"
-
-#include "nsDataHashtable.h"
-#include "rdfITripleVisitor.h"
-
-class nsIOutputStream;
-class nsIRDFContainerUtils;
-
-/**
- * A helper class that can serialize RDF/XML from a
- * datasource. Implements both nsIRDFXMLSerializer and
- * nsIRDFXMLSource.
- */
-class nsRDFXMLSerializer : public nsIRDFXMLSerializer,
-                           public nsIRDFXMLSource
-{
-public:
-    static nsresult
-    Create(nsISupports* aOuter, REFNSIID aIID, void** aResult);
-
-    NS_DECL_ISUPPORTS
-    NS_DECL_NSIRDFXMLSERIALIZER
-    NS_DECL_NSIRDFXMLSOURCE
-
-protected:
-    nsRDFXMLSerializer();
-    virtual ~nsRDFXMLSerializer();
-
-    // Implementation methods
-    nsresult
-    RegisterQName(nsIRDFResource* aResource);
-    nsresult
-    GetQName(nsIRDFResource* aResource, nsCString& aQName);
-    already_AddRefed<nsAtom>
-    EnsureNewPrefix();
-
-    nsresult
-    SerializeInlineAssertion(nsIOutputStream* aStream,
-                             nsIRDFResource* aResource,
-                             nsIRDFResource* aProperty,
-                             nsIRDFLiteral* aValue);
-
-    nsresult
-    SerializeChildAssertion(nsIOutputStream* aStream,
-                            nsIRDFResource* aResource,
-                            nsIRDFResource* aProperty,
-                            nsIRDFNode* aValue);
-
-    nsresult
-    SerializeProperty(nsIOutputStream* aStream,
-                      nsIRDFResource* aResource,
-                      nsIRDFResource* aProperty,
-                      bool aInline,
-                      int32_t* aSkipped);
-
-    bool
-    IsContainerProperty(nsIRDFResource* aProperty);
-
-    nsresult
-    SerializeDescription(nsIOutputStream* aStream,
-                         nsIRDFResource* aResource);
-
-    nsresult
-    SerializeMember(nsIOutputStream* aStream,
-                    nsIRDFResource* aContainer,
-                    nsIRDFNode* aMember);
-
-    nsresult
-    SerializeContainer(nsIOutputStream* aStream,
-                       nsIRDFResource* aContainer);
-
-    nsresult
-    SerializePrologue(nsIOutputStream* aStream);
-
-    nsresult
-    SerializeEpilogue(nsIOutputStream* aStream);
-
-    nsresult
-    CollectNamespaces();
-
-    bool
-    IsA(nsIRDFDataSource* aDataSource, nsIRDFResource* aResource, nsIRDFResource* aType);
-
-    nsCOMPtr<nsIRDFDataSource> mDataSource;
-    nsNameSpaceMap mNameSpaces;
-    nsCString mBaseURLSpec;
-
-    // hash mapping resources to utf8-encoded QNames
-    nsDataHashtable<nsISupportsHashKey, nsCString> mQNames;
-    friend class QNameCollector;
-
-    uint32_t mPrefixID;
-
-    static int32_t gRefCnt;
-    static nsIRDFResource* kRDF_instanceOf;
-    static nsIRDFResource* kRDF_type;
-    static nsIRDFResource* kRDF_nextVal;
-    static nsIRDFResource* kRDF_Bag;
-    static nsIRDFResource* kRDF_Seq;
-    static nsIRDFResource* kRDF_Alt;
-    static nsIRDFContainerUtils* gRDFC;
-};
-
-#endif // nsRDFXMLSerializer_h__
deleted file mode 100644
--- a/rdf/base/rdf.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  A catch-all header file for miscellaneous RDF stuff. Currently
-  contains error codes and vocabulary macros.
-
- */
-
-#ifndef rdf_h___
-#define rdf_h___
-
-#include "nsError.h"
-
-/**
- * The following macros are to aid in vocabulary definition.  They
- * creates const char*'s for "kURI[prefix]_[name]", appropriate
- * complete namespace qualification on the URI, e.g.,
- *
- * #define RDF_NAMESPACE_URI "http://www.w3.org/TR/WD-rdf-syntax#"
- * DEFINE_RDF_ELEMENT(RDF_NAMESPACE_URI, RDF, ID);
- *
- * will define:
- *
- * kURIRDF_ID to be "http://www.w3.org/TR/WD-rdf-syntax#ID"
- */
-
-#define DEFINE_RDF_VOCAB(ns, prefix, name) \
-static const char kURI##prefix##_##name[] = ns #name
-
-/**
- * Core RDF vocabularies that we use to define semantics
- */
-
-#define RDF_NAMESPACE_URI  "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-#define WEB_NAMESPACE_URI  "http://home.netscape.com/WEB-rdf#"
-#define NC_NAMESPACE_URI   "http://home.netscape.com/NC-rdf#"
-
-/* ContractID prefixes for RDF DLL registration. */
-#define NS_RDF_CONTRACTID                           "@mozilla.org/rdf"
-#define NS_RDF_DATASOURCE_CONTRACTID                NS_RDF_CONTRACTID "/datasource;1"
-#define NS_RDF_DATASOURCE_CONTRACTID_PREFIX         NS_RDF_DATASOURCE_CONTRACTID "?name="
-#define NS_RDF_RESOURCE_FACTORY_CONTRACTID          "@mozilla.org/rdf/resource-factory;1"
-#define NS_RDF_RESOURCE_FACTORY_CONTRACTID_PREFIX   NS_RDF_RESOURCE_FACTORY_CONTRACTID "?name="
-#define NS_RDF_INFER_DATASOURCE_CONTRACTID_PREFIX   NS_RDF_CONTRACTID "/infer-datasource;1?engine="
-
-// contract ID is in the form
-// @mozilla.org/rdf/delegate-factory;1?key=<key>&scheme=<scheme>
-#define NS_RDF_DELEGATEFACTORY_CONTRACTID    "@mozilla.org/rdf/delegate-factory;1"
-#define NS_RDF_DELEGATEFACTORY_CONTRACTID_PREFIX    NS_RDF_DELEGATEFACTORY_CONTRACTID "?key="
-
-/*@}*/
-
-#endif /* rdf_h___ */
deleted file mode 100644
--- a/rdf/base/rdfIDataSource.idl
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-
-interface rdfITripleVisitor;
-
-/**
- * Interface used in RDF to describe data sources.
- *
- * @status PLASMA
- */
-
-[scriptable, uuid(ebce86bd-1568-4a34-a808-9ccf9cde8087)]
-interface rdfIDataSource : nsISupports
-{
-    /**
-     * Visit all the subject resources in the datasource. The order is
-     * intederminate and may change from one invocation to the next.
-     * The subjects will be in the aSubject argument in calls into
-     * aVisitor, aPredicate and aObject will be null.
-     * @note Implementations may throw NS_ERROR_NOT_IMPLEMENTED for
-     * this method, but in this case RDF serializations of this
-     * datasource will not be possible.
-     */
-    void visitAllSubjects(in rdfITripleVisitor aVisitor);
-
-    /**
-     * Visit all the triples in the datasource. The order is
-     * intederminate and may change from one invocation to the next.
-     * @note Implementations may throw NS_ERROR_NOT_IMPLEMENTED for
-     * this method, but in this case RDF serializations of this
-     * datasource will not be possible.
-     */
-    void visitAllTriples(in rdfITripleVisitor aVisitor);
-};
deleted file mode 100644
--- a/rdf/base/rdfITripleVisitor.idl
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "nsISupports.idl"
-
-interface nsIRDFResource;
-interface nsIRDFNode;
-
-/**
- * Interface used in RDF to enumerate triples.
- * Also used by rdfIDataSource::getAllSubjects, then aPredicate,
- * aObject and aTruthValue are ignored.
- *
- * @status PLASMA
- */
-
-[scriptable, function, uuid(aafea151-c271-4505-9978-a100d292800c)]
-interface rdfITripleVisitor : nsISupports
-{
-    /**
-     * Callback function for returning query results.
-     *
-     * @param aSubject, aPredicate, aObject describe the (sub-)arc
-     * @returnCode NS_RDF_STOP_VISIT to stop iterating over the query result.
-     *             Any error code will stop the iteration as well.
-     */
-    void visit(in nsIRDFNode aSubject, in nsIRDFResource aPredicate,
-               in nsIRDFNode aObject, in boolean aTruthValue);
-};
deleted file mode 100644
--- a/rdf/base/rdfutil.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  Implementations for a bunch of useful RDF utility routines.  Many of
-  these will eventually be exported outside of RDF.DLL via the
-  nsIRDFService interface.
-
-  TO DO
-
-  1) Make this so that it doesn't permanently leak the RDF service
-     object.
-
-  2) Make container functions thread-safe. They currently don't ensure
-     that the RDF:nextVal property is maintained safely.
-
- */
-
-#include "nsCOMPtr.h"
-#include "nsIRDFDataSource.h"
-#include "nsIRDFNode.h"
-#include "nsIRDFService.h"
-#include "nsIServiceManager.h"
-#include "nsIURL.h"
-#include "nsIIOService.h"
-#include "nsIURL.h"
-#include "nsRDFCID.h"
-#include "nsString.h"
-#include "nsUnicharUtils.h"
-#include "rdfutil.h"
-#include "prtime.h"
-
-////////////////////////////////////////////////////////////////////////
-
-nsresult
-rdf_MakeRelativeRef(const nsACString& aBaseURI, nsCString& aURI)
-{
-    // This implementation is extremely simple: e.g., it can't compute
-    // relative paths, or anything fancy like that. If the context URI
-    // is not a prefix of the URI in question, we'll just bail.
-    uint32_t prefixLen = aBaseURI.Length();
-    if (prefixLen != 0 && StringBeginsWith(aURI, aBaseURI)) {
-        if (prefixLen < aURI.Length() && aURI.CharAt(prefixLen) == '/')
-            ++prefixLen; // chop the leading slash so it's not `absolute'
-
-        aURI.Cut(0, prefixLen);
-    }
-
-    return NS_OK;
-}
-
-void
-rdf_FormatDate(PRTime aTime, nsACString &aResult)
-{
-    // Outputs Unixish date in GMT plus usecs; e.g.,
-    //   Wed Jan  9 19:15:13 2002 +002441
-    //
-    PRExplodedTime t;
-    PR_ExplodeTime(aTime, PR_GMTParameters, &t);
-
-    char buf[256];
-    PR_FormatTimeUSEnglish(buf, sizeof buf, "%a %b %d %H:%M:%S %Y", &t);
-    aResult.Append(buf);
-
-    // usecs
-    aResult.AppendLiteral(" +");
-    int32_t usec = t.tm_usec;
-    for (int32_t digit = 100000; digit > 1; digit /= 10) {
-        aResult.Append(char('0' + (usec / digit)));
-        usec %= digit;
-    }
-    aResult.Append(char('0' + usec));
-}
-
-PRTime
-rdf_ParseDate(const nsACString &aTime)
-{
-    PRTime t;
-    PR_ParseTimeString(PromiseFlatCString(aTime).get(), true, &t);
-
-    int32_t usec = 0;
-
-    nsACString::const_iterator begin, digit, end;
-    aTime.BeginReading(begin);
-    aTime.EndReading(end);
-
-    // Walk backwards until we find a `+', run out of string, or a
-    // non-numeric character.
-    digit = end;
-    while (--digit != begin && *digit != '+') {
-        if (*digit < '0' || *digit > '9')
-            break;
-    }
-
-    if (digit != begin && *digit == '+') {
-        // There's a usec field specified (or, at least, something
-        // that looks close enough. Parse it, and add it to the time.
-        while (++digit != end) {
-            usec *= 10;
-            usec += *digit - '0';
-        }
-
-        t += usec;
-    }
-
-    return t;
-}
deleted file mode 100644
--- a/rdf/base/rdfutil.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-
-/*
-
-  A bunch of useful RDF utility routines.  Many of these will
-  eventually be exported outside of RDF.DLL via the nsIRDFService
-  interface.
-
-  TO DO
-
-  1) Move the anonymous resource stuff to nsIRDFService?
-
-  2) All that's left is rdf_PossiblyMakeRelative() and
-     -Absolute(). Maybe those go on nsIRDFService, too.
-
- */
-
-#ifndef rdfutil_h__
-#define rdfutil_h__
-
-#include "nsStringFwd.h"
-
-nsresult
-rdf_MakeRelativeRef(const nsACString& aBaseURI, nsCString& aURI);
-
-void
-rdf_FormatDate(PRTime aTime, nsACString &aResult);
-
-PRTime
-rdf_ParseDate(const nsACString &aTime);
-
-#endif // rdfutil_h__
-
-
deleted file mode 100644
--- a/rdf/build/moz.build
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-EXPORTS += [
-    'nsRDFCID.h',
-]
-
-SOURCES += [
-    'nsRDFModule.cpp',
-]
-
-FINAL_LIBRARY = 'xul'
-
-LOCAL_INCLUDES += [
-    '/rdf/base',
-    '/rdf/datasource',
-]
deleted file mode 100644
--- a/rdf/build/nsRDFCID.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  XPCOM Class IDs for RDF objects that can be constructed via the RDF
-  factory.
-
- */
-
-#ifndef nsRDFCID_h__
-#define nsRDFCID_h__
-
-// {0F78DA56-8321-11d2-8EAC-00805F29F370}
-#define NS_RDFDEFAULTRESOURCE_CID \
-{ 0xf78da56, 0x8321, 0x11d2, { 0x8e, 0xac, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } }
-
-// {BFD05264-834C-11d2-8EAC-00805F29F370}
-#define NS_RDFSERVICE_CID \
-{ 0xbfd05264, 0x834c, 0x11d2, { 0x8e, 0xac, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } }
-
-// {BFD0526D-834C-11d2-8EAC-00805F29F370}
-#define NS_RDFINMEMORYDATASOURCE_CID \
-{ 0xbfd0526d, 0x834c, 0x11d2, { 0x8e, 0xac, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } }
-
-// {E638D760-8687-11d2-B530-000000000001}
-#define NS_RDFFILESYSTEMDATASOURCE_CID \
-{ 0xe638d760, 0x8687, 0x11d2, { 0xb5, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x01 } }
-
-// {6bd1d807-1c67-11d3-9820-ed1b357eb3c4}
-#define NS_RDFSEARCHDATASOURCE_CID \
-{ 0x6bd1d807, 0x1c67, 0x11d3, { 0x98, 0x20, 0xed, 0x1b, 0x35, 0x7e, 0xb3, 0xc4 } }
-
-// {E638D760-8687-11d2-B530-000000000002}
-#define NS_RDFFINDDATASOURCE_CID \
-{ 0xe638d760, 0x8687, 0x11d2, { 0xb5, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x02 } }
-
-// {E638D761-8687-11d2-B530-000000000000}
-#define NS_RDFCOMPOSITEDATASOURCE_CID \
-{ 0xe638d761, 0x8687, 0x11d2, { 0xb5, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } }
-
-// {7BAF62E0-8E61-11d2-8EB1-00805F29F370}
-#define NS_RDFXMLDATASOURCE_CID \
-{ 0x7baf62e0, 0x8e61, 0x11d2, { 0x8e, 0xb1, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } }
-
-// {0958B101-9ADA-11d2-8EBC-00805F29F370}
-#define NS_RDFCONTENTSINK_CID \
-{ 0x958b101, 0x9ada, 0x11d2, { 0x8e, 0xbc, 0x0, 0x80, 0x5f, 0x29, 0xf3, 0x70 } }
-
-// {1EAAFD60-D596-11d2-80BE-006097B76B8E}
-#define NS_RDFHISTORYDATASOURCE_CID \
-{ 0x1eaafd60, 0xd596, 0x11d2, { 0x80, 0xbe, 0x0, 0x60, 0x97, 0xb7, 0x6b, 0x8e } }
-
-// {D4214E92-FB94-11d2-BDD8-00104BDE6048}
-#define NS_RDFCONTAINERUTILS_CID \
-{ 0xd4214e92, 0xfb94, 0x11d2, { 0xbd, 0xd8, 0x0, 0x10, 0x4b, 0xde, 0x60, 0x48 } }
-
-// {D4214E93-FB94-11d2-BDD8-00104BDE6048}
-#define NS_RDFCONTAINER_CID \
-{ 0xd4214e93, 0xfb94, 0x11d2, { 0xbd, 0xd8, 0x0, 0x10, 0x4b, 0xde, 0x60, 0x48 } }
-
-// {0032d852-1dd2-11b2-95f7-e0a1910ed2da}
-#define NS_RDFXMLSERIALIZER_CID \
-{ 0x0032d852, 0x1dd2, 0x11b2, { 0x95, 0xf7, 0xe0, 0xa1, 0x91, 0x0e, 0xd2, 0xda } }
-
-// {a4048e94-1dd1-11b2-a676-8a06c086cc7d}
-#define NS_RDFXMLPARSER_CID \
-{ 0xa4048e94, 0x1dd1, 0x11b2, { 0xa6, 0x76, 0x8a, 0x06, 0xc0, 0x86, 0xcc, 0x7d } }
-
-// {0a5cd734-eb65-4d14-88a0-9f0bb2aba206}
-#define NS_RDFNTRIPLES_SERIALIZER_CID \
-{ 0x0a5cd734, 0xeb65, 0x4d14, { 0x88, 0xa0, 0x9f, 0x0b, 0xb2, 0xab, 0xa2, 0x06 } }
-
-#endif // nsRDFCID_h__
deleted file mode 100644
--- a/rdf/build/nsRDFModule.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-#include "nsCOMPtr.h"
-#include "mozilla/ModuleUtils.h"
-
-#include "nsIFactory.h"
-#include "nsRDFService.h"
-#include "nsIRDFContainer.h"
-#include "nsIRDFContainerUtils.h"
-#include "nsIRDFCompositeDataSource.h"
-#include "nsIRDFContentSink.h"
-#include "nsISupports.h"
-#include "nsRDFBaseDataSources.h"
-#include "nsRDFBuiltInDataSources.h"
-#include "nsRDFCID.h"
-#include "nsIComponentManager.h"
-#include "rdf.h"
-#include "nsIServiceManager.h"
-#include "nsILocalStore.h"
-#include "nsRDFXMLParser.h"
-#include "nsRDFXMLSerializer.h"
-
-//----------------------------------------------------------------------
-
-// Functions used to create new instances of a given object by the
-// generic factory.
-
-#define MAKE_CTOR(_func,_new,_ifname)                                \
-static nsresult                                                      \
-CreateNew##_func(nsISupports* aOuter, REFNSIID aIID, void **aResult) \
-{                                                                    \
-    if (!aResult) {                                                  \
-        return NS_ERROR_INVALID_POINTER;                             \
-    }                                                                \
-    if (aOuter) {                                                    \
-        *aResult = nullptr;                                           \
-        return NS_ERROR_NO_AGGREGATION;                              \
-    }                                                                \
-    nsI##_ifname* inst;                                              \
-    nsresult rv = NS_New##_new(&inst);                               \
-    if (NS_FAILED(rv)) {                                             \
-        *aResult = nullptr;                                           \
-        return rv;                                                   \
-    }                                                                \
-    rv = inst->QueryInterface(aIID, aResult);                        \
-    if (NS_FAILED(rv)) {                                             \
-        *aResult = nullptr;                                           \
-    }                                                                \
-    NS_RELEASE(inst);             /* get rid of extra refcnt */      \
-    return rv;                                                       \
-}
-
-extern nsresult
-NS_NewDefaultResource(nsIRDFResource** aResult);
-
-MAKE_CTOR(RDFXMLDataSource,RDFXMLDataSource,RDFDataSource)
-MAKE_CTOR(RDFCompositeDataSource,RDFCompositeDataSource,RDFCompositeDataSource)
-MAKE_CTOR(RDFContainer,RDFContainer,RDFContainer)
-
-MAKE_CTOR(RDFContainerUtils,RDFContainerUtils,RDFContainerUtils)
-
-MAKE_CTOR(RDFContentSink,RDFContentSink,RDFContentSink)
-MAKE_CTOR(RDFDefaultResource,DefaultResource,RDFResource)
-
-NS_DEFINE_NAMED_CID(NS_RDFCOMPOSITEDATASOURCE_CID);
-NS_DEFINE_NAMED_CID(NS_RDFINMEMORYDATASOURCE_CID);
-NS_DEFINE_NAMED_CID(NS_RDFXMLDATASOURCE_CID);
-NS_DEFINE_NAMED_CID(NS_RDFDEFAULTRESOURCE_CID);
-NS_DEFINE_NAMED_CID(NS_RDFCONTENTSINK_CID);
-NS_DEFINE_NAMED_CID(NS_RDFCONTAINER_CID);
-NS_DEFINE_NAMED_CID(NS_RDFCONTAINERUTILS_CID);
-NS_DEFINE_NAMED_CID(NS_RDFSERVICE_CID);
-NS_DEFINE_NAMED_CID(NS_RDFXMLPARSER_CID);
-NS_DEFINE_NAMED_CID(NS_RDFXMLSERIALIZER_CID);
-NS_DEFINE_NAMED_CID(NS_LOCALSTORE_CID);
-
-
-static const mozilla::Module::CIDEntry kRDFCIDs[] = {
-    { &kNS_RDFCOMPOSITEDATASOURCE_CID, false, nullptr, CreateNewRDFCompositeDataSource },
-    { &kNS_RDFINMEMORYDATASOURCE_CID, false, nullptr, NS_NewRDFInMemoryDataSource },
-    { &kNS_RDFXMLDATASOURCE_CID, false, nullptr, CreateNewRDFXMLDataSource },
-    { &kNS_RDFDEFAULTRESOURCE_CID, false, nullptr, CreateNewRDFDefaultResource },
-    { &kNS_RDFCONTENTSINK_CID, false, nullptr, CreateNewRDFContentSink },
-    { &kNS_RDFCONTAINER_CID, false, nullptr, CreateNewRDFContainer },
-    { &kNS_RDFCONTAINERUTILS_CID, false, nullptr, CreateNewRDFContainerUtils },
-    { &kNS_RDFSERVICE_CID, false, nullptr, RDFServiceImpl::CreateSingleton },
-    { &kNS_RDFXMLPARSER_CID, false, nullptr, nsRDFXMLParser::Create },
-    { &kNS_RDFXMLSERIALIZER_CID, false, nullptr, nsRDFXMLSerializer::Create },
-    { &kNS_LOCALSTORE_CID, false, nullptr, NS_NewLocalStore },
-    { nullptr }
-};
-
-static const mozilla::Module::ContractIDEntry kRDFContracts[] = {
-    { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "composite-datasource", &kNS_RDFCOMPOSITEDATASOURCE_CID },
-    { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "in-memory-datasource", &kNS_RDFINMEMORYDATASOURCE_CID },
-    { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "xml-datasource", &kNS_RDFXMLDATASOURCE_CID },
-    { NS_RDF_RESOURCE_FACTORY_CONTRACTID, &kNS_RDFDEFAULTRESOURCE_CID },
-    { NS_RDF_CONTRACTID "/content-sink;1", &kNS_RDFCONTENTSINK_CID },
-    { NS_RDF_CONTRACTID "/container;1", &kNS_RDFCONTAINER_CID },
-    { NS_RDF_CONTRACTID "/container-utils;1", &kNS_RDFCONTAINERUTILS_CID },
-    { NS_RDF_CONTRACTID "/rdf-service;1", &kNS_RDFSERVICE_CID },
-    { NS_RDF_CONTRACTID "/xml-parser;1", &kNS_RDFXMLPARSER_CID },
-    { NS_RDF_CONTRACTID "/xml-serializer;1", &kNS_RDFXMLSERIALIZER_CID },
-    { NS_LOCALSTORE_CONTRACTID, &kNS_LOCALSTORE_CID },
-    { nullptr }
-};
-
-static const mozilla::Module kRDFModule = {
-    mozilla::Module::kVersion,
-    kRDFCIDs,
-    kRDFContracts,
-    nullptr,
-    nullptr,
-    nullptr,
-    nullptr
-};
-
-NSMODULE_DEFN(nsRDFModule) = &kRDFModule;
deleted file mode 100644
--- a/rdf/datasource/moz.build
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-EXPORTS += [
-    'nsILocalStore.h',
-]
-
-UNIFIED_SOURCES += [
-    'nsLocalStore.cpp',
-]
-
-FINAL_LIBRARY = 'xul'
-
-# "This is a dependency on rdfutil.h: it'll go away once that becomes
-# a first-class XPCOM interface."
-LOCAL_INCLUDES += [
-    '/rdf/base',
-]
deleted file mode 100644
--- a/rdf/datasource/nsILocalStore.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef nsILocalStore_h__
-#define nsILocalStore_h__
-
-#include "rdf.h"
-#include "nsISupports.h"
-
-// {DF71C6F1-EC53-11d2-BDCA-000064657374}
-#define NS_ILOCALSTORE_IID \
-{ 0xdf71c6f1, 0xec53, 0x11d2, { 0xbd, 0xca, 0x0, 0x0, 0x64, 0x65, 0x73, 0x74 } }
-
-// {DF71C6F0-EC53-11d2-BDCA-000064657374}
-#define NS_LOCALSTORE_CID \
-{ 0xdf71c6f0, 0xec53, 0x11d2, { 0xbd, 0xca, 0x0, 0x0, 0x64, 0x65, 0x73, 0x74 } }
-
-#define NS_LOCALSTORE_CONTRACTID NS_RDF_DATASOURCE_CONTRACTID_PREFIX "local-store"
-
-class nsILocalStore : public nsISupports
-{
-public:
-    NS_DECLARE_STATIC_IID_ACCESSOR(NS_ILOCALSTORE_IID)
-};
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsILocalStore, NS_ILOCALSTORE_IID)
-
-extern nsresult
-NS_NewLocalStore(nsISupports* aOuter, REFNSIID aIID, void** aResult);
-
-
-#endif // nsILocalStore_h__
deleted file mode 100644
--- a/rdf/datasource/nsIRDFFTP.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef	nsIRDFFTP_h__
-#define	nsIRDFFTP_h__
-
-#include "nscore.h"
-#include "nsISupports.h"
-#include "nsIRDFNode.h"
-
-
-
-#define NS_IRDFFTPDATAOURCE_IID \
-{ 0x1222e6f0, 0xa5e3, 0x11d2, { 0x8b, 0x7c, 0x00, 0x80, 0x5f, 0x8a, 0x7d, 0xb7 } }
-
-class nsIRDFFTPDataSource : public nsIRDFDataSource
-{
-public:
-};
-
-
-#define NS_IRDFFTPDATASOURCECALLBACK_IID \
-{ 0x204a1a00, 0xa5e4, 0x11d2, { 0x8b, 0x7c, 0x00, 0x80, 0x5f, 0x8a, 0x7d, 0xb8 } }
-
-class nsIRDFFTPDataSourceCallback : public nsIStreamListener
-{
-public:
-};
-
-
-#endif // nsIRDFFTP_h__
deleted file mode 100644
--- a/rdf/datasource/nsLocalStore.cpp
+++ /dev/null
@@ -1,474 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* vim: set cindent tabstop=4 expandtab shiftwidth=4: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  Implementation for the local store
-
- */
-
-#include "nsNetUtil.h"
-#include "nsIFile.h"
-#include "nsIURI.h"
-#include "nsIIOService.h"
-#include "nsIOutputStream.h"
-#include "nsIComponentManager.h"
-#include "nsILocalStore.h"
-#include "nsIRDFDataSource.h"
-#include "nsIRDFRemoteDataSource.h"
-#include "nsIRDFService.h"
-#include "nsIServiceManager.h"
-#include "nsRDFCID.h"
-#include "nsString.h"
-#include "plstr.h"
-#include "rdf.h"
-#include "nsCOMPtr.h"
-#include "nsWeakPtr.h"
-#include "nsAppDirectoryServiceDefs.h"
-#include "nsIObserver.h"
-#include "nsIObserverService.h"
-#include "nsWeakReference.h"
-#include "nsCRTGlue.h"
-#include "nsCRT.h"
-#include "nsEnumeratorUtils.h"
-#include "nsCycleCollectionParticipant.h"
-
-////////////////////////////////////////////////////////////////////////
-
-class LocalStoreImpl : public nsILocalStore,
-                       public nsIRDFDataSource,
-                       public nsIRDFRemoteDataSource,
-                       public nsIObserver,
-                       public nsSupportsWeakReference
-{
-protected:
-    nsCOMPtr<nsIRDFDataSource> mInner;
-
-    LocalStoreImpl();
-    virtual ~LocalStoreImpl();
-    nsresult Init();
-    nsresult CreateLocalStore(nsIFile* aFile);
-    nsresult LoadData();
-
-    friend nsresult
-    NS_NewLocalStore(nsISupports* aOuter, REFNSIID aIID, void** aResult);
-
-    nsCOMPtr<nsIRDFService>    mRDFService;
-
-public:
-    // nsISupports interface
-    NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-    NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(LocalStoreImpl, nsILocalStore)
-
-    // nsILocalStore interface
-
-    // nsIRDFDataSource interface. Most of these are just delegated to
-    // the inner, in-memory datasource.
-    NS_IMETHOD GetURI(nsACString& aURI) override;
-
-    NS_IMETHOD GetSource(nsIRDFResource* aProperty,
-                         nsIRDFNode* aTarget,
-                         bool aTruthValue,
-                         nsIRDFResource** aSource) override {
-        return mInner->GetSource(aProperty, aTarget, aTruthValue, aSource);
-    }
-
-    NS_IMETHOD GetSources(nsIRDFResource* aProperty,
-                          nsIRDFNode* aTarget,
-                          bool aTruthValue,
-                          nsISimpleEnumerator** aSources) override {
-        return mInner->GetSources(aProperty, aTarget, aTruthValue, aSources);
-    }
-
-    NS_IMETHOD GetTarget(nsIRDFResource* aSource,
-                         nsIRDFResource* aProperty,
-                         bool aTruthValue,
-                         nsIRDFNode** aTarget) override {
-        return mInner->GetTarget(aSource, aProperty, aTruthValue, aTarget);
-    }
-
-    NS_IMETHOD GetTargets(nsIRDFResource* aSource,
-                          nsIRDFResource* aProperty,
-                          bool aTruthValue,
-                          nsISimpleEnumerator** aTargets) override {
-        return mInner->GetTargets(aSource, aProperty, aTruthValue, aTargets);
-    }
-
-    NS_IMETHOD Assert(nsIRDFResource* aSource,
-                      nsIRDFResource* aProperty,
-                      nsIRDFNode* aTarget,
-                      bool aTruthValue) override {
-        return mInner->Assert(aSource, aProperty, aTarget, aTruthValue);
-    }
-
-    NS_IMETHOD Unassert(nsIRDFResource* aSource,
-                        nsIRDFResource* aProperty,
-                        nsIRDFNode* aTarget) override {
-        return mInner->Unassert(aSource, aProperty, aTarget);
-    }
-
-    NS_IMETHOD Change(nsIRDFResource* aSource,
-                      nsIRDFResource* aProperty,
-                      nsIRDFNode* aOldTarget,
-                      nsIRDFNode* aNewTarget) override {
-        return mInner->Change(aSource, aProperty, aOldTarget, aNewTarget);
-    }
-
-    NS_IMETHOD Move(nsIRDFResource* aOldSource,
-                    nsIRDFResource* aNewSource,
-                    nsIRDFResource* aProperty,
-                    nsIRDFNode* aTarget) override {
-        return mInner->Move(aOldSource, aNewSource, aProperty, aTarget);
-    }
-
-    NS_IMETHOD HasAssertion(nsIRDFResource* aSource,
-                            nsIRDFResource* aProperty,
-                            nsIRDFNode* aTarget,
-                            bool aTruthValue,
-                            bool* hasAssertion) override {
-        return mInner->HasAssertion(aSource, aProperty, aTarget, aTruthValue, hasAssertion);
-    }
-
-    NS_IMETHOD AddObserver(nsIRDFObserver* aObserver) override {
-        return NS_ERROR_NOT_IMPLEMENTED;
-    }
-
-    NS_IMETHOD RemoveObserver(nsIRDFObserver* aObserver) override {
-        return NS_ERROR_NOT_IMPLEMENTED;
-    }
-
-    NS_IMETHOD HasArcIn(nsIRDFNode *aNode, nsIRDFResource *aArc, bool *_retval) override {
-        return mInner->HasArcIn(aNode, aArc, _retval);
-    }
-
-    NS_IMETHOD HasArcOut(nsIRDFResource *aSource, nsIRDFResource *aArc, bool *_retval) override {
-        return mInner->HasArcOut(aSource, aArc, _retval);
-    }
-
-    NS_IMETHOD ArcLabelsIn(nsIRDFNode* aNode,
-                           nsISimpleEnumerator** aLabels) override {
-        return mInner->ArcLabelsIn(aNode, aLabels);
-    }
-
-    NS_IMETHOD ArcLabelsOut(nsIRDFResource* aSource,
-                            nsISimpleEnumerator** aLabels) override {
-        return mInner->ArcLabelsOut(aSource, aLabels);
-    }
-
-    NS_IMETHOD GetAllResources(nsISimpleEnumerator** aResult) override {
-        return mInner->GetAllResources(aResult);
-    }
-
-    NS_IMETHOD GetAllCmds(nsIRDFResource* aSource,
-                              nsISimpleEnumerator/*<nsIRDFResource>*/** aCommands) override;
-
-    NS_IMETHOD IsCommandEnabled(nsISupports* aSources,
-                                nsIRDFResource*   aCommand,
-                                nsISupports* aArguments,
-                                bool* aResult) override;
-
-    NS_IMETHOD DoCommand(nsISupports* aSources,
-                         nsIRDFResource*   aCommand,
-                         nsISupports* aArguments) override;
-
-    NS_IMETHOD BeginUpdateBatch() override {
-        return mInner->BeginUpdateBatch();
-    }
-
-    NS_IMETHOD EndUpdateBatch() override {
-        return mInner->EndUpdateBatch();
-    }
-
-    NS_IMETHOD GetLoaded(bool* _result) override;
-    NS_IMETHOD Init(const char *uri) override;
-    NS_IMETHOD Flush() override;
-    NS_IMETHOD FlushTo(const char *aURI) override;
-    NS_IMETHOD Refresh(bool sync) override;
-
-    // nsIObserver
-    NS_DECL_NSIOBSERVER
-};
-
-////////////////////////////////////////////////////////////////////////
-
-
-LocalStoreImpl::LocalStoreImpl(void)
-{
-}
-
-LocalStoreImpl::~LocalStoreImpl(void)
-{
-    if (mRDFService)
-        mRDFService->UnregisterDataSource(this);
-}
-
-
-nsresult
-NS_NewLocalStore(nsISupports* aOuter, REFNSIID aIID, void** aResult)
-{
-    NS_PRECONDITION(aOuter == nullptr, "no aggregation");
-    if (aOuter)
-        return NS_ERROR_NO_AGGREGATION;
-
-    NS_PRECONDITION(aResult != nullptr, "null ptr");
-    if (! aResult)
-        return NS_ERROR_NULL_POINTER;
-
-    LocalStoreImpl* impl = new LocalStoreImpl();
-    if (! impl)
-        return NS_ERROR_OUT_OF_MEMORY;
-
-    NS_ADDREF(impl);
-
-    nsresult rv;
-    rv = impl->Init();
-    if (NS_SUCCEEDED(rv)) {
-        // Set up the result pointer
-        rv = impl->QueryInterface(aIID, aResult);
-    }
-
-    NS_RELEASE(impl);
-    return rv;
-}
-
-NS_IMPL_CYCLE_COLLECTION(LocalStoreImpl, mInner)
-NS_IMPL_CYCLE_COLLECTING_ADDREF(LocalStoreImpl)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(LocalStoreImpl)
-
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(LocalStoreImpl)
-    NS_INTERFACE_MAP_ENTRY(nsILocalStore)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIRDFRemoteDataSource)
-    NS_INTERFACE_MAP_ENTRY(nsIObserver)
-    NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
-    NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsILocalStore)
-NS_INTERFACE_MAP_END
-
-// nsILocalStore interface
-
-// nsIRDFDataSource interface
-
-NS_IMETHODIMP
-LocalStoreImpl::GetLoaded(bool* _result)
-{
-	nsCOMPtr<nsIRDFRemoteDataSource> remote = do_QueryInterface(mInner);
-    NS_ASSERTION(remote != nullptr, "not an nsIRDFRemoteDataSource");
-	if (! remote)
-        return NS_ERROR_UNEXPECTED;
-
-    return remote->GetLoaded(_result);
-}
-
-
-NS_IMETHODIMP
-LocalStoreImpl::Init(const char *uri)
-{
-	return(NS_OK);
-}
-
-NS_IMETHODIMP
-LocalStoreImpl::Flush()
-{
-	nsCOMPtr<nsIRDFRemoteDataSource> remote = do_QueryInterface(mInner);
-    // FIXME Bug 340242: Temporarily make this a warning rather than an
-    // assertion until we sort out the ordering of how we write
-    // everything to the localstore, flush it, and disconnect it when
-    // we're getting profile-change notifications.
-    NS_WARNING_ASSERTION(remote != nullptr, "not an nsIRDFRemoteDataSource");
-	if (! remote)
-        return NS_ERROR_UNEXPECTED;
-
-    return remote->Flush();
-}
-
-NS_IMETHODIMP
-LocalStoreImpl::FlushTo(const char *aURI)
-{
-  // Do not ever implement this (security)
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-LocalStoreImpl::Refresh(bool sync)
-{
-	nsCOMPtr<nsIRDFRemoteDataSource> remote = do_QueryInterface(mInner);
-    NS_ASSERTION(remote != nullptr, "not an nsIRDFRemoteDataSource");
-	if (! remote)
-        return NS_ERROR_UNEXPECTED;
-
-    return remote->Refresh(sync);
-}
-
-nsresult
-LocalStoreImpl::Init()
-{
-    nsresult rv;
-
-    rv = LoadData();
-    if (NS_FAILED(rv)) return rv;
-
-    // register this as a named data source with the RDF service
-    mRDFService = do_GetService(NS_RDF_CONTRACTID "/rdf-service;1", &rv);
-    if (NS_FAILED(rv)) return rv;
-
-    mRDFService->RegisterDataSource(this, false);
-
-    // Register as an observer of profile changes
-    nsCOMPtr<nsIObserverService> obs =
-        do_GetService("@mozilla.org/observer-service;1");
-
-    if (obs) {
-        obs->AddObserver(this, "profile-before-change", true);
-        obs->AddObserver(this, "profile-do-change", true);
-    }
-
-    return NS_OK;
-}
-
-nsresult
-LocalStoreImpl::CreateLocalStore(nsIFile* aFile)
-{
-    nsresult rv;
-
-    rv = aFile->Create(nsIFile::NORMAL_FILE_TYPE, 0666);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIOutputStream> outStream;
-    rv = NS_NewLocalFileOutputStream(getter_AddRefs(outStream), aFile);
-    if (NS_FAILED(rv)) return rv;
-
-    const char defaultRDF[] =
-        "<?xml version=\"1.0\"?>\n" \
-        "<RDF:RDF xmlns:RDF=\"" RDF_NAMESPACE_URI "\"\n" \
-        "         xmlns:NC=\""  NC_NAMESPACE_URI "\">\n" \
-        "  <!-- Empty -->\n" \
-        "</RDF:RDF>\n";
-
-    uint32_t count;
-    rv = outStream->Write(defaultRDF, sizeof(defaultRDF)-1, &count);
-    if (NS_FAILED(rv)) return rv;
-
-    if (count != sizeof(defaultRDF)-1)
-        return NS_ERROR_UNEXPECTED;
-
-    // Okay, now see if the file exists _for real_. If it's still
-    // not there, it could be that the profile service gave us
-    // back a read-only directory. Whatever.
-    bool fileExistsFlag = false;
-    aFile->Exists(&fileExistsFlag);
-    if (!fileExistsFlag)
-        return NS_ERROR_UNEXPECTED;
-
-    return NS_OK;
-}
-
-nsresult
-LocalStoreImpl::LoadData()
-{
-    nsresult rv;
-
-    // Look for localstore.rdf in the current profile
-    // directory. Bomb if we can't find it.
-
-    nsCOMPtr<nsIFile> aFile;
-    rv = NS_GetSpecialDirectory(NS_APP_LOCALSTORE_50_FILE, getter_AddRefs(aFile));
-    if (NS_FAILED(rv)) return rv;
-
-    bool fileExistsFlag = false;
-    (void)aFile->Exists(&fileExistsFlag);
-    if (!fileExistsFlag) {
-        // if file doesn't exist, create it
-        rv = CreateLocalStore(aFile);
-        if (NS_FAILED(rv)) return rv;
-    }
-
-    mInner = do_CreateInstance(NS_RDF_DATASOURCE_CONTRACTID_PREFIX "xml-datasource", &rv);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIRDFRemoteDataSource> remote = do_QueryInterface(mInner, &rv);
-    if (NS_FAILED(rv)) return rv;
-
-    nsCOMPtr<nsIURI> aURI;
-    rv = NS_NewFileURI(getter_AddRefs(aURI), aFile);
-    if (NS_FAILED(rv)) return rv;
-
-    nsAutoCString spec;
-    rv = aURI->GetSpec(spec);
-    if (NS_FAILED(rv)) return rv;
-
-    rv = remote->Init(spec.get());
-    if (NS_FAILED(rv)) return rv;
-
-    // Read the datasource synchronously.
-    rv = remote->Refresh(true);
-
-    if (NS_FAILED(rv)) {
-        // Load failed, delete and recreate a fresh localstore
-        aFile->Remove(true);
-        rv = CreateLocalStore(aFile);
-        if (NS_FAILED(rv)) return rv;
-
-        rv = remote->Refresh(true);
-    }
-
-    return rv;
-}
-
-
-NS_IMETHODIMP
-LocalStoreImpl::GetURI(nsACString& aURI)
-{
-    aURI.AssignLiteral("rdf:local-store");
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-LocalStoreImpl::GetAllCmds(nsIRDFResource* aSource,
-                               nsISimpleEnumerator/*<nsIRDFResource>*/** aCommands)
-{
-	return(NS_NewEmptyEnumerator(aCommands));
-}
-
-NS_IMETHODIMP
-LocalStoreImpl::IsCommandEnabled(nsISupports* aSources,
-                                 nsIRDFResource*   aCommand,
-                                 nsISupports* aArguments,
-                                 bool* aResult)
-{
-    return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-LocalStoreImpl::DoCommand(nsISupports* aSources,
-                          nsIRDFResource*   aCommand,
-                          nsISupports* aArguments)
-{
-    return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-LocalStoreImpl::Observe(nsISupports *aSubject, const char *aTopic, const char16_t *someData)
-{
-    nsresult rv = NS_OK;
-
-    if (!nsCRT::strcmp(aTopic, "profile-before-change")) {
-        // Write out the old datasource's contents.
-        if (mInner) {
-            nsCOMPtr<nsIRDFRemoteDataSource> remote = do_QueryInterface(mInner);
-            if (remote)
-                remote->Flush();
-        }
-
-        // Create an in-memory datasource for use while we're
-        // profile-less.
-        mInner = do_CreateInstance(NS_RDF_DATASOURCE_CONTRACTID_PREFIX "in-memory-datasource");
-    }
-    else if (!nsCRT::strcmp(aTopic, "profile-do-change")) {
-        rv = LoadData();
-    }
-    return rv;
-}
deleted file mode 100644
--- a/rdf/datasource/nsRDFBuiltInDataSources.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/*
-
-  This header file just contains prototypes for the factory methods
-  for "builtin" data sources that are included in rdf.dll.
-
-  Each of these data sources is exposed to the external world via its
-  CID in ../include/nsRDFCID.h.
-
- */
-
-#ifndef nsBuiltinDataSources_h__
-#define nsBuiltinDataSources_h__
-
-#include "nsError.h"
-
-class nsIRDFDataSource;
-
-// in nsFileSystemDataSource.cpp
-nsresult NS_NewRDFFileSystemDataSource(nsIRDFDataSource** result);
-
-#endif // nsBuiltinDataSources_h__
-
deleted file mode 100644
--- a/rdf/moz.build
+++ /dev/null
@@ -1,12 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-with Files('**'):
-    BUG_COMPONENT = ('Core', 'RDF')
-
-DIRS += ['base', 'datasource', 'build']
-TEST_DIRS += ['tests']
-
deleted file mode 100644
--- a/rdf/tests/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-XPCSHELL_TESTS_MANIFESTS += ['unit/xpcshell.ini']
deleted file mode 100755
--- a/rdf/tests/unit/sample.rdf
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:dc="http://purl.org/dc/elements/1.1/">
-
-  <rdf:Description about="urn:mozilla:sample-data"
-    dc:title="Sample" />
-
-</rdf:RDF>
deleted file mode 100644
--- a/rdf/tests/unit/test_rdfredirect.js
+++ /dev/null
@@ -1,92 +0,0 @@
-ChromeUtils.import("resource://testing-common/httpd.js");
-
-function getRDFService()
-{
-  return Cc["@mozilla.org/rdf/rdf-service;1"].
-    getService(Ci.nsIRDFService);
-}
-
-var server1, server2;
-
-function run_test()
-{
-  var samplefile = do_get_file('sample.rdf');
-
-  server1 = new HttpServer();
-  server1.registerPathHandler("/sample-xs.rdf", xsRedirect);
-  server1.registerPathHandler("/sample-local.rdf", localRedirect);
-  server1.registerFile('/sample.rdf', samplefile);
-  server1.start(4444);
-
-  server2 = new HttpServer();
-  server2.registerFile('/sample.rdf', samplefile);
-  server2.start(4445);
-
-  do_test_pending();
-
-  new rdfLoadObserver('http://localhost:4444/sample.rdf', true);
-  new rdfLoadObserver('http://localhost:4445/sample.rdf', true);
-  new rdfLoadObserver('http://localhost:4444/sample-xs.rdf', false);
-  new rdfLoadObserver('http://localhost:4444/sample-local.rdf', true);
-}
-
-var gPending = 0;
-
-function rdfLoadObserver(uri, shouldPass)
-{
-  this.shouldPass = shouldPass;
-  this.uri = uri;
-
-  ++gPending;
-
-  var rdfService = getRDFService();
-  this.ds = rdfService.GetDataSource(uri).
-    QueryInterface(Ci.nsIRDFXMLSink);
-  this.ds.addXMLSinkObserver(this);
-}
-
-rdfLoadObserver.prototype =
-{
-  onBeginLoad : function() { },
-  onInterrupt : function() { },
-  onResume : function() { },
-  onEndLoad : function() {
-    print("Testing results of loading " + this.uri);
-
-    var rdfs = getRDFService();
-    var res = rdfs.GetResource("urn:mozilla:sample-data");
-    var arc = rdfs.GetResource("http://purl.org/dc/elements/1.1/title");
-    var answer = this.ds.GetTarget(res, arc, true);
-    if (answer !== null) {
-      Assert.ok(this.shouldPass);
-      Assert.ok(answer instanceof Ci.nsIRDFLiteral);
-      Assert.equal(answer.Value, "Sample");
-    }
-    else {
-      Assert.ok(!this.shouldPass);
-    }
-
-    gPending -= 1;
-
-    this.ds.removeXMLSinkObserver(this);
-
-    if (gPending == 0) {
-      do_test_pending();
-      server1.stop(do_test_finished);
-      server2.stop(do_test_finished);
-    }
-  },
-  onError : function() { }
-}
-
-function xsRedirect(metadata, response)
-{
-  response.setStatusLine(metadata.httpVersion, 301, "Moved Permanently");
-  response.setHeader("Location", "http://localhost:4445/sample.rdf", false);
-}
-
-function localRedirect(metadata, response)
-{
-  response.setStatusLine(metadata.httpVersion, 301, "Moved Permanently");
-  response.setHeader("Location", "http://localhost:4444/sample.rdf", false);
-}
deleted file mode 100644
--- a/rdf/tests/unit/xpcshell.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[DEFAULT]
-head =
-support-files = sample.rdf
-
-[test_rdfredirect.js]
--- a/toolkit/components/build/nsToolkitCompsModule.cpp
+++ b/toolkit/components/build/nsToolkitCompsModule.cpp
@@ -15,17 +15,16 @@
 #if !defined(MOZ_DISABLE_PARENTAL_CONTROLS)
 #include "nsParentalControlsService.h"
 #endif
 
 #include "mozilla/AlertNotification.h"
 #include "nsAlertsService.h"
 
 #include "DownloadPlatform.h"
-#include "rdf.h"
 
 #include "nsTypeAheadFind.h"
 
 #include "ApplicationReputation.h"
 #include "LoginReputation.h"
 #include "nsUrlClassifierDBService.h"
 #include "nsUrlClassifierStreamUpdater.h"
 #include "nsUrlClassifierUtils.h"
--- a/toolkit/toolkit.mozbuild
+++ b/toolkit/toolkit.mozbuild
@@ -83,20 +83,16 @@ if CONFIG['COMPILE_ENVIRONMENT']:
         '/media/libyuv',
     ]
 
 DIRS += [
     '/extensions/cookie',
     '/extensions/permissions',
 ]
 
-DIRS += [
-    '/rdf',
-]
-
 if CONFIG['MOZ_WEBRTC'] and CONFIG['COMPILE_ENVIRONMENT']:
     DIRS += [
         '/media/webrtc',
         '/media/mtransport',
     ]
 
 if CONFIG['ENABLE_TESTS']:
     DIRS += ['/testing/specialpowers']