Bug 71869, make XML Extras component load in startup in embedded case as well as browser. r=chak, sr=vidur.

This commit is contained in:
heikki%netscape.com 2001-03-29 01:11:13 +00:00
Родитель d7b4428123
Коммит 31845da8a5
2 изменённых файлов: 26 добавлений и 66 удалений

Просмотреть файл

@ -30,7 +30,7 @@ MODULE = xmlextras
LIBRARY_NAME = xmlextras LIBRARY_NAME = xmlextras
SHORT_LIBNAME = xmlextra SHORT_LIBNAME = xmlextra
IS_COMPONENT = 1 IS_COMPONENT = 1
REQUIRES = xpcom string dom js layout widget caps necko webbrwsr REQUIRES = xpcom string dom js layout widget caps necko webbrwsr appstartupnotifier
CPPSRCS = nsXMLExtrasModule.cpp CPPSRCS = nsXMLExtrasModule.cpp

Просмотреть файл

@ -24,13 +24,16 @@
#include "nsDOMSerializer.h" #include "nsDOMSerializer.h"
#include "nsXMLHttpRequest.h" #include "nsXMLHttpRequest.h"
#include "nsDOMParser.h" #include "nsDOMParser.h"
#include "nsIAppShellComponent.h" #include "nsIAppStartupNotifier.h"
#include "nsICategoryManager.h"
#include "nsIObserver.h"
#include "nsIScriptExternalNameSet.h" #include "nsIScriptExternalNameSet.h"
#include "nsIScriptNameSetRegistry.h" #include "nsIScriptNameSetRegistry.h"
#include "nsIScriptNameSpaceManager.h" #include "nsIScriptNameSpaceManager.h"
#include "nsIScriptContext.h" #include "nsIScriptContext.h"
#include "nsIRegistry.h" #include "nsIRegistry.h"
#include "nsString.h" #include "nsString.h"
#include "nsXPIDLString.h"
#include "nsDOMCID.h" #include "nsDOMCID.h"
#include "prprf.h" #include "prprf.h"
@ -98,7 +101,7 @@ nsXMLExtrasNameset::AddNameSet(nsIScriptContext* aScriptContext)
static NS_DEFINE_CID(kSOAPCall_CID, NS_SOAPCALL_CID); static NS_DEFINE_CID(kSOAPCall_CID, NS_SOAPCALL_CID);
static NS_DEFINE_CID(kSOAPParameter_CID, NS_SOAPPARAMETER_CID); static NS_DEFINE_CID(kSOAPParameter_CID, NS_SOAPPARAMETER_CID);
#endif #endif
nsresult result = NS_OK; nsresult result;
nsCOMPtr<nsIScriptNameSpaceManager> manager; nsCOMPtr<nsIScriptNameSpaceManager> manager;
result = aScriptContext->GetNameSpaceManager(getter_AddRefs(manager)); result = aScriptContext->GetNameSpaceManager(getter_AddRefs(manager));
@ -144,9 +147,9 @@ nsXMLExtrasNameset::AddNameSet(nsIScriptContext* aScriptContext)
0x33e569b0, 0x40f8, 0x11d4, \ 0x33e569b0, 0x40f8, 0x11d4, \
{0x9a, 0x41, 0x00, 0x00, 0x64, 0x65, 0x73, 0x74} } {0x9a, 0x41, 0x00, 0x00, 0x64, 0x65, 0x73, 0x74} }
#define NS_XML_EXTRAS_CONTRACTID NS_IAPPSHELLCOMPONENT_CONTRACTID "/xmlextras;1" #define NS_XML_EXTRAS_CONTRACTID "@mozilla.org/xmlextras;1"
class nsXMLExtras : public nsIAppShellComponent { class nsXMLExtras : public nsIObserver {
public: public:
nsXMLExtras(); nsXMLExtras();
virtual ~nsXMLExtras(); virtual ~nsXMLExtras();
@ -156,28 +159,10 @@ public:
// nsISupports // nsISupports
NS_DECL_ISUPPORTS NS_DECL_ISUPPORTS
// nsIAppShellComponent // nsIObserver
NS_DECL_NSIAPPSHELLCOMPONENT NS_DECL_NSIOBSERVER
static nsXMLExtras *GetInstance();
static nsXMLExtras* mInstance;
}; };
nsXMLExtras* nsXMLExtras::mInstance = nsnull;
nsXMLExtras *
nsXMLExtras::GetInstance()
{
if (mInstance == nsnull) {
mInstance = new nsXMLExtras();
// Will be released in the module destructor
NS_IF_ADDREF(mInstance);
}
NS_IF_ADDREF(mInstance);
return mInstance;
}
nsXMLExtras::nsXMLExtras() nsXMLExtras::nsXMLExtras()
{ {
NS_INIT_ISUPPORTS(); NS_INIT_ISUPPORTS();
@ -187,33 +172,27 @@ nsXMLExtras::~nsXMLExtras()
{ {
} }
NS_IMPL_ISUPPORTS1(nsXMLExtras, nsIAppShellComponent) NS_IMPL_ISUPPORTS1(nsXMLExtras, nsIObserver)
NS_IMETHODIMP NS_IMETHODIMP
nsXMLExtras::Initialize(nsIAppShellService *anAppShell, nsXMLExtras::Observe(nsISupports *aSubject, const PRUnichar *aTopic, const PRUnichar *aData)
nsICmdLineService *aCmdLineService)
{ {
nsresult rv; nsresult rv;
nsCOMPtr<nsIScriptNameSetRegistry> namesetService = nsCOMPtr<nsIScriptNameSetRegistry>
do_GetService(kCScriptNameSetRegistryCID, &rv); namesetService(do_GetService(kCScriptNameSetRegistryCID, &rv));
if (NS_SUCCEEDED(rv)) { if (NS_SUCCEEDED(rv)) {
nsXMLExtrasNameset* nameset = new nsXMLExtrasNameset(); nsXMLExtrasNameset* nameset = new nsXMLExtrasNameset();
if (!nameset)
return NS_ERROR_OUT_OF_MEMORY;
// the NameSet service will AddRef this one // the NameSet service will AddRef this one
namesetService->AddExternalNameSet(nameset); rv = namesetService->AddExternalNameSet(nameset);
} }
return rv; return rv;
} }
NS_IMETHODIMP NS_GENERIC_FACTORY_CONSTRUCTOR(nsXMLExtras)
nsXMLExtras::Shutdown()
{
return NS_OK;
}
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsXMLExtras,nsXMLExtras::GetInstance);
static NS_METHOD static NS_METHOD
RegisterXMLExtras(nsIComponentManager *aCompMgr, RegisterXMLExtras(nsIComponentManager *aCompMgr,
@ -222,27 +201,14 @@ RegisterXMLExtras(nsIComponentManager *aCompMgr,
const char *componentType, const char *componentType,
const nsModuleComponentInfo *info) const nsModuleComponentInfo *info)
{ {
// get the registry nsresult rv;
nsIRegistry* registry; nsCOMPtr<nsICategoryManager>
nsresult rv = nsServiceManager::GetService(NS_REGISTRY_CONTRACTID, categoryManager(do_GetService("@mozilla.org/categorymanager;1", &rv));
NS_GET_IID(nsIRegistry),
(nsISupports**)&registry);
if (NS_SUCCEEDED(rv)) { if (NS_SUCCEEDED(rv)) {
registry->OpenWellKnownRegistry(nsIRegistry::ApplicationComponentRegistry); rv = categoryManager->AddCategoryEntry(APPSTARTUP_CATEGORY, "XML Extras Module",
char buffer[256]; "service," NS_XML_EXTRAS_CONTRACTID,
char *cid = nsXMLExtras::GetCID().ToString(); PR_TRUE, PR_TRUE,
PR_snprintf(buffer, nsnull);
sizeof buffer,
"%s/%s",
NS_IAPPSHELLCOMPONENT_KEY,
cid ? cid : "unknown" );
nsCRT::free(cid);
nsRegistryKey key;
rv = registry->AddSubtree(nsIRegistry::Common,
buffer,
&key );
nsServiceManager::ReleaseService(NS_REGISTRY_CONTRACTID, registry);
} }
return rv; return rv;
} }
@ -265,10 +231,4 @@ static nsModuleComponentInfo components[] = {
#endif #endif
}; };
static void PR_CALLBACK NS_IMPL_NSGETMODULE("nsXMLExtrasModule", components)
XMLExtrasModuleDtor(nsIModule* self)
{
NS_IF_RELEASE(nsXMLExtras::mInstance);
}
NS_IMPL_NSGETMODULE_WITH_DTOR("nsXMLExtrasModule", components, XMLExtrasModuleDtor)