Пример #1
0
void
nsXREDirProvider::LoadAppBundleDirs()
{
  nsCOMPtr<nsIFile> dir;
  nsresult rv = mXULAppDir->Clone(getter_AddRefs(dir));
  if (NS_FAILED(rv))
    return;

  dir->AppendNative(NS_LITERAL_CSTRING("distribution"));
  dir->AppendNative(NS_LITERAL_CSTRING("bundles"));

  nsCOMPtr<nsISimpleEnumerator> e;
  rv = dir->GetDirectoryEntries(getter_AddRefs(e));
  if (NS_FAILED(rv))
    return;

  nsCOMPtr<nsIDirectoryEnumerator> files = do_QueryInterface(e);
  if (!files)
    return;

  nsCOMPtr<nsIFile> subdir;
  while (NS_SUCCEEDED(files->GetNextFile(getter_AddRefs(subdir))) && subdir) {
    mAppBundleDirectories.AppendObject(subdir);

    nsCOMPtr<nsILocalFile> manifest =
      CloneAndAppend(subdir, "chrome.manifest");
    XRE_AddManifestLocation(NS_COMPONENT_LOCATION, manifest);
  }
}
Пример #2
0
static void
LoadExtensionDirectories(nsINIParser &parser,
                         const char *aSection,
                         nsCOMArray<nsIFile> &aDirectories,
                         NSLocationType aType)
{
  nsresult rv;
  PRInt32 i = 0;
  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;

    aDirectories.AppendObject(dir);

    nsCOMPtr<nsILocalFile> manifest =
      CloneAndAppend(dir, "chrome.manifest");
    XRE_AddManifestLocation(aType, manifest);
  }
  while (PR_TRUE);
}
Пример #3
0
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
    }
  }
}
Пример #4
0
bool
EmbedLiteApp::StartChildThread()
{
  NS_ENSURE_TRUE(mEmbedType == EMBED_THREAD, false);
  LOGT("mUILoop:%p, current:%p", mUILoop, MessageLoop::current());
  NS_ASSERTION(MessageLoop::current() != mUILoop,
               "Current message loop must be null and not equals to mUILoop");
  for (int i = 0; i < sComponentDirs.Length(); i++) {
    nsCOMPtr<nsIFile> f;
    NS_NewNativeLocalFile(sComponentDirs[i], true,
                          getter_AddRefs(f));
    XRE_AddManifestLocation(NS_COMPONENT_LOCATION, f);
  }
  GeckoLoader::InitEmbedding(mProfilePath);
  mAppThread = new EmbedLiteAppThread(mUILoop);
  return true;
}
Пример #5
0
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);
}
Пример #6
0
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);
#ifdef MOZ_BUILD_APP_IS_BROWSER
    } 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}"));
      themeManifest->AppendNative(NS_LITERAL_CSTRING("chrome.manifest"));
      XRE_AddManifestLocation(NS_SKIN_LOCATION, themeManifest);
#endif
    }
  }
}
Пример #7
0
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);
}