From dd41a9d6ccd0e2855fb95c47c06a12d7b813985d Mon Sep 17 00:00:00 2001 From: "conrad%ingress.com" Date: Thu, 10 Aug 2000 03:07:25 +0000 Subject: [PATCH] 1. Uses appfilelocationprovider. Can pass one in or pass nsnull and default is made. 2. Removed version of NS_InitEmbedding which took char* path. r=dougt git-svn-id: svn://10.0.0.236/trunk@75950 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/embedding/base/nsEmbedAPI.cpp | 45 ++++++++++++++------------- mozilla/embedding/base/nsEmbedAPI.h | 15 +++++++-- 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/mozilla/embedding/base/nsEmbedAPI.cpp b/mozilla/embedding/base/nsEmbedAPI.cpp index d6bdecb8fbe..8df779317e3 100644 --- a/mozilla/embedding/base/nsEmbedAPI.cpp +++ b/mozilla/embedding/base/nsEmbedAPI.cpp @@ -28,6 +28,9 @@ #include "nsIStringBundle.h" +#include "nsIDirectoryService.h" +#include "nsAppFileLocationProvider.h" + #include "nsEmbedAPI.h" static nsIServiceManager *sServiceManager = nsnull; @@ -66,24 +69,11 @@ static XPCOMCleanupHack sXPCOMCleanupHack; extern "C" void NS_SetupRegistry(); -nsresult NS_InitEmbedding(const char *aPath) +nsresult NS_InitEmbedding(nsILocalFile *mozBinDirectory, + nsIDirectoryServiceProvider *appFileLocProvider) { - // Create an object to represent the path - nsILocalFile *localFile = nsnull; - if (aPath && strlen(aPath) > 0) - { - NS_NewLocalFile(aPath, PR_FALSE, &localFile); - } + nsresult rv; - nsresult rv = NS_InitEmbedding(localFile); - NS_IF_RELEASE(localFile); - - return rv; -} - - -nsresult NS_InitEmbedding(nsILocalFile *aPath) -{ // Reentrant calls to this method do nothing except increment a counter sInitCounter++; if (sInitCounter > 1) @@ -96,19 +86,32 @@ nsresult NS_InitEmbedding(nsILocalFile *aPath) #endif { // Initialise XPCOM - NS_InitXPCOM(&sServiceManager, aPath); - + NS_InitXPCOM(&sServiceManager, mozBinDirectory); if (!sServiceManager) return NS_ERROR_NULL_POINTER; - + + // Hook up the file location provider - make one if nsnull was passed + if (!appFileLocProvider) + { + appFileLocProvider = new nsAppFileLocationProvider; + if (!appFileLocProvider) + return NS_ERROR_OUT_OF_MEMORY; + NS_ADDREF(appFileLocProvider); + } + NS_WITH_SERVICE(nsIDirectoryService, directoryService, NS_DIRECTORY_SERVICE_PROGID, &rv); + if (NS_FAILED(rv)) + return rv; + rv = directoryService->RegisterProvider(appFileLocProvider); + if (rv != TRUE) // This is needed but WRONG. RegisterProvider returns TRUE is suceeded, should return NS_OK + return NS_ERROR_FAILURE; + NS_RELEASE(appFileLocProvider); // RegisterProvider did AddRef - It owns it now + #ifdef HACK_AROUND_NONREENTRANT_INITXPCOM sXPCOMInitializedFlag = PR_TRUE; sXPCOMCleanupHack.mCleanOnExit = PR_TRUE; #endif } - nsresult rv; - // Register components if (!sRegistryInitializedFlag) { diff --git a/mozilla/embedding/base/nsEmbedAPI.h b/mozilla/embedding/base/nsEmbedAPI.h index aeed59898cc..d0acef3801c 100644 --- a/mozilla/embedding/base/nsEmbedAPI.h +++ b/mozilla/embedding/base/nsEmbedAPI.h @@ -26,9 +26,20 @@ #define NSEMBEDAPI_H #include "nsILocalFile.h" +class nsIDirectoryServiceProvider; -extern nsresult NS_InitEmbedding(const char *aPath); -extern nsresult NS_InitEmbedding(nsILocalFile *aPath); + +/* + mozBinDirectory -> the directory which contains the mozilla parts (chrome, res, etc) + If nsnull is used, the dir of the current process will be used. + appFileLocProvider -> Provides file locations. If nsnull is passed, the default + provider will be constructed and used. If the param is non-null, + it must be AddRefed already and this function takes ownership. +*/ + +extern nsresult NS_InitEmbedding(nsILocalFile *mozBinDirectory, + nsIDirectoryServiceProvider *appFileLocProvider); + extern nsresult NS_TermEmbedding(); #endif