external_component_loader.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/extensions/external_component_loader.h"
6
7#include "base/command_line.h"
8#include "base/prefs/pref_change_registrar.h"
9#include "base/prefs/pref_service.h"
10#include "base/values.h"
11#include "chrome/browser/bookmarks/enhanced_bookmarks_features.h"
12#include "chrome/browser/browser_process.h"
13#include "chrome/browser/extensions/external_provider_impl.h"
14#include "chrome/browser/search/hotword_service_factory.h"
15#include "chrome/common/chrome_switches.h"
16#include "chrome/common/extensions/extension_constants.h"
17#include "chrome/common/pref_names.h"
18#include "components/user_prefs/pref_registry_syncable.h"
19#include "content/public/browser/browser_thread.h"
20
21#if defined(ENABLE_APP_LIST)
22#include "ui/app_list/app_list_switches.h"
23#endif
24
25namespace extensions {
26
27namespace {
28
29bool IsAppListVoiceSearchEnabled() {
30#if defined(ENABLE_APP_LIST)
31  return app_list::switches::IsVoiceSearchEnabled();
32#else
33  return false;
34#endif
35}
36
37}  // namespace
38
39ExternalComponentLoader::ExternalComponentLoader(Profile* profile)
40    : profile_(profile) {
41}
42
43ExternalComponentLoader::~ExternalComponentLoader() {}
44
45void ExternalComponentLoader::StartLoading() {
46  prefs_.reset(new base::DictionaryValue());
47  std::string appId = extension_misc::kInAppPaymentsSupportAppId;
48  prefs_->SetString(appId + ".external_update_url",
49                    extension_urls::GetWebstoreUpdateUrl().spec());
50
51  if (HotwordServiceFactory::IsHotwordAllowed(profile_) ||
52      IsAppListVoiceSearchEnabled()) {
53    std::string hotwordId = extension_misc::kHotwordExtensionId;
54    prefs_->SetString(hotwordId + ".external_update_url",
55                      extension_urls::GetWebstoreUpdateUrl().spec());
56  }
57
58  BookmarksExperimentState bookmarks_experiment_state_before =
59      static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger(
60          prefs::kEnhancedBookmarksExperimentEnabled));
61  if (bookmarks_experiment_state_before == kBookmarksExperimentEnabled) {
62    // kEnhancedBookmarksExperiment flag could have values "", "1" and "0".
63    // "0" - user opted out.
64    if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
65            switches::kEnhancedBookmarksExperiment) != "0") {
66      // Experiment enabled.
67      std::string ext_id = profile_->GetPrefs()->GetString(
68          prefs::kEnhancedBookmarksExtensionId);
69      if (!ext_id.empty()) {
70        prefs_->SetString(ext_id + ".external_update_url",
71                          extension_urls::GetWebstoreUpdateUrl().spec());
72      }
73    } else {
74      // Experiment enabled but user opted out.
75      profile_->GetPrefs()->SetInteger(
76          prefs::kEnhancedBookmarksExperimentEnabled,
77          kBookmarksExperimentEnabledUserOptOut);
78    }
79  } else if (bookmarks_experiment_state_before ==
80             kBookmarksExperimentEnabledUserOptOut) {
81    if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
82            switches::kEnhancedBookmarksExperiment) != "0") {
83      // User opted in again.
84      profile_->GetPrefs()->SetInteger(
85          prefs::kEnhancedBookmarksExperimentEnabled,
86          kBookmarksExperimentEnabled);
87      std::string ext_id = profile_->GetPrefs()->GetString(
88          prefs::kEnhancedBookmarksExtensionId);
89      if (!ext_id.empty()) {
90        prefs_->SetString(ext_id + ".external_update_url",
91                          extension_urls::GetWebstoreUpdateUrl().spec());
92      }
93    }
94  } else {
95    // Experiment disabled.
96    profile_->GetPrefs()->ClearPref(prefs::kEnhancedBookmarksExperimentEnabled);
97    profile_->GetPrefs()->ClearPref(prefs::kEnhancedBookmarksExtensionId);
98  }
99  BookmarksExperimentState bookmarks_experiment_state =
100      static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger(
101          prefs::kEnhancedBookmarksExperimentEnabled));
102  if (bookmarks_experiment_state_before != bookmarks_experiment_state) {
103    UpdateBookmarksExperiment(g_browser_process->local_state(),
104                              bookmarks_experiment_state);
105  }
106
107  LoadFinished();
108}
109
110}  // namespace extensions
111