Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / external_component_loader.cc
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/sync_driver/pref_names.h"
19 #include "components/user_prefs/pref_registry_syncable.h"
20 #include "content/public/browser/browser_thread.h"
21
22 #if defined(ENABLE_APP_LIST)
23 #include "ui/app_list/app_list_switches.h"
24 #endif
25
26 namespace extensions {
27
28 namespace {
29
30 bool IsAppListVoiceSearchEnabled() {
31 #if defined(ENABLE_APP_LIST)
32   return app_list::switches::IsVoiceSearchEnabled();
33 #else
34   return false;
35 #endif
36 }
37
38 }  // namespace
39
40 ExternalComponentLoader::ExternalComponentLoader(Profile* profile)
41     : profile_(profile) {
42 }
43
44 ExternalComponentLoader::~ExternalComponentLoader() {}
45
46 void ExternalComponentLoader::StartLoading() {
47   prefs_.reset(new base::DictionaryValue());
48   std::string appId = extension_misc::kInAppPaymentsSupportAppId;
49   prefs_->SetString(appId + ".external_update_url",
50                     extension_urls::GetWebstoreUpdateUrl().spec());
51
52   if (HotwordServiceFactory::IsHotwordAllowed(profile_) ||
53       IsAppListVoiceSearchEnabled()) {
54     std::string hotwordId = extension_misc::kHotwordExtensionId;
55     prefs_->SetString(hotwordId + ".external_update_url",
56                       extension_urls::GetWebstoreUpdateUrl().spec());
57   }
58
59   BookmarksExperimentState bookmarks_experiment_state_before =
60       static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger(
61           sync_driver::prefs::kEnhancedBookmarksExperimentEnabled));
62   if (bookmarks_experiment_state_before == kBookmarksExperimentEnabled) {
63     // kEnhancedBookmarksExperiment flag could have values "", "1" and "0".
64     // "0" - user opted out.
65     if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
66             switches::kEnhancedBookmarksExperiment) != "0") {
67       // Experiment enabled.
68       std::string ext_id = profile_->GetPrefs()->GetString(
69           sync_driver::prefs::kEnhancedBookmarksExtensionId);
70       if (!ext_id.empty()) {
71         prefs_->SetString(ext_id + ".external_update_url",
72                           extension_urls::GetWebstoreUpdateUrl().spec());
73       }
74     } else {
75       // Experiment enabled but user opted out.
76       profile_->GetPrefs()->SetInteger(
77           sync_driver::prefs::kEnhancedBookmarksExperimentEnabled,
78           kBookmarksExperimentEnabledUserOptOut);
79     }
80   } else if (bookmarks_experiment_state_before ==
81              kBookmarksExperimentEnabledUserOptOut) {
82     if (CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
83             switches::kEnhancedBookmarksExperiment) != "0") {
84       // User opted in again.
85       profile_->GetPrefs()->SetInteger(
86           sync_driver::prefs::kEnhancedBookmarksExperimentEnabled,
87           kBookmarksExperimentEnabled);
88       std::string ext_id = profile_->GetPrefs()->GetString(
89           sync_driver::prefs::kEnhancedBookmarksExtensionId);
90       if (!ext_id.empty()) {
91         prefs_->SetString(ext_id + ".external_update_url",
92                           extension_urls::GetWebstoreUpdateUrl().spec());
93       }
94     }
95   } else {
96     // Experiment disabled.
97     profile_->GetPrefs()->ClearPref(
98         sync_driver::prefs::kEnhancedBookmarksExperimentEnabled);
99     profile_->GetPrefs()->ClearPref(
100         sync_driver::prefs::kEnhancedBookmarksExtensionId);
101   }
102   BookmarksExperimentState bookmarks_experiment_state =
103       static_cast<BookmarksExperimentState>(profile_->GetPrefs()->GetInteger(
104           sync_driver::prefs::kEnhancedBookmarksExperimentEnabled));
105   if (bookmarks_experiment_state_before != bookmarks_experiment_state) {
106     UpdateBookmarksExperiment(g_browser_process->local_state(),
107                               bookmarks_experiment_state);
108   }
109
110   LoadFinished();
111 }
112
113 }  // namespace extensions