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