Bug 405241 - "Don't register nsDownloadHistory if it's not needed" [p=comrade693+bmo@gmail.com (Shawn Wilsher [sdwilsh]) r=biesi sr=bzbarsky a1.9=damons]

This commit is contained in:
reed%reedloden.com 2007-12-01 07:18:43 +00:00
Родитель 05ed421f80
Коммит 648633ff99
3 изменённых файлов: 42 добавлений и 1 удалений

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

@ -44,12 +44,43 @@
#include "nsIGlobalHistory2.h"
#include "nsIObserverService.h"
#include "nsIURI.h"
#include "nsIComponentRegistrar.h"
#include "nsDocShellCID.h"
////////////////////////////////////////////////////////////////////////////////
//// nsDownloadHistory
NS_IMPL_ISUPPORTS1(nsDownloadHistory, nsIDownloadHistory)
nsresult
nsDownloadHistory::RegisterSelf(nsIComponentManager *aCompMgr,
nsIFile *aPath,
const char *aLoaderStr,
const char *aType,
const nsModuleComponentInfo *aInfo)
{
nsCOMPtr<nsIComponentRegistrar> compReg(do_QueryInterface(aCompMgr));
if (!compReg)
return NS_ERROR_UNEXPECTED;
PRBool registered;
nsresult rv = compReg->IsContractIDRegistered(NS_DOWNLOADHISTORY_CONTRACTID,
&registered);
NS_ENSURE_SUCCESS(rv, rv);
// If someone has already registered the contractID, we don't want to register
// it ourself. We do want to register though in case someone wants to access
// this implementation (by CID).
if (registered) {
return compReg->RegisterFactoryLocation(GetCID(), "nsDownloadHistory",
nsnull, aPath, aLoaderStr, aType);
}
return compReg->RegisterFactoryLocation(GetCID(), "nsDownloadHistory",
NS_DOWNLOADHISTORY_CONTRACTID,
aPath, aLoaderStr, aType);
}
////////////////////////////////////////////////////////////////////////////////
//// nsIDownloadHistory

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

@ -41,6 +41,7 @@
#define __nsDownloadHistory_h__
#include "nsIDownloadHistory.h"
#include "nsIGenericFactory.h"
#define NS_DOWNLOADHISTORY_CID \
{0x2ee83680, 0x2af0, 0x4bcb, {0xbf, 0xa0, 0xc9, 0x70, 0x5f, 0x65, 0x54, 0xf1}}
@ -50,6 +51,14 @@ class nsDownloadHistory : public nsIDownloadHistory
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIDOWNLOADHISTORY
static NS_METHOD RegisterSelf(nsIComponentManager *aCompMgr,
nsIFile *aPath,
const char *aLoaderStr,
const char *aType,
const nsModuleComponentInfo *aInfo);
NS_DEFINE_STATIC_CID_ACCESSOR(NS_DOWNLOADHISTORY_CID)
};
#endif // __nsDownloadHistory_h__

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

@ -250,7 +250,8 @@ static const nsModuleComponentInfo gDocShellModuleInfo[] = {
// download history
{ "nsDownloadHistory", NS_DOWNLOADHISTORY_CID,
NS_DOWNLOADHISTORY_CONTRACTID, nsDownloadHistoryConstructor }
nsnull, nsDownloadHistoryConstructor,
nsDownloadHistory::RegisterSelf }
};
// "docshell provider" to illustrate that this thing really *should*