int main(int argc, char** argv) { if (argc < 2) { fprintf(stderr, "not enough arguments -- need registration dir path\n"); return 1; } ScopedLogging logging; const char *regPath = argv[1]; XRE_AddManifestLocation(NS_COMPONENT_LOCATION, nsCOMPtr<nsILocalFile>(GetRegDirectory(regPath, "core", "component.manifest"))); XRE_AddManifestLocation(NS_COMPONENT_LOCATION, nsCOMPtr<nsILocalFile>(GetRegDirectory(regPath, "extension", "extComponent.manifest"))); XRE_AddJarManifestLocation(NS_COMPONENT_LOCATION, nsCOMPtr<nsILocalFile>(GetRegDirectory(regPath, "extension2.jar", NULL))); ScopedXPCOM xpcom("RegistrationOrder"); if (xpcom.failed()) return 1; int rv = 0; if (NS_FAILED(TestRegular())) rv = 1; if (NS_FAILED(TestJar())) rv = 1; if (!TestContractFirst()) rv = 1; return rv; }
void nsXREDirProvider::LoadExtensionBundleDirectories() { if (!mozilla::Preferences::GetBool("extensions.defaultProviders.enabled", true)) return; if (mProfileDir) { if (!gSafeMode) { nsCOMPtr<nsIFile> extensionsINI; mProfileDir->Clone(getter_AddRefs(extensionsINI)); if (!extensionsINI) return; extensionsINI->AppendNative(NS_LITERAL_CSTRING("extensions.ini")); nsCOMPtr<nsIFile> extensionsINILF = do_QueryInterface(extensionsINI); if (!extensionsINILF) return; nsINIParser parser; nsresult rv = parser.Init(extensionsINILF); if (NS_FAILED(rv)) return; RegisterExtensionInterpositions(parser); LoadExtensionDirectories(parser, "ExtensionDirs", mExtensionDirectories, NS_EXTENSION_LOCATION); LoadExtensionDirectories(parser, "ThemeDirs", mThemeDirectories, NS_SKIN_LOCATION); /* non-Firefox applications that use overrides in their default theme should * define AC_DEFINE(MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDES) in their * configure.in */ #if defined(MOZ_BUILD_APP_IS_BROWSER) || defined(MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDES) } else { // In safe mode, still load the default theme directory: nsCOMPtr<nsIFile> themeManifest; mXULAppDir->Clone(getter_AddRefs(themeManifest)); themeManifest->AppendNative(NS_LITERAL_CSTRING("extensions")); themeManifest->AppendNative(NS_LITERAL_CSTRING("{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi")); bool exists = false; if (NS_SUCCEEDED(themeManifest->Exists(&exists)) && exists) { XRE_AddJarManifestLocation(NS_SKIN_LOCATION, themeManifest); } else { themeManifest->SetNativeLeafName(NS_LITERAL_CSTRING("{972ce4c6-7e08-4474-a285-3208198ce6fd}")); themeManifest->AppendNative(NS_LITERAL_CSTRING("chrome.manifest")); XRE_AddManifestLocation(NS_SKIN_LOCATION, themeManifest); } #endif } } }
static void LoadExtensionDirectories(nsINIParser &parser, const char *aSection, nsCOMArray<nsIFile> &aDirectories, NSLocationType aType) { nsresult rv; PRInt32 i = 0; nsCOMPtr<nsIPrefServiceInternal> prefs = do_GetService("@mozilla.org/preferences-service;1"); do { nsCAutoString buf("Extension"); buf.AppendInt(i++); nsCAutoString path; rv = parser.GetString(aSection, buf.get(), path); if (NS_FAILED(rv)) return; nsCOMPtr<nsILocalFile> dir = do_CreateInstance("@mozilla.org/file/local;1", &rv); if (NS_FAILED(rv)) continue; rv = dir->SetPersistentDescriptor(path); if (NS_FAILED(rv)) continue; if (Substring(path, path.Length() - 4).Equals(NS_LITERAL_CSTRING(".xpi"))) { XRE_AddJarManifestLocation(aType, dir); if (!prefs) continue; prefs->ReadExtensionPrefs(dir); } else { aDirectories.AppendObject(dir); nsCOMPtr<nsILocalFile> manifest = CloneAndAppend(dir, "chrome.manifest"); XRE_AddManifestLocation(aType, manifest); } } while (PR_TRUE); }
static void LoadExtensionDirectories(nsINIParser &parser, const char *aSection, nsCOMArray<nsIFile> &aDirectories, NSLocationType aType) { nsresult rv; int32_t i = 0; do { nsAutoCString buf("Extension"); buf.AppendInt(i++); nsAutoCString path; rv = parser.GetString(aSection, buf.get(), path); if (NS_FAILED(rv)) return; nsCOMPtr<nsIFile> dir = do_CreateInstance("@mozilla.org/file/local;1", &rv); if (NS_FAILED(rv)) continue; rv = dir->SetPersistentDescriptor(path); if (NS_FAILED(rv)) continue; aDirectories.AppendObject(dir); if (Substring(path, path.Length() - 4).EqualsLiteral(".xpi")) { XRE_AddJarManifestLocation(aType, dir); } else { nsCOMPtr<nsIFile> manifest = CloneAndAppend(dir, "chrome.manifest"); XRE_AddManifestLocation(aType, manifest); } } while (true); }