teach component manager that there are non-native entries in the registry

This commit is contained in:
shaver%netscape.com 1999-09-07 23:18:47 +00:00
Родитель 960b56bd46
Коммит df50cccf6f
4 изменённых файлов: 36 добавлений и 10 удалений

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

@ -777,10 +777,18 @@ nsresult nsComponentManagerImpl::PlatformPrePopulateRegistry()
nsCID aClass;
if (!(aClass.Parse(cidString))) continue;
char *componentType;
if (NS_FAILED(mRegistry->GetString(cidKey, componentTypeValueName,
&componentType)))
continue;
nsFactoryEntry* entry =
new nsFactoryEntry(aClass, PL_strdup(library),
PL_strdup(nativeComponentType),
mNativeComponentLoader);
/* hand off */
componentType,
nsCRT::strcmp(componentType,
nativeComponentType) ?
0 : mNativeComponentLoader);
if (!entry)
continue;
@ -962,7 +970,8 @@ nsComponentManagerImpl::LoadFactory(nsFactoryEntry *aEntry,
return NS_ERROR_NULL_POINTER;
*aFactory = NULL;
nsresult rv = aEntry->GetFactory(aFactory);
nsresult rv;
rv = aEntry->GetFactory(aFactory, this);
if (NS_FAILED(rv)) {
PR_LOG(nsComponentManagerLog, PR_LOG_ERROR,
("nsComponentManager: failed to load factory from %s (%s)\n",
@ -1034,7 +1043,7 @@ nsComponentManagerImpl::FindFactory(const nsCID &aClass,
if (!entry)
return NS_ERROR_FACTORY_NOT_REGISTERED;
return entry->GetFactory(aFactory);
return entry->GetFactory(aFactory, this);
}
/**

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

@ -40,10 +40,6 @@ class nsIServiceManager;
// here rather than in nsIRegistry.h
extern "C" NS_EXPORT nsresult NS_RegistryGetFactory(nsIFactory** aFactory);
extern const char xpcomBaseName[];
extern const char xpcomKeyName[];
extern const char lastModValueName[];
extern const char fileSizeValueName[];
extern const char XPCOM_LIB_PREFIX[];
////////////////////////////////////////////////////////////////////////////////
@ -61,6 +57,7 @@ public:
nsresult Init(void);
nsresult PlatformPrePopulateRegistry();
friend class nsFactoryEntry;
protected:
nsresult RegistryNameForLib(const char *aLibName, char **aRegistryName);
nsresult RegisterComponentCommon(const nsCID &aClass,
@ -178,13 +175,21 @@ public:
nsFactoryEntry(const nsCID &aClass, nsIFactory *aFactory);
~nsFactoryEntry();
nsresult GetFactory(nsIFactory **aFactory) {
nsresult GetFactory(nsIFactory **aFactory,
nsComponentManagerImpl * mgr) {
if (factory) {
*aFactory = factory.get();
NS_ADDREF(*aFactory);
return NS_OK;
}
nsresult rv = loader->GetFactory(cid, location, type, aFactory);
nsresult rv;
if (!loader.get()) {
rv = mgr->GetLoaderForType(type, getter_AddRefs(loader));
if(NS_FAILED(rv))
return rv;
}
rv = loader->GetFactory(cid, location, type, aFactory);
if (NS_SUCCEEDED(rv))
factory = do_QueryInterface(*aFactory);
return rv;

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

@ -171,4 +171,10 @@ public:
};
/* keys for registry use */
extern const char xpcomBaseName[];
extern const char xpcomKeyName[];
extern const char lastModValueName[];
extern const char fileSizeValueName[];
#endif /* nsComponentManagerUtils_h__ */

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

@ -171,4 +171,10 @@ public:
};
/* keys for registry use */
extern const char xpcomBaseName[];
extern const char xpcomKeyName[];
extern const char lastModValueName[];
extern const char fileSizeValueName[];
#endif /* nsComponentManagerUtils_h__ */