/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: NPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Netscape Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Communicator client code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Pierre Phaneuf * * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the NPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the NPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsXBLAtoms.h" // to addref/release table #include "nsCSSPseudoElements.h" // to addref/release table #include "nsCSSPseudoClasses.h" // to addref/release table #include "nsCSSAnonBoxes.h" // to addref/release table #include "nsCSSKeywords.h" // to addref/release table #include "nsCSSProps.h" // to addref/release table #include "nsColorNames.h" // to addref/release table #include "nsContentCID.h" #include "nsContentHTTPStartup.h" #include "nsContentDLF.h" #include "nsContentPolicyUtils.h" #include "nsContentUtils.h" #include "nsDOMCID.h" #include "nsCSSOMFactory.h" #include "nsInspectorCSSUtils.h" #include "nsEventStateManager.h" #include "nsEventListenerManager.h" #include "nsGenericElement.h" #include "nsGenericDOMDataNode.h" #include "nsHTMLAtoms.h" #include "nsHTMLAtoms.h" #include "nsHTMLContentSerializer.h" #include "nsGenericHTMLElement.h" #include "nsIBindingManager.h" #include "nsICSSLoader.h" #include "nsICSSParser.h" #include "nsICSSStyleSheet.h" #include "nsICategoryManager.h" #include "nsIComponentManager.h" #include "nsIComputedDOMStyle.h" #include "nsIContentIterator.h" #include "nsIContentSerializer.h" #include "nsIController.h" #include "nsIControllers.h" #include "nsIDOMDOMImplementation.h" #include "nsIDOMEventGroup.h" #include "nsIDOMRange.h" #include "nsIDocument.h" #include "nsIDocumentEncoder.h" #include "nsIDocumentViewer.h" #include "nsIElementFactory.h" #include "nsIEventListenerManager.h" #include "nsIFactory.h" #include "nsIFrameSelection.h" #include "nsIFrameUtil.h" #include "nsIGenericFactory.h" #include "nsHTMLAttributes.h" #include "nsIHTMLCSSStyleSheet.h" #include "nsIHTMLContent.h" #include "nsIHTMLFragmentContentSink.h" #include "nsIHTMLStyleSheet.h" #include "nsIHTMLToTextSink.h" #include "nsILayoutDebugger.h" #include "nsINameSpaceManager.h" #include "nsINodeInfo.h" #include "nsIObserver.h" #include "nsIObserverService.h" #include "nsIPresContext.h" #include "nsIPresShell.h" #include "nsIPrivateDOMImplementation.h" #include "nsIRangeUtils.h" #include "nsIScriptNameSpaceManager.h" #include "nsISelection.h" #include "nsITextContent.h" #include "nsIXBLService.h" #include "nsIFrameLoader.h" #include "nsLayoutAtoms.h" #include "nsPlainTextSerializer.h" #include "mozSanitizingSerializer.h" #include "nsRange.h" #include "nsComputedDOMStyle.h" #include "nsXMLContentSerializer.h" #include "nsRuleNode.h" #include "nsWyciwygProtocolHandler.h" #include "nsContentAreaDragDrop.h" #include "nsContentList.h" #include "nsISyncLoadDOMService.h" #include "nsCSSFrameConstructor.h" #include "nsRepeatService.h" #include "nsSprocketLayout.h" #include "nsStackLayout.h" #include "nsBox.h" #include "nsSpaceManager.h" #include "nsTextControlFrame.h" #include "nsTextTransformer.h" #include "nsIFrameTraversal.h" #include "nsISelectionImageService.h" #include "nsIPrintContext.h" #include "nsIAutoCopy.h" #include "nsIPrintPreviewContext.h" class nsIDocumentLoaderFactory; #define PRODUCT_NAME "Gecko" #define NS_HTMLIMGELEMENT_CONTRACTID \ "@mozilla.org/content/element/html;1?name=img" #define NS_HTMLOPTIONELEMENT_CONTRACTID \ "@mozilla.org/content/element/html;1?name=option" #ifdef MOZ_XUL #include "nsIXULContentSink.h" #include "nsIXULDocument.h" #include "nsIXULPopupListener.h" #include "nsIXULPrototypeCache.h" #include "nsIXULPrototypeDocument.h" #include "nsIXULPrototypeDocument.h" #include "nsIXULSortService.h" #include "nsXULAtoms.h" #include "nsXULContentUtils.h" #include "nsXULElement.h" extern NS_IMETHODIMP NS_NewXULContentBuilder(nsISupports* aOuter, REFNSIID aIID, void** aResult); extern NS_IMETHODIMP NS_NewXULTreeBuilder(nsISupports* aOuter, REFNSIID aIID, void** aResult); #endif #ifdef MOZ_MATHML #include "nsMathMLAtoms.h" #include "nsMathMLOperators.h" #endif #ifdef MOZ_SVG #include "nsSVGAtoms.h" #endif // jst says, ``we need this to avoid holding on to XPConnect past its // destruction. By being an XPCOM shutdown observer we can make sure // we release the content global reference to XPConnect before // XPConnect is shutdown, which cuts down on leaks n' whatnot...'' class ContentShutdownObserver : public nsIObserver { public: ContentShutdownObserver() { NS_INIT_ISUPPORTS(); } NS_DECL_ISUPPORTS NS_DECL_NSIOBSERVER }; NS_IMPL_ISUPPORTS1(ContentShutdownObserver, nsIObserver) NS_IMETHODIMP ContentShutdownObserver::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *someData) { if (!nsCRT::strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID)) nsContentUtils::Shutdown(); return NS_OK; } static PRBool gInitialized = PR_FALSE; // Perform our one-time intialization for this module PR_STATIC_CALLBACK(nsresult) Initialize(nsIModule* aSelf) { static PRBool initializing = PR_FALSE; NS_PRECONDITION(!gInitialized || initializing, "module already initialized"); if (gInitialized) return NS_OK; initializing = PR_TRUE; gInitialized = PR_TRUE; nsContentUtils::Init(); // Register all of our atoms once nsCSSAnonBoxes::AddRefAtoms(); nsCSSPseudoClasses::AddRefAtoms(); nsCSSPseudoElements::AddRefAtoms(); nsCSSKeywords::AddRefTable(); nsCSSProps::AddRefTable(); nsColorNames::AddRefTable(); nsHTMLAtoms::AddRefAtoms(); nsXBLAtoms::AddRefAtoms(); nsLayoutAtoms::AddRefAtoms(); #ifdef MOZ_XUL nsXULAtoms::AddRefAtoms(); nsXULContentUtils::Init(); #endif #ifdef MOZ_MATHML nsMathMLOperators::AddRefTable(); nsMathMLAtoms::AddRefAtoms(); #endif #ifdef MOZ_SVG nsSVGAtoms::AddRefAtoms(); #endif nsCSSFrameConstructor::InitGlobals(); nsTextTransformer::Initialize(); // Add our shutdown observer. nsCOMPtr observerService = do_GetService("@mozilla.org/observer-service;1"); if (observerService) { ContentShutdownObserver* observer = new ContentShutdownObserver(); if (observer) observerService->AddObserver(observer, NS_XPCOM_SHUTDOWN_OBSERVER_ID, PR_FALSE); } initializing = PR_FALSE; return NS_OK; } // Shutdown this module, releasing all of the module resources PR_STATIC_CALLBACK(void) Shutdown(nsIModule* aSelf) { NS_PRECONDITION(gInitialized, "module not initialized"); if (! gInitialized) return; gInitialized = PR_FALSE; nsRange::Shutdown(); nsGenericElement::Shutdown(); nsGenericDOMDataNode::Shutdown(); nsEventListenerManager::Shutdown(); nsContentList::Shutdown(); nsComputedDOMStyle::Shutdown(); // Release all of our atoms nsColorNames::ReleaseTable(); nsCSSProps::ReleaseTable(); nsCSSKeywords::ReleaseTable(); nsCSSAnonBoxes::ReleaseAtoms(); nsCSSPseudoClasses::ReleaseAtoms(); nsCSSPseudoElements::ReleaseAtoms(); nsHTMLAtoms::ReleaseAtoms(); nsXBLAtoms::ReleaseAtoms(); nsLayoutAtoms::ReleaseAtoms(); #ifdef MOZ_XUL nsXULContentUtils::Finish(); nsXULAtoms::ReleaseAtoms(); nsXULElement::ReleaseGlobals(); nsXULPrototypeElement::ReleaseGlobals(); nsXULPrototypeScript::ReleaseGlobals(); nsRepeatService::Shutdown(); nsSprocketLayout::Shutdown(); nsStackLayout::Shutdown(); nsBox::Shutdown(); #endif #ifdef MOZ_MATHML nsMathMLOperators::ReleaseTable(); nsMathMLAtoms::ReleaseAtoms(); #endif #ifdef MOZ_SVG nsSVGAtoms::ReleaseAtoms(); #endif nsCSSFrameConstructor::ReleaseGlobals(); nsTextTransformer::Shutdown(); nsSpaceManager::Shutdown(); nsTextControlFrame::ReleaseGlobals(); NS_IF_RELEASE(nsContentDLF::gUAStyleSheet); NS_IF_RELEASE(nsRuleNode::gLangService); nsGenericHTMLElement::Shutdown(); nsContentUtils::Shutdown(); NS_NameSpaceManagerShutdown(); } #ifdef NS_DEBUG extern nsresult NS_NewFrameUtil(nsIFrameUtil** aResult); extern nsresult NS_NewLayoutDebugger(nsILayoutDebugger** aResult); #endif extern nsresult NS_NewBoxObject(nsIBoxObject** aResult); extern nsresult NS_NewListBoxObject(nsIBoxObject** aResult); extern nsresult NS_NewScrollBoxObject(nsIBoxObject** aResult); extern nsresult NS_NewMenuBoxObject(nsIBoxObject** aResult); extern nsresult NS_NewEditorBoxObject(nsIBoxObject** aResult); extern nsresult NS_NewPopupBoxObject(nsIBoxObject** aResult); extern nsresult NS_NewBrowserBoxObject(nsIBoxObject** aResult); extern nsresult NS_NewIFrameBoxObject(nsIBoxObject** aResult); extern nsresult NS_NewTreeBoxObject(nsIBoxObject** aResult); extern nsresult NS_CreateFrameTraversal(nsIFrameTraversal** aResult); extern nsresult NS_CreateCSSFrameConstructor(nsICSSFrameConstructor** aResult); extern nsresult NS_NewLayoutHistoryState(nsILayoutHistoryState** aResult); extern nsresult NS_NewAutoCopyService(nsIAutoCopyService** aResult); extern nsresult NS_NewSelectionImageService(nsISelectionImageService** aResult); extern nsresult NS_NewSelection(nsIFrameSelection** aResult); extern nsresult NS_NewDomSelection(nsISelection** aResult); extern nsresult NS_NewDocumentViewer(nsIDocumentViewer** aResult); extern nsresult NS_NewRange(nsIDOMRange** aResult); extern nsresult NS_NewRangeUtils(nsIRangeUtils** aResult); extern nsresult NS_NewContentIterator(nsIContentIterator** aResult); extern nsresult NS_NewPreContentIterator(nsIContentIterator** aResult); extern nsresult NS_NewGenRegularIterator(nsIContentIterator** aResult); extern nsresult NS_NewContentSubtreeIterator(nsIContentIterator** aResult); extern nsresult NS_NewGenSubtreeIterator(nsIContentIterator** aInstancePtrResult); extern nsresult NS_NewContentDocumentLoaderFactory(nsIDocumentLoaderFactory** aResult); extern nsresult NS_NewHTMLElementFactory(nsIElementFactory** aResult); extern nsresult NS_NewXMLElementFactory(nsIElementFactory** aResult); extern nsresult NS_NewHTMLCopyTextEncoder(nsIDocumentEncoder** aResult); extern nsresult NS_NewTextEncoder(nsIDocumentEncoder** aResult); extern nsresult NS_NewXBLService(nsIXBLService** aResult); extern nsresult NS_NewBindingManager(nsIBindingManager** aResult); extern nsresult NS_NewNodeInfoManager(nsINodeInfoManager** aResult); extern nsresult NS_NewContentPolicy(nsIContentPolicy** aResult); extern nsresult NS_NewFrameLoader(nsIFrameLoader** aResult); extern nsresult NS_NewSyncLoadDOMService(nsISyncLoadDOMService** aResult); extern nsresult NS_NewDOMEventGroup(nsIDOMEventGroup** aResult); #ifdef MOZ_XUL extern nsresult NS_NewXULElementFactory(nsIElementFactory** aResult); extern NS_IMETHODIMP NS_NewXULControllers(nsISupports* aOuter, REFNSIID aIID, void** aResult); #endif #ifdef MOZ_MATHML extern nsresult NS_NewMathMLElementFactory(nsIElementFactory** aResult); #endif #ifdef MOZ_SVG extern nsresult NS_NewSVGElementFactory(nsIElementFactory** aResult); #endif #define MAKE_CTOR(ctor_, iface_, func_) \ static NS_IMETHODIMP \ ctor_(nsISupports* aOuter, REFNSIID aIID, void** aResult) \ { \ *aResult = nsnull; \ if (aOuter) \ return NS_ERROR_NO_AGGREGATION; \ iface_* inst; \ nsresult rv = func_(&inst); \ if (NS_SUCCEEDED(rv)) { \ rv = inst->QueryInterface(aIID, aResult); \ NS_RELEASE(inst); \ } \ return rv; \ } #ifdef DEBUG MAKE_CTOR(CreateNewFrameUtil, nsIFrameUtil, NS_NewFrameUtil) MAKE_CTOR(CreateNewLayoutDebugger, nsILayoutDebugger, NS_NewLayoutDebugger) #endif MAKE_CTOR(CreateNewCSSFrameConstructor, nsICSSFrameConstructor, NS_CreateCSSFrameConstructor) MAKE_CTOR(CreateNewFrameTraversal, nsIFrameTraversal, NS_CreateFrameTraversal) MAKE_CTOR(CreateNewLayoutHistoryState, nsILayoutHistoryState, NS_NewLayoutHistoryState) MAKE_CTOR(CreateNewPresShell, nsIPresShell, NS_NewPresShell) MAKE_CTOR(CreateNewPresState, nsIPresState, NS_NewPresState) MAKE_CTOR(CreateNewGalleyContext, nsIPresContext, NS_NewGalleyContext) MAKE_CTOR(CreateNewPrintContext, nsIPrintContext, NS_NewPrintContext) MAKE_CTOR(CreateNewPrintPreviewContext, nsIPrintPreviewContext, NS_NewPrintPreviewContext) MAKE_CTOR(CreateNewBoxObject, nsIBoxObject, NS_NewBoxObject) MAKE_CTOR(CreateNewListBoxObject, nsIBoxObject, NS_NewListBoxObject) MAKE_CTOR(CreateNewMenuBoxObject, nsIBoxObject, NS_NewMenuBoxObject) MAKE_CTOR(CreateNewPopupBoxObject, nsIBoxObject, NS_NewPopupBoxObject) MAKE_CTOR(CreateNewBrowserBoxObject, nsIBoxObject, NS_NewBrowserBoxObject) MAKE_CTOR(CreateNewEditorBoxObject, nsIBoxObject, NS_NewEditorBoxObject) MAKE_CTOR(CreateNewIFrameBoxObject, nsIBoxObject, NS_NewIFrameBoxObject) MAKE_CTOR(CreateNewScrollBoxObject, nsIBoxObject, NS_NewScrollBoxObject) MAKE_CTOR(CreateNewTreeBoxObject, nsIBoxObject, NS_NewTreeBoxObject) MAKE_CTOR(CreateNewAutoCopyService, nsIAutoCopyService, NS_NewAutoCopyService) MAKE_CTOR(CreateSelectionImageService, nsISelectionImageService,NS_NewSelectionImageService) MAKE_CTOR(CreateNameSpaceManager, nsINameSpaceManager, NS_GetNameSpaceManager) MAKE_CTOR(CreateEventListenerManager, nsIEventListenerManager, NS_NewEventListenerManager) MAKE_CTOR(CreateEventStateManager, nsIEventStateManager, NS_NewEventStateManager) MAKE_CTOR(CreateDOMEventGroup, nsIDOMEventGroup, NS_NewDOMEventGroup) MAKE_CTOR(CreateDocumentViewer, nsIDocumentViewer, NS_NewDocumentViewer) MAKE_CTOR(CreateHTMLStyleSheet, nsIHTMLStyleSheet, NS_NewHTMLStyleSheet) MAKE_CTOR(CreateStyleSet, nsIStyleSet, NS_NewStyleSet) MAKE_CTOR(CreateCSSStyleSheet, nsICSSStyleSheet, NS_NewCSSStyleSheet) MAKE_CTOR(CreateHTMLDocument, nsIDocument, NS_NewHTMLDocument) MAKE_CTOR(CreateHTMLCSSStyleSheet, nsIHTMLCSSStyleSheet, NS_NewHTMLCSSStyleSheet) MAKE_CTOR(CreateDOMImplementation, nsIDOMDOMImplementation, NS_NewDOMImplementation) MAKE_CTOR(CreateXMLDocument, nsIDocument, NS_NewXMLDocument) #ifdef MOZ_SVG MAKE_CTOR(CreateSVGDocument, nsIDocument, NS_NewSVGDocument) #endif MAKE_CTOR(CreateImageDocument, nsIDocument, NS_NewImageDocument) MAKE_CTOR(CreateCSSParser, nsICSSParser, NS_NewCSSParser) MAKE_CTOR(CreateCSSLoader, nsICSSLoader, NS_NewCSSLoader) MAKE_CTOR(CreateHTMLElementFactory, nsIElementFactory, NS_NewHTMLElementFactory) MAKE_CTOR(CreateTextNode, nsITextContent, NS_NewTextNode) //MAKE_CTOR(CreateAnonymousElement, nsIContent, NS_NewAnonymousElement) MAKE_CTOR(CreateAttributeContent, nsIContent, NS_NewAttributeContent) MAKE_CTOR(CreateXMLElementFactory, nsIElementFactory, NS_NewXMLElementFactory) //MAKE_CTOR(CreateSelection, nsISelection, NS_NewSelection) MAKE_CTOR(CreateDOMSelection, nsISelection, NS_NewDomSelection) MAKE_CTOR(CreateSelection, nsIFrameSelection, NS_NewSelection) MAKE_CTOR(CreateRange, nsIDOMRange, NS_NewRange) MAKE_CTOR(CreateRangeUtils, nsIRangeUtils, NS_NewRangeUtils) MAKE_CTOR(CreateContentIterator, nsIContentIterator, NS_NewContentIterator) MAKE_CTOR(CreatePreContentIterator, nsIContentIterator, NS_NewPreContentIterator) MAKE_CTOR(CreateGeneratedContentIterator, nsIContentIterator, NS_NewGenRegularIterator) MAKE_CTOR(CreateGeneratedSubtreeIterator, nsIContentIterator, NS_NewGenSubtreeIterator) MAKE_CTOR(CreateSubtreeIterator, nsIContentIterator, NS_NewContentSubtreeIterator) // CreateHTMLImgElement, see below // CreateHTMLOptionElement, see below MAKE_CTOR(CreateTextEncoder, nsIDocumentEncoder, NS_NewTextEncoder) MAKE_CTOR(CreateHTMLCopyTextEncoder, nsIDocumentEncoder, NS_NewHTMLCopyTextEncoder) MAKE_CTOR(CreateXMLContentSerializer, nsIContentSerializer, NS_NewXMLContentSerializer) MAKE_CTOR(CreateHTMLContentSerializer, nsIContentSerializer, NS_NewHTMLContentSerializer) MAKE_CTOR(CreatePlainTextSerializer, nsIContentSerializer, NS_NewPlainTextSerializer) MAKE_CTOR(CreateHTMLFragmentSink, nsIHTMLFragmentContentSink, NS_NewHTMLFragmentContentSink) MAKE_CTOR(CreateHTMLFragmentSink2, nsIHTMLFragmentContentSink, NS_NewHTMLFragmentContentSink2) MAKE_CTOR(CreateSanitizingHTMLSerializer, nsIContentSerializer, NS_NewSanitizingHTMLSerializer) MAKE_CTOR(CreateXBLService, nsIXBLService, NS_NewXBLService) MAKE_CTOR(CreateBindingManager, nsIBindingManager, NS_NewBindingManager) MAKE_CTOR(CreateContentPolicy, nsIContentPolicy, NS_NewContentPolicy) MAKE_CTOR(CreateFrameLoader, nsIFrameLoader, NS_NewFrameLoader) MAKE_CTOR(CreateNodeInfoManager, nsINodeInfoManager, NS_NewNodeInfoManager) MAKE_CTOR(CreateComputedDOMStyle, nsIComputedDOMStyle, NS_NewComputedDOMStyle) #ifdef MOZ_XUL MAKE_CTOR(CreateXULSortService, nsIXULSortService, NS_NewXULSortService) // NS_NewXULContentBuilder // NS_NewXULTreeBuilder MAKE_CTOR(CreateXULContentSink, nsIXULContentSink, NS_NewXULContentSink) MAKE_CTOR(CreateXULDocument, nsIXULDocument, NS_NewXULDocument) MAKE_CTOR(CreateXULPopupListener, nsIXULPopupListener, NS_NewXULPopupListener) // NS_NewXULControllers // NS_NewXULPrototypeCache MAKE_CTOR(CreateXULElementFactory, nsIElementFactory, NS_NewXULElementFactory) #endif #ifdef MOZ_MATHML MAKE_CTOR(CreateMathMLElementFactory, nsIElementFactory, NS_NewMathMLElementFactory) #endif #ifdef MOZ_SVG MAKE_CTOR(CreateSVGElementFactory, nsIElementFactory, NS_NewSVGElementFactory) #endif NS_GENERIC_FACTORY_CONSTRUCTOR(nsContentHTTPStartup) MAKE_CTOR(CreateContentDLF, nsIDocumentLoaderFactory, NS_NewContentDocumentLoaderFactory) NS_GENERIC_FACTORY_CONSTRUCTOR(nsCSSOMFactory) NS_GENERIC_FACTORY_CONSTRUCTOR(nsInspectorCSSUtils) NS_GENERIC_FACTORY_CONSTRUCTOR(nsWyciwygProtocolHandler) NS_GENERIC_FACTORY_CONSTRUCTOR(nsContentAreaDragDrop) MAKE_CTOR(CreateSyncLoadDOMService, nsISyncLoadDOMService, NS_NewSyncLoadDOMService) static NS_IMETHODIMP CreateHTMLImgElement(nsISupports* aOuter, REFNSIID aIID, void** aResult) { *aResult = nsnull; if (aOuter) return NS_ERROR_NO_AGGREGATION; nsIHTMLContent* inst; // Note! NS_NewHTMLImageElement is special cased to handle a null nodeinfo nsresult rv = NS_NewHTMLImageElement(&inst, nsnull); if (NS_SUCCEEDED(rv)) { rv = inst->QueryInterface(aIID, aResult); NS_RELEASE(inst); } return rv; } static NS_IMETHODIMP RegisterHTMLImgElement(nsIComponentManager *aCompMgr, nsIFile* aPath, const char* aRegistryLocation, const char* aComponentType, const nsModuleComponentInfo* aInfo) { nsCOMPtr catman = do_GetService(NS_CATEGORYMANAGER_CONTRACTID); if (!catman) return NS_ERROR_FAILURE; nsXPIDLCString previous; nsresult rv = catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_CATEGORY, "Image", NS_HTMLIMGELEMENT_CONTRACTID, PR_TRUE, PR_TRUE, getter_Copies(previous)); NS_ENSURE_SUCCESS(rv, rv); return catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_PROTO_ALIAS_CATEGORY, "Image", "HTMLImageElement", PR_TRUE, PR_TRUE, getter_Copies(previous)); } static NS_IMETHODIMP UnregisterHTMLImgElement(nsIComponentManager* aCompMgr, nsIFile* aPath, const char* aRegistryLocation, const nsModuleComponentInfo* aInfo) { // XXX remove category entry return NS_OK; } static NS_IMETHODIMP CreateHTMLOptionElement(nsISupports* aOuter, REFNSIID aIID, void** aResult) { *aResult = nsnull; if (aOuter) return NS_ERROR_NO_AGGREGATION; nsIHTMLContent* inst; // Note! NS_NewHTMLOptionElement is special cased to handle a null nodeinfo nsresult rv = NS_NewHTMLOptionElement(&inst, nsnull); if (NS_SUCCEEDED(rv)) { rv = inst->QueryInterface(aIID, aResult); NS_RELEASE(inst); } return rv; } static NS_IMETHODIMP RegisterHTMLOptionElement(nsIComponentManager *aCompMgr, nsIFile* aPath, const char* aRegistryLocation, const char* aComponentType, const nsModuleComponentInfo* aInfo) { nsCOMPtr catman = do_GetService(NS_CATEGORYMANAGER_CONTRACTID); if (!catman) return NS_ERROR_FAILURE; nsXPIDLCString previous; nsresult rv = catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_CATEGORY, "Option", NS_HTMLOPTIONELEMENT_CONTRACTID, PR_TRUE, PR_TRUE, getter_Copies(previous)); NS_ENSURE_SUCCESS(rv, rv); return catman->AddCategoryEntry(JAVASCRIPT_GLOBAL_CONSTRUCTOR_PROTO_ALIAS_CATEGORY, "Option", "HTMLOptionElement", PR_TRUE, PR_TRUE, getter_Copies(previous)); } static NS_IMETHODIMP UnregisterHTMLOptionElement(nsIComponentManager* aCompMgr, nsIFile* aPath, const char* aRegistryLocation, const nsModuleComponentInfo* aInfo) { // XXX remove category entry return NS_OK; } // The list of components we register static const nsModuleComponentInfo gComponents[] = { #ifdef DEBUG { "Frame utility", NS_FRAME_UTIL_CID, nsnull, CreateNewFrameUtil }, { "Layout debugger", NS_LAYOUT_DEBUGGER_CID, nsnull, CreateNewLayoutDebugger }, #endif { "CSS Frame Constructor", NS_CSSFRAMECONSTRUCTOR_CID, nsnull, CreateNewCSSFrameConstructor }, { "Frame Traversal", NS_FRAMETRAVERSAL_CID, nsnull, CreateNewFrameTraversal }, { "Layout History State", NS_LAYOUT_HISTORY_STATE_CID, nsnull, CreateNewLayoutHistoryState }, { "selection image storage", NS_SELECTIONIMAGESERVICE_CID, nsnull, CreateSelectionImageService}, // XXX ick { "Presentation shell", NS_PRESSHELL_CID, nsnull, CreateNewPresShell }, { "Presentation state", NS_PRESSTATE_CID, nsnull, CreateNewPresState }, { "Galley context", NS_GALLEYCONTEXT_CID, nsnull, CreateNewGalleyContext }, { "Print context", NS_PRINTCONTEXT_CID, nsnull, CreateNewPrintContext }, { "Print Preview context", NS_PRINT_PREVIEW_CONTEXT_CID, nsnull, CreateNewPrintPreviewContext }, // XXX end ick { "XUL Box Object", NS_BOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject;1", CreateNewBoxObject }, { "XUL Listbox Box Object", NS_LISTBOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject-listbox;1", CreateNewListBoxObject }, { "XUL Menu Box Object", NS_MENUBOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject-menu;1", CreateNewMenuBoxObject }, { "XUL Popup Box Object", NS_POPUPBOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject-popup;1", CreateNewPopupBoxObject }, { "XUL Browser Box Object", NS_BROWSERBOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject-browser;1", CreateNewBrowserBoxObject }, { "XUL Editor Box Object", NS_EDITORBOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject-editor;1", CreateNewEditorBoxObject }, { "XUL Iframe Object", NS_IFRAMEBOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject-iframe;1", CreateNewIFrameBoxObject }, { "XUL ScrollBox Object", NS_SCROLLBOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject-scrollbox;1", CreateNewScrollBoxObject }, { "XUL Tree Box Object", NS_TREEBOXOBJECT_CID, "@mozilla.org/layout/xul-boxobject-tree;1", CreateNewTreeBoxObject }, { "AutoCopy Service", NS_AUTOCOPYSERVICE_CID, "@mozilla.org/autocopy;1", CreateNewAutoCopyService }, { "Namespace manager", NS_NAMESPACEMANAGER_CID, NS_NAMESPACEMANAGER_CONTRACTID, CreateNameSpaceManager }, { "Event listener manager", NS_EVENTLISTENERMANAGER_CID, nsnull, CreateEventListenerManager }, { "Event state manager", NS_EVENTSTATEMANAGER_CID, nsnull, CreateEventStateManager }, { "DOM Event group", NS_DOMEVENTGROUP_CID, nsnull, CreateDOMEventGroup }, { "Document Viewer", NS_DOCUMENT_VIEWER_CID, nsnull, CreateDocumentViewer }, { "HTML Style Sheet", NS_HTMLSTYLESHEET_CID, nsnull, CreateHTMLStyleSheet }, { "Style Set", NS_STYLESET_CID, nsnull, CreateStyleSet }, { "CSS Style Sheet", NS_CSS_STYLESHEET_CID, nsnull, CreateCSSStyleSheet }, { "HTML document", NS_HTMLDOCUMENT_CID, nsnull, CreateHTMLDocument }, { "HTML-CSS style sheet", NS_HTML_CSS_STYLESHEET_CID, nsnull, CreateHTMLCSSStyleSheet }, { "DOM implementation", NS_DOM_IMPLEMENTATION_CID, nsnull, CreateDOMImplementation }, { "XML document", NS_XMLDOCUMENT_CID, nsnull, CreateXMLDocument }, #ifdef MOZ_SVG { "SVG document", NS_SVGDOCUMENT_CID, nsnull, CreateSVGDocument }, #endif { "Image document", NS_IMAGEDOCUMENT_CID, nsnull, CreateImageDocument }, { "CSS parser", NS_CSSPARSER_CID, nsnull, CreateCSSParser }, { "CSS loader", NS_CSS_LOADER_CID, nsnull, CreateCSSLoader }, { "HTML element factory", NS_HTML_ELEMENT_FACTORY_CID, NS_HTML_ELEMENT_FACTORY_CONTRACTID, CreateHTMLElementFactory }, { "Text element", NS_TEXTNODE_CID, nsnull, CreateTextNode }, #if 0 // XXX apparently there is no such thing? { "Anonymous Content", NS_ANONYMOUSCONTENT_CID, nsnull, CreateAnonymousElement }, #endif { "Attribute Content", NS_ATTRIBUTECONTENT_CID, nsnull, CreateAttributeContent }, { "XML element factory", NS_XML_ELEMENT_FACTORY_CID, NS_XML_ELEMENT_FACTORY_CONTRACTID, CreateXMLElementFactory }, #if 0 // XXX apparently there is no such thing? { "Selection", NS_SELECTION_CID, nsnull, CreateSelection }, #endif { "Dom selection", NS_DOMSELECTION_CID, nsnull, CreateDOMSelection }, { "Frame selection", NS_FRAMESELECTION_CID, nsnull, CreateSelection }, { "Range", NS_RANGE_CID, nsnull, CreateRange }, { "Range Utils", NS_RANGEUTILS_CID, nsnull, CreateRangeUtils }, { "Content iterator", NS_CONTENTITERATOR_CID, nsnull, CreateContentIterator }, { "Pre Content iterator", NS_PRECONTENTITERATOR_CID, nsnull, CreatePreContentIterator }, { "Generated Content iterator", NS_GENERATEDCONTENTITERATOR_CID, nsnull, CreateGeneratedContentIterator }, { "Generated Subtree iterator", NS_GENERATEDSUBTREEITERATOR_CID, nsnull, CreateGeneratedSubtreeIterator }, { "Subtree iterator", NS_SUBTREEITERATOR_CID, nsnull, CreateSubtreeIterator }, { "CSS Object Model Factory", NS_CSSOMFACTORY_CID, nsnull, nsCSSOMFactoryConstructor }, { "Inspector CSS Utils", NS_INSPECTORCSSUTILS_CID, nsnull, nsInspectorCSSUtilsConstructor }, // Needed to support "new Option;" and "new Image;" in JavaScript { "HTML img element", NS_HTMLIMAGEELEMENT_CID, NS_HTMLIMGELEMENT_CONTRACTID, CreateHTMLImgElement, RegisterHTMLImgElement, UnregisterHTMLImgElement }, { "HTML option element", NS_HTMLOPTIONELEMENT_CID, NS_HTMLOPTIONELEMENT_CONTRACTID, CreateHTMLOptionElement, RegisterHTMLOptionElement, UnregisterHTMLOptionElement }, { "XML document encoder", NS_TEXT_ENCODER_CID, NS_DOC_ENCODER_CONTRACTID_BASE "text/xml", CreateTextEncoder }, { "XML document encoder", NS_TEXT_ENCODER_CID, NS_DOC_ENCODER_CONTRACTID_BASE "application/xml", CreateTextEncoder }, { "XML document encoder", NS_TEXT_ENCODER_CID, NS_DOC_ENCODER_CONTRACTID_BASE "application/xhtml+xml", CreateTextEncoder }, #ifdef MOZ_SVG { "SVG document encoder", NS_TEXT_ENCODER_CID, NS_DOC_ENCODER_CONTRACTID_BASE "image/svg+xml", CreateTextEncoder }, #endif { "HTML document encoder", NS_TEXT_ENCODER_CID, NS_DOC_ENCODER_CONTRACTID_BASE "text/html", CreateTextEncoder }, { "Plaintext document encoder", NS_TEXT_ENCODER_CID, NS_DOC_ENCODER_CONTRACTID_BASE "text/plain", CreateTextEncoder }, { "HTML copy encoder", NS_HTMLCOPY_TEXT_ENCODER_CID, NS_HTMLCOPY_ENCODER_CONTRACTID, CreateHTMLCopyTextEncoder }, { "XML content serializer", NS_XMLCONTENTSERIALIZER_CID, NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/xml", CreateXMLContentSerializer }, { "XML content serializer", NS_XMLCONTENTSERIALIZER_CID, NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/xml", CreateXMLContentSerializer }, { "XML content serializer", NS_XMLCONTENTSERIALIZER_CID, NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/xhtml+xml", CreateXMLContentSerializer }, #ifdef MOZ_SVG { "SVG content serializer", NS_XMLCONTENTSERIALIZER_CID, NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "image/svg+xml", CreateXMLContentSerializer }, #endif { "HTML content serializer", NS_HTMLCONTENTSERIALIZER_CID, NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/html", CreateHTMLContentSerializer }, { "XUL content serializer", NS_XMLCONTENTSERIALIZER_CID, NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "application/vnd.mozilla.xul+xml", CreateXMLContentSerializer }, { "plaintext content serializer", NS_PLAINTEXTSERIALIZER_CID, NS_CONTENTSERIALIZER_CONTRACTID_PREFIX "text/plain", CreatePlainTextSerializer }, { "plaintext sink", NS_PLAINTEXTSERIALIZER_CID, NS_PLAINTEXTSINK_CONTRACTID, CreatePlainTextSerializer }, { "html fragment sink", NS_HTMLFRAGMENTSINK_CID, NS_HTMLFRAGMENTSINK_CONTRACTID, CreateHTMLFragmentSink }, { "html fragment sink 2", NS_HTMLFRAGMENTSINK2_CID, NS_HTMLFRAGMENTSINK2_CONTRACTID, CreateHTMLFragmentSink2 }, { "HTML sanitizing content serializer", MOZ_SANITIZINGHTMLSERIALIZER_CID, MOZ_SANITIZINGHTMLSERIALIZER_CONTRACTID, CreateSanitizingHTMLSerializer }, { "XBL Service", NS_XBLSERVICE_CID, "@mozilla.org/xbl;1", CreateXBLService }, { "XBL Binding Manager", NS_BINDINGMANAGER_CID, "@mozilla.org/xbl/binding-manager;1", CreateBindingManager }, { "Content policy service", NS_CONTENTPOLICY_CID, NS_CONTENTPOLICY_CONTRACTID, CreateContentPolicy }, { "Frame Loader", NS_FRAMELOADER_CID, NS_FRAMELOADER_CONTRACTID, CreateFrameLoader }, { "NodeInfoManager", NS_NODEINFOMANAGER_CID, NS_NODEINFOMANAGER_CONTRACTID, CreateNodeInfoManager }, { "DOM CSS Computed Style Declaration", NS_COMPUTEDDOMSTYLE_CID, "@mozilla.org/DOM/Level2/CSS/computedStyleDeclaration;1", CreateComputedDOMStyle }, #ifdef MOZ_XUL { "XUL Sort Service", NS_XULSORTSERVICE_CID, "@mozilla.org/xul/xul-sort-service;1", CreateXULSortService }, { "XUL Template Builder", NS_XULTEMPLATEBUILDER_CID, "@mozilla.org/xul/xul-template-builder;1", NS_NewXULContentBuilder }, { "XUL Tree Builder", NS_XULTREEBUILDER_CID, "@mozilla.org/xul/xul-tree-builder;1", NS_NewXULTreeBuilder }, { "XUL Content Sink", NS_XULCONTENTSINK_CID, "@mozilla.org/xul/xul-content-sink;1", CreateXULContentSink }, { "XUL Document", NS_XULDOCUMENT_CID, "@mozilla.org/xul/xul-document;1", CreateXULDocument }, { "XUL PopupListener", NS_XULPOPUPLISTENER_CID, "@mozilla.org/xul/xul-popup-listener;1", CreateXULPopupListener }, { "XUL Controllers", NS_XULCONTROLLERS_CID, "@mozilla.org/xul/xul-controllers;1", NS_NewXULControllers }, { "XUL Prototype Cache", NS_XULPROTOTYPECACHE_CID, "@mozilla.org/xul/xul-prototype-cache;1", NS_NewXULPrototypeCache }, { NS_XULPROTOTYPEDOCUMENT_CLASSNAME, NS_XULPROTOTYPEDOCUMENT_CID, nsnull, NS_NewXULPrototypeDocument }, { "XUL Element Factory", NS_XULELEMENTFACTORY_CID, NS_ELEMENT_FACTORY_CONTRACTID_PREFIX "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", CreateXULElementFactory }, #endif #ifdef MOZ_MATHML { "MathML Element Factory", NS_MATHMLELEMENTFACTORY_CID, NS_MATHML_ELEMENT_FACTORY_CONTRACTID, CreateMathMLElementFactory }, #endif #ifdef MOZ_SVG { "SVG element factory (deprecated namespace)", NS_SVGELEMENTFACTORY_CID, NS_SVG_DEPRECATED_ELEMENT_FACTORY_CONTRACTID, CreateSVGElementFactory }, { "SVG element factory", NS_SVGELEMENTFACTORY_CID, NS_SVG_ELEMENT_FACTORY_CONTRACTID, CreateSVGElementFactory }, #endif { "Content HTTP Startup Listener", NS_CONTENTHTTPSTARTUP_CID, NS_CONTENTHTTPSTARTUP_CONTRACTID, nsContentHTTPStartupConstructor, nsContentHTTPStartup::RegisterHTTPStartup, nsContentHTTPStartup::UnregisterHTTPStartup }, { "Document Loader Factory", NS_CONTENT_DOCUMENT_LOADER_FACTORY_CID, "@mozilla.org:/content/document-loader-factory;1", CreateContentDLF, nsContentDLF::RegisterDocumentFactories, nsContentDLF::UnregisterDocumentFactories }, { "Wyciwyg Handler", NS_WYCIWYGPROTOCOLHANDLER_CID, NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "wyciwyg", nsWyciwygProtocolHandlerConstructor }, { "Content Area DragDrop", NS_CONTENTAREADRAGDROP_CID, NS_CONTENTAREADRAGDROP_CONTRACTID, nsContentAreaDragDropConstructor }, { "SyncLoad DOM Service", NS_SYNCLOADDOMSERVICE_CID, NS_SYNCLOADDOMSERVICE_CONTRACTID, CreateSyncLoadDOMService } }; NS_IMPL_NSGETMODULE_WITH_CTOR_DTOR(nsLayoutModule, gComponents, Initialize, Shutdown)