| Index: chrome/browser/search/hotword_service.cc
|
| ===================================================================
|
| --- chrome/browser/search/hotword_service.cc (revision 259015)
|
| +++ chrome/browser/search/hotword_service.cc (working copy)
|
| @@ -60,6 +60,16 @@
|
| NUM_HOTWORD_EXTENSION_AVAILABILITY_METRICS);
|
| }
|
|
|
| +ExtensionService* GetExtensionService(Profile* profile) {
|
| + CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| +
|
| + extensions::ExtensionSystem* extension_system =
|
| + extensions::ExtensionSystem::Get(profile);
|
| + if (extension_system)
|
| + return extension_system->extension_service();
|
| + return NULL;
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace hotword_internal {
|
| @@ -93,9 +103,19 @@
|
| enabled_state = ENABLED;
|
| else
|
| enabled_state = DISABLED;
|
| + } else {
|
| + // If the preference has not been set the hotword extension should
|
| + // not be running.
|
| + DisableHotwordExtension(GetExtensionService(profile_));
|
| }
|
| UMA_HISTOGRAM_ENUMERATION("Hotword.Enabled", enabled_state,
|
| NUM_HOTWORD_ENABLED_METRICS);
|
| +
|
| + pref_registrar_.Init(profile_->GetPrefs());
|
| + pref_registrar_.Add(
|
| + prefs::kHotwordSearchEnabled,
|
| + base::Bind(&HotwordService::OnHotwordSearchEnabledChanged,
|
| + base::Unretained(this)));
|
| }
|
|
|
| HotwordService::~HotwordService() {
|
| @@ -130,10 +150,10 @@
|
| extensions::ExtensionSystem* system =
|
| extensions::ExtensionSystem::Get(profile_);
|
| ExtensionService* service = system->extension_service();
|
| - // Do not include disabled extension (false parameter) because if the
|
| - // extension is disabled, it's not available.
|
| + // Include disabled extensions (true parameter) since it may not be enabled
|
| + // if the user opted out.
|
| const extensions::Extension* extension =
|
| - service->GetExtensionById(extension_misc::kHotwordExtensionId, false);
|
| + service->GetExtensionById(extension_misc::kHotwordExtensionId, true);
|
|
|
| RecordAvailabilityMetrics(service, extension);
|
|
|
| @@ -147,3 +167,38 @@
|
| group != hotword_internal::kHotwordFieldTrialDisabledGroupName &&
|
| DoesHotwordSupportLanguage(profile_);
|
| }
|
| +
|
| +bool HotwordService::RetryHotwordExtension() {
|
| + ExtensionService* extension_service = GetExtensionService(profile_);
|
| + if (!extension_service)
|
| + return false;
|
| +
|
| + extension_service->ReloadExtension(extension_misc::kHotwordExtensionId);
|
| + return true;
|
| +}
|
| +
|
| +void HotwordService::EnableHotwordExtension(
|
| + ExtensionService* extension_service) {
|
| + if (extension_service)
|
| + extension_service->EnableExtension(extension_misc::kHotwordExtensionId);
|
| +}
|
| +
|
| +void HotwordService::DisableHotwordExtension(
|
| + ExtensionService* extension_service) {
|
| + if (extension_service) {
|
| + extension_service->DisableExtension(
|
| + extension_misc::kHotwordExtensionId,
|
| + extensions::Extension::DISABLE_USER_ACTION);
|
| + }
|
| +}
|
| +
|
| +void HotwordService::OnHotwordSearchEnabledChanged(
|
| + const std::string& pref_name) {
|
| + DCHECK_EQ(pref_name, std::string(prefs::kHotwordSearchEnabled));
|
| +
|
| + ExtensionService* extension_service = GetExtensionService(profile_);
|
| + if (profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled))
|
| + EnableHotwordExtension(extension_service);
|
| + else
|
| + DisableHotwordExtension(extension_service);
|
| +}
|
|
|