Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1802)

Unified Diff: chrome/browser/extensions/external_extension_provider_impl.cc

Issue 8245018: Remove race condition when installing default apps into a new profile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Addressing review comments Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/external_extension_provider_impl.h ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/external_extension_provider_impl.cc
===================================================================
--- chrome/browser/extensions/external_extension_provider_impl.cc (revision 106910)
+++ chrome/browser/extensions/external_extension_provider_impl.cc (working copy)
@@ -14,7 +14,6 @@
#include "base/values.h"
#include "base/version.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/extensions/default_apps_trial.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/external_extension_provider_interface.h"
#include "chrome/browser/extensions/external_policy_extension_loader.h"
@@ -26,13 +25,15 @@
#include "content/browser/browser_thread.h"
#include "ui/base/l10n/l10n_util.h"
+#if !defined(OS_CHROMEOS)
+#include "chrome/browser/extensions/default_apps.h"
+#endif
+
#if defined(OS_WIN)
#include "chrome/browser/extensions/external_registry_extension_loader_win.h"
#endif
// Constants for keeping track of extension preferences in a dictionary.
-const char ExternalExtensionProviderImpl::kLocation[] = "location";
-const char ExternalExtensionProviderImpl::kState[] = "state";
const char ExternalExtensionProviderImpl::kExternalCrx[] = "external_crx";
const char ExternalExtensionProviderImpl::kExternalVersion[] =
"external_version";
@@ -41,47 +42,6 @@
const char ExternalExtensionProviderImpl::kSupportedLocales[] =
"supported_locales";
-#if !defined(OS_CHROMEOS)
-class DefaultAppsProvider : public ExternalExtensionProviderImpl {
- public:
- DefaultAppsProvider(VisitorInterface* service, Profile* profile)
- : ExternalExtensionProviderImpl(service,
- new ExternalPrefExtensionLoader(chrome::DIR_DEFAULT_APPS,
- ExternalPrefExtensionLoader::NONE),
- Extension::EXTERNAL_PREF, Extension::INVALID),
- profile_(profile) {
- DCHECK(profile_);
- }
-
- // ExternalExtensionProviderImpl overrides:
- virtual void ServiceShutdown() OVERRIDE;
- virtual void VisitRegisteredExtension() const OVERRIDE;
-
- private:
- Profile* profile_;
-
- DISALLOW_COPY_AND_ASSIGN(DefaultAppsProvider);
-};
-
-void DefaultAppsProvider::ServiceShutdown() {
- profile_ = NULL;
- ExternalExtensionProviderImpl::ServiceShutdown();
-}
-
-void DefaultAppsProvider::VisitRegisteredExtension() const {
- // Don't install default apps if the profile already has apps installed.
- if (profile_) {
- ExtensionService* extension_service = profile_->GetExtensionService();
- if (extension_service && extension_service->HasApps()) {
- service()->OnExternalProviderReady(this);
- return;
- }
- }
-
- ExternalExtensionProviderImpl::VisitRegisteredExtension();
-}
-#endif
-
ExternalExtensionProviderImpl::ExternalExtensionProviderImpl(
VisitorInterface* service,
ExternalExtensionLoader* loader,
@@ -382,46 +342,15 @@
Extension::EXTERNAL_POLICY_DOWNLOAD)));
#if !defined(OS_CHROMEOS)
- // We decide to install or not install default apps based on the following
- // criteria, from highest priority to lowest priority:
- //
- // - if this instance of chrome is participating in the default apps
- // field trial, then install apps based on the group
- // - the command line option. Tests use this option to disable installation
- // of default apps in some cases
- // - the preferences value in the profile. This value is usually set in
- // the master_preferences file
- bool install_apps =
- profile->GetPrefs()->GetString(prefs::kDefaultApps) == "install";
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kDisableDefaultApps)) {
- install_apps = false;
+ if (default_apps::ShouldInstallInProfile(profile)) {
+ provider_list->push_back(
+ linked_ptr<ExternalExtensionProviderInterface>(
+ new ExternalExtensionProviderImpl(
+ service,
+ new ExternalPrefExtensionLoader(
+ chrome::DIR_DEFAULT_APPS, options),
+ Extension::EXTERNAL_PREF,
+ Extension::INVALID)));
}
- if (base::FieldTrialList::TrialExists(kDefaultAppsTrial_Name)) {
- install_apps = base::FieldTrialList::Find(
- kDefaultAppsTrial_Name)->group_name() != kDefaultAppsTrial_NoAppsGroup;
- }
-
- if (install_apps) {
- // Don't bother installing default apps in locales where its known that
- // they don't work.
- // TODO(rogerta): Do this check dynamically once the webstore can expose
- // an API.
- const std::string& locale = g_browser_process->GetApplicationLocale();
- static const char* unsupported_locales[] = {"CN", "TR", "IR"};
- bool supported_locale = true;
- for (size_t i = 0; i < arraysize(unsupported_locales); ++i) {
- if (EndsWith(locale, unsupported_locales[i], false)) {
- supported_locale = false;
- break;
- }
- }
-
- if (supported_locale) {
- provider_list->push_back(
- linked_ptr<ExternalExtensionProviderInterface>(
- new DefaultAppsProvider(service, profile)));
- }
- }
#endif
}
« no previous file with comments | « chrome/browser/extensions/external_extension_provider_impl.h ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698