зеркало из https://github.com/mozilla/gecko-dev.git
Providing register and unregister hook per component in the generic
module. r=alecf
This commit is contained in:
Родитель
c0a53ad72f
Коммит
331dbeb0cd
|
@ -218,6 +218,18 @@ nsGenericModule::RegisterSelf(nsIComponentManager *aCompMgr,
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// Call the registration hook of the component, if any
|
||||||
|
if (cp->mRegisterSelfProc)
|
||||||
|
{
|
||||||
|
rv = cp->mRegisterSelfProc(aCompMgr, aPath, registryLocation, componentType);
|
||||||
|
if (NS_FAILED(rv)) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf("nsGenericModule %s: Register hook for %s component returned error => %x\n",
|
||||||
|
mModuleName?mModuleName:"(null)", cp->mDescription?cp->mDescription:"(null)", rv);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
cp++;
|
cp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,6 +246,12 @@ nsGenericModule::UnregisterSelf(nsIComponentManager* aCompMgr,
|
||||||
#endif
|
#endif
|
||||||
nsModuleComponentInfo* cp = mComponents;
|
nsModuleComponentInfo* cp = mComponents;
|
||||||
for (PRUint32 i = 0; i < mComponentCount; i++) {
|
for (PRUint32 i = 0; i < mComponentCount; i++) {
|
||||||
|
// Call the unregistration hook of the component, if any
|
||||||
|
if (cp->mUnregisterSelfProc)
|
||||||
|
{
|
||||||
|
cp->mUnregisterSelfProc(aCompMgr, aPath, registryLocation);
|
||||||
|
}
|
||||||
|
// Unregister the component
|
||||||
nsresult rv = aCompMgr->UnregisterComponentSpec(cp->mCID, aPath);
|
nsresult rv = aCompMgr->UnregisterComponentSpec(cp->mCID, aPath);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
@ -72,6 +72,15 @@ NS_NewGenericFactory(nsIGenericFactory* *result,
|
||||||
|
|
||||||
#include "nsIModule.h"
|
#include "nsIModule.h"
|
||||||
|
|
||||||
|
typedef NS_CALLBACK(NSRegisterSelfProcPtr) (nsIComponentManager *aCompMgr,
|
||||||
|
nsIFileSpec *aPath,
|
||||||
|
const char *registryLocation,
|
||||||
|
const char *componentType);
|
||||||
|
|
||||||
|
typedef NS_CALLBACK(NSUnregisterSelfProcPtr) (nsIComponentManager *aCompMgr,
|
||||||
|
nsIFileSpec *aPath,
|
||||||
|
const char *registryLocation);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use this type to define a list of module component info to pass to
|
* Use this type to define a list of module component info to pass to
|
||||||
* NS_NewGenericModule. E.g.:
|
* NS_NewGenericModule. E.g.:
|
||||||
|
@ -83,6 +92,8 @@ struct nsModuleComponentInfo {
|
||||||
nsCID mCID;
|
nsCID mCID;
|
||||||
const char* mProgID;
|
const char* mProgID;
|
||||||
nsIGenericFactory::ConstructorProcPtr mConstructor;
|
nsIGenericFactory::ConstructorProcPtr mConstructor;
|
||||||
|
NSRegisterSelfProcPtr mRegisterSelfProc;
|
||||||
|
NSUnregisterSelfProcPtr mUnregisterSelfProc;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (PR_CALLBACK *nsModuleDestructorProc) (nsIModule *self);
|
typedef void (PR_CALLBACK *nsModuleDestructorProc) (nsIModule *self);
|
||||||
|
|
|
@ -218,6 +218,18 @@ nsGenericModule::RegisterSelf(nsIComponentManager *aCompMgr,
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// Call the registration hook of the component, if any
|
||||||
|
if (cp->mRegisterSelfProc)
|
||||||
|
{
|
||||||
|
rv = cp->mRegisterSelfProc(aCompMgr, aPath, registryLocation, componentType);
|
||||||
|
if (NS_FAILED(rv)) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf("nsGenericModule %s: Register hook for %s component returned error => %x\n",
|
||||||
|
mModuleName?mModuleName:"(null)", cp->mDescription?cp->mDescription:"(null)", rv);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
cp++;
|
cp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,6 +246,12 @@ nsGenericModule::UnregisterSelf(nsIComponentManager* aCompMgr,
|
||||||
#endif
|
#endif
|
||||||
nsModuleComponentInfo* cp = mComponents;
|
nsModuleComponentInfo* cp = mComponents;
|
||||||
for (PRUint32 i = 0; i < mComponentCount; i++) {
|
for (PRUint32 i = 0; i < mComponentCount; i++) {
|
||||||
|
// Call the unregistration hook of the component, if any
|
||||||
|
if (cp->mUnregisterSelfProc)
|
||||||
|
{
|
||||||
|
cp->mUnregisterSelfProc(aCompMgr, aPath, registryLocation);
|
||||||
|
}
|
||||||
|
// Unregister the component
|
||||||
nsresult rv = aCompMgr->UnregisterComponentSpec(cp->mCID, aPath);
|
nsresult rv = aCompMgr->UnregisterComponentSpec(cp->mCID, aPath);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
@ -72,6 +72,15 @@ NS_NewGenericFactory(nsIGenericFactory* *result,
|
||||||
|
|
||||||
#include "nsIModule.h"
|
#include "nsIModule.h"
|
||||||
|
|
||||||
|
typedef NS_CALLBACK(NSRegisterSelfProcPtr) (nsIComponentManager *aCompMgr,
|
||||||
|
nsIFileSpec *aPath,
|
||||||
|
const char *registryLocation,
|
||||||
|
const char *componentType);
|
||||||
|
|
||||||
|
typedef NS_CALLBACK(NSUnregisterSelfProcPtr) (nsIComponentManager *aCompMgr,
|
||||||
|
nsIFileSpec *aPath,
|
||||||
|
const char *registryLocation);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use this type to define a list of module component info to pass to
|
* Use this type to define a list of module component info to pass to
|
||||||
* NS_NewGenericModule. E.g.:
|
* NS_NewGenericModule. E.g.:
|
||||||
|
@ -83,6 +92,8 @@ struct nsModuleComponentInfo {
|
||||||
nsCID mCID;
|
nsCID mCID;
|
||||||
const char* mProgID;
|
const char* mProgID;
|
||||||
nsIGenericFactory::ConstructorProcPtr mConstructor;
|
nsIGenericFactory::ConstructorProcPtr mConstructor;
|
||||||
|
NSRegisterSelfProcPtr mRegisterSelfProc;
|
||||||
|
NSUnregisterSelfProcPtr mUnregisterSelfProc;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (PR_CALLBACK *nsModuleDestructorProc) (nsIModule *self);
|
typedef void (PR_CALLBACK *nsModuleDestructorProc) (nsIModule *self);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче