зеркало из https://github.com/mozilla/pjs.git
Bug 483202 - Load chrome from the GRE directory in xpcshell, r=ted
This commit is contained in:
Родитель
888bd4b9f3
Коммит
625bae93d8
|
@ -62,10 +62,14 @@
|
|||
#include "nsIDirectoryService.h"
|
||||
#include "nsILocalFile.h"
|
||||
#include "nsDirectoryServiceDefs.h"
|
||||
#include "nsAppDirectoryServiceDefs.h"
|
||||
#include "jsapi.h"
|
||||
#include "jsdbgapi.h"
|
||||
#include "jsprf.h"
|
||||
#include "nscore.h"
|
||||
#include "nsArrayEnumerator.h"
|
||||
#include "nsCOMArray.h"
|
||||
#include "nsDirectoryServiceUtils.h"
|
||||
#include "nsMemory.h"
|
||||
#include "nsIGenericFactory.h"
|
||||
#include "nsISupportsImpl.h"
|
||||
|
@ -97,11 +101,12 @@
|
|||
|
||||
#include "nsIJSContextStack.h"
|
||||
|
||||
class XPCShellDirProvider : public nsIDirectoryServiceProvider
|
||||
class XPCShellDirProvider : public nsIDirectoryServiceProvider2
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_NSIDIRECTORYSERVICEPROVIDER
|
||||
NS_DECL_NSIDIRECTORYSERVICEPROVIDER2
|
||||
|
||||
XPCShellDirProvider() { }
|
||||
~XPCShellDirProvider() { }
|
||||
|
@ -1803,7 +1808,9 @@ XPCShellDirProvider::Release()
|
|||
return 1;
|
||||
}
|
||||
|
||||
NS_IMPL_QUERY_INTERFACE1(XPCShellDirProvider, nsIDirectoryServiceProvider)
|
||||
NS_IMPL_QUERY_INTERFACE2(XPCShellDirProvider,
|
||||
nsIDirectoryServiceProvider,
|
||||
nsIDirectoryServiceProvider2)
|
||||
|
||||
NS_IMETHODIMP
|
||||
XPCShellDirProvider::GetFile(const char *prop, PRBool *persistent,
|
||||
|
@ -1817,3 +1824,24 @@ XPCShellDirProvider::GetFile(const char *prop, PRBool *persistent,
|
|||
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
XPCShellDirProvider::GetFiles(const char *prop, nsISimpleEnumerator* *result)
|
||||
{
|
||||
if (mGREDir && !strcmp(prop, "ChromeML")) {
|
||||
nsCOMArray<nsIFile> dirs;
|
||||
|
||||
nsCOMPtr<nsIFile> file;
|
||||
mGREDir->Clone(getter_AddRefs(file));
|
||||
file->AppendNative(NS_LITERAL_CSTRING("chrome"));
|
||||
dirs.AppendObject(file);
|
||||
|
||||
nsresult rv = NS_GetSpecialDirectory(NS_APP_CHROME_DIR,
|
||||
getter_AddRefs(file));
|
||||
if (NS_SUCCEEDED(rv))
|
||||
dirs.AppendObject(file);
|
||||
|
||||
return NS_NewArrayEnumerator(result, dirs);
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
|
|
@ -790,7 +790,7 @@ nsDirectoryService::GetFile(const char *prop, PRBool *persistent, nsIFile **_ret
|
|||
*_retval = nsnull;
|
||||
*persistent = PR_TRUE;
|
||||
|
||||
nsIAtom* inAtom = NS_NewAtom(prop);
|
||||
nsCOMPtr<nsIAtom> inAtom = do_GetAtom(prop);
|
||||
|
||||
// check to see if it is one of our defaults
|
||||
|
||||
|
@ -830,14 +830,22 @@ nsDirectoryService::GetFile(const char *prop, PRBool *persistent, nsIFile **_ret
|
|||
else if (inAtom == nsDirectoryService::sGRE_ComponentDirectory)
|
||||
{
|
||||
rv = Get(NS_GRE_DIR, NS_GET_IID(nsILocalFile), getter_AddRefs(localFile));
|
||||
if (localFile)
|
||||
localFile->AppendNative(COMPONENT_DIRECTORY);
|
||||
if (localFile) {
|
||||
nsCOMPtr<nsIFile> cdir;
|
||||
localFile->Clone(getter_AddRefs(cdir));
|
||||
cdir->AppendNative(COMPONENT_DIRECTORY);
|
||||
localFile = do_QueryInterface(cdir);
|
||||
}
|
||||
}
|
||||
else if (inAtom == nsDirectoryService::sComponentDirectory)
|
||||
{
|
||||
rv = GetCurrentProcessDirectory(getter_AddRefs(localFile));
|
||||
if (localFile)
|
||||
localFile->AppendNative(COMPONENT_DIRECTORY);
|
||||
if (localFile) {
|
||||
nsCOMPtr<nsIFile> cdir;
|
||||
localFile->Clone(getter_AddRefs(cdir));
|
||||
cdir->AppendNative(COMPONENT_DIRECTORY);
|
||||
localFile = do_QueryInterface(cdir);
|
||||
}
|
||||
}
|
||||
else if (inAtom == nsDirectoryService::sOS_DriveDirectory)
|
||||
{
|
||||
|
@ -1205,15 +1213,13 @@ nsDirectoryService::GetFile(const char *prop, PRBool *persistent, nsIFile **_ret
|
|||
}
|
||||
#endif
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
NS_RELEASE(inAtom);
|
||||
if (!localFile)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (localFile && NS_SUCCEEDED(rv))
|
||||
return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)_retval);
|
||||
#ifdef DEBUG_dougt
|
||||
printf("Failed to find directory for key: %s\n", prop);
|
||||
#endif
|
||||
return rv;
|
||||
return CallQueryInterface(localFile, _retval);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
|
Загрузка…
Ссылка в новой задаче