Chromium Code Reviews| Index: chrome/browser/search/hotword_service.cc |
| diff --git a/chrome/browser/search/hotword_service.cc b/chrome/browser/search/hotword_service.cc |
| index b9f4bfd7d7452beab3561f312bb697f9998091c5..1ab57dcbf36593a176d8a0c5a09053e75253ff85 100644 |
| --- a/chrome/browser/search/hotword_service.cc |
| +++ b/chrome/browser/search/hotword_service.cc |
| @@ -61,6 +61,16 @@ void RecordAvailabilityMetrics( |
| 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 || !extension_system->extension_service()) |
|
Jered
2014/03/12 23:30:49
nit: simpler if written
if (extension_system)
re
rpetterson
2014/03/12 23:34:29
Done.
|
| + return NULL; |
| + return extension_system->extension_service(); |
| +} |
| + |
| } // namespace |
| namespace hotword_internal { |
| @@ -94,9 +104,19 @@ HotwordService::HotwordService(Profile* profile) |
| enabled_state = ENABLED; |
| else |
| enabled_state = DISABLED; |
| + } else { |
| + // If the preference has not been set the hotword extension should |
| + // not be running. |
| + DisableHotwordExtension(); |
| } |
| 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() { |
| @@ -131,10 +151,10 @@ bool HotwordService::IsServiceAvailable() { |
| 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); |
| @@ -150,14 +170,34 @@ bool HotwordService::IsHotwordAllowed() { |
| } |
| bool HotwordService::RetryHotwordExtension() { |
| - CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| - |
| - extensions::ExtensionSystem* extension_system = |
| - extensions::ExtensionSystem::Get(profile_); |
| - if (!extension_system || !extension_system->extension_service()) |
| + ExtensionService* extension_service = GetExtensionService(profile_); |
| + if (!extension_service) |
| return false; |
| - ExtensionService* extension_service = extension_system->extension_service(); |
| extension_service->ReloadExtension(extension_misc::kHotwordExtensionId); |
| return true; |
| } |
| + |
| +void HotwordService::DisableHotwordExtension() { |
| + ExtensionService* extension_service = GetExtensionService(profile_); |
| + if (extension_service) |
|
Jered
2014/03/12 23:30:49
nit: prefer if wrapped lines go in {} but up to yo
rpetterson
2014/03/12 23:34:29
I agree. I just missed that when doing the refacto
|
| + extension_service->DisableExtension( |
| + extension_misc::kHotwordExtensionId, |
| + extensions::Extension::DISABLE_USER_ACTION); |
| +} |
| + |
| +void HotwordService::EnableHotwordExtension() { |
| + ExtensionService* extension_service = GetExtensionService(profile_); |
| + if (extension_service) |
| + extension_service->EnableExtension(extension_misc::kHotwordExtensionId); |
| +} |
| + |
| +void HotwordService::OnHotwordSearchEnabledChanged( |
| + const std::string& pref_name) { |
| + DCHECK_EQ(pref_name, std::string(prefs::kHotwordSearchEnabled)); |
| + |
| + if (profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)) |
| + EnableHotwordExtension(); |
| + else |
| + DisableHotwordExtension(); |
| +} |