зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
d7b4428123
Коммит
31845da8a5
|
@ -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**)®istry);
|
|
||||||
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)
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче