From a81c6eec38c81c243b4e8960a7e6b134c2123de5 Mon Sep 17 00:00:00 2001 From: "bsmedberg%covad.net" Date: Thu, 2 Jun 2005 13:33:07 +0000 Subject: [PATCH] Bug 295247 part 2, allow extensions to ship plugins DLLs - r=darin a=shaver git-svn-id: svn://10.0.0.236/trunk@174060 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/toolkit/xre/nsXREDirProvider.cpp | 67 +++++++++++++++--------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/mozilla/toolkit/xre/nsXREDirProvider.cpp b/mozilla/toolkit/xre/nsXREDirProvider.cpp index 4f2961b0c5a..90b14da5c71 100644 --- a/mozilla/toolkit/xre/nsXREDirProvider.cpp +++ b/mozilla/toolkit/xre/nsXREDirProvider.cpp @@ -443,9 +443,15 @@ nsXREDirProvider::GetFiles(const char* aProperty, nsISimpleEnumerator** aResult) nsresult rv = NS_OK; *aResult = nsnull; + nsCOMPtr profileFile; + if (mProfileDir) { + mProfileDir->Clone(getter_AddRefs(profileFile)); + profileFile->AppendNative(NS_LITERAL_CSTRING("extensions.ini")); + } + if (!strcmp(aProperty, NS_XPCOM_COMPONENT_DIR_LIST)) { nsCOMArray directories; - + if (mXULAppDir) { nsCOMPtr file; mXULAppDir->Clone(getter_AddRefs(file)); @@ -458,10 +464,6 @@ nsXREDirProvider::GetFiles(const char* aProperty, nsISimpleEnumerator** aResult) if (mProfileDir && !gSafeMode) { static const char *const kAppendCompDir[] = { "components", nsnull }; - nsCOMPtr profileFile; - mProfileDir->Clone(getter_AddRefs(profileFile)); - profileFile->AppendNative(NS_LITERAL_CSTRING("extensions.ini")); - LoadDirsIntoArray(profileFile, "ExtensionDirs", kAppendCompDir, directories); } @@ -481,15 +483,11 @@ nsXREDirProvider::GetFiles(const char* aProperty, nsISimpleEnumerator** aResult) directories.AppendObject(file); } - if (!gSafeMode) { + if (mProfileDir && !gSafeMode) { static const char *const kAppendPrefDir[] = { "defaults", "preferences", nsnull }; - nsCOMPtr profileFile; - if (mProfileDir) { - mProfileDir->Clone(getter_AddRefs(profileFile)); - profileFile->AppendNative(NS_LITERAL_CSTRING("extensions.ini")); - LoadDirsIntoArray(profileFile, "ExtensionDirs", - kAppendPrefDir, directories); - } + + LoadDirsIntoArray(profileFile, "ExtensionDirs", + kAppendPrefDir, directories); } rv = NS_NewArrayEnumerator(aResult, directories); @@ -509,13 +507,14 @@ nsXREDirProvider::GetFiles(const char* aProperty, nsISimpleEnumerator** aResult) PRBool exists; if (NS_SUCCEEDED(file->Exists(&exists)) && exists) manifests.AppendObject(file); + + mXULAppDir->Clone(getter_AddRefs(file)); + file->AppendNative(NS_LITERAL_CSTRING("chrome.manifest")); + if (NS_SUCCEEDED(file->Exists(&exists)) && exists) + manifests.AppendObject(file); } if (mProfileDir && !gSafeMode) { - nsCOMPtr profileFile; - mProfileDir->Clone(getter_AddRefs(profileFile)); - profileFile->AppendNative(NS_LITERAL_CSTRING("extensions.ini")); - LoadDirsIntoArray(profileFile, "ExtensionDirs", kAppendChromeManifests, manifests); } @@ -525,10 +524,6 @@ nsXREDirProvider::GetFiles(const char* aProperty, nsISimpleEnumerator** aResult) else if (!strcmp(aProperty, NS_SKIN_MANIFESTS_FILE_LIST)) { nsCOMArray manifests; if (mProfileDir && !gSafeMode) { - nsCOMPtr profileFile; - mProfileDir->Clone(getter_AddRefs(profileFile)); - profileFile->AppendNative(NS_LITERAL_CSTRING("extensions.ini")); - LoadDirsIntoArray(profileFile, "ThemeDirs", kAppendChromeManifests, manifests); } @@ -553,16 +548,38 @@ nsXREDirProvider::GetFiles(const char* aProperty, nsISimpleEnumerator** aResult) if (mProfileDir && !gSafeMode) { static const char *const kAppendChromeDir[] = { "chrome", nsnull }; - nsCOMPtr profileFile; - mProfileDir->Clone(getter_AddRefs(profileFile)); - profileFile->AppendNative(NS_LITERAL_CSTRING("extensions.ini")); - LoadDirsIntoArray(profileFile, "ExtensionDirs", kAppendChromeDir, directories); } rv = NS_NewArrayEnumerator(aResult, directories); } + else if (!strcmp(aProperty, NS_APP_PLUGINS_DIR_LIST)) { + nsCOMArray directories; + + // The root dirserviceprovider does quite a bit for us: we're mainly + // interested in xulapp and extension-provided plugins. + if (mXULAppDir) { + nsCOMPtr file; + mXULAppDir->Clone(getter_AddRefs(file)); + file->AppendNative(NS_LITERAL_CSTRING("plugins")); + PRBool exists; + if (NS_SUCCEEDED(file->Exists(&exists)) && exists) + directories.AppendObject(file); + } + + if (mProfileDir && !gSafeMode) { + static const char *const kAppendPlugins[] = { "plugins", nsnull }; + + LoadDirsIntoArray(profileFile, "ExtensionDirs", + kAppendPlugins, directories); + } + + rv = NS_NewArrayEnumerator(aResult, directories); + NS_ENSURE_SUCCESS(rv, rv); + + rv = NS_SUCCESS_AGGREGATE_RESULT; + } else rv = NS_ERROR_FAILURE;