Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: chrome/browser/search/hotword_service.cc

Issue 992173002: Delete the old hotwording integration. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@hotword-remove-disable-option
Patch Set: Rebase Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/search/hotword_service.h" 5 #include "chrome/browser/search/hotword_service.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/i18n/case_conversion.h" 10 #include "base/i18n/case_conversion.h"
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 // This is used for UMA stats -- do not reorder or delete items; only add to 121 // This is used for UMA stats -- do not reorder or delete items; only add to
122 // the end. 122 // the end.
123 enum HotwordError { 123 enum HotwordError {
124 NO_HOTWORD_ERROR = 0, 124 NO_HOTWORD_ERROR = 0,
125 GENERIC_HOTWORD_ERROR, 125 GENERIC_HOTWORD_ERROR,
126 NACL_HOTWORD_ERROR, 126 NACL_HOTWORD_ERROR,
127 MICROPHONE_HOTWORD_ERROR, 127 MICROPHONE_HOTWORD_ERROR,
128 NUM_HOTWORD_ERROR_METRICS 128 NUM_HOTWORD_ERROR_METRICS
129 }; 129 };
130 130
131 void RecordExtensionAvailabilityMetrics(
132 ExtensionService* service,
133 const extensions::Extension* extension) {
134 HotwordExtensionAvailability availability_state = UNAVAILABLE;
135 if (extension) {
136 availability_state = AVAILABLE;
137 } else if (service->pending_extension_manager() &&
138 service->pending_extension_manager()->IsIdPending(
139 extension_misc::kHotwordExtensionId)) {
140 availability_state = PENDING_DOWNLOAD;
141 } else if (!service->IsExtensionEnabled(
142 extension_misc::kHotwordExtensionId)) {
143 availability_state = DISABLED_EXTENSION;
144 }
145 UMA_HISTOGRAM_ENUMERATION("Hotword.HotwordExtensionAvailability",
146 availability_state,
147 NUM_HOTWORD_EXTENSION_AVAILABILITY_METRICS);
148 }
149
150 void RecordLoggingMetrics(Profile* profile) { 131 void RecordLoggingMetrics(Profile* profile) {
151 // If the user is not opted in to hotword voice search, the audio logging 132 // If the user is not opted in to hotword voice search, the audio logging
152 // metric is not valid so it is not recorded. 133 // metric is not valid so it is not recorded.
153 if (!profile->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)) 134 if (!profile->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled))
154 return; 135 return;
155 136
156 UMA_HISTOGRAM_BOOLEAN( 137 UMA_HISTOGRAM_BOOLEAN(
157 "Hotword.HotwordAudioLogging", 138 "Hotword.HotwordAudioLogging",
158 profile->GetPrefs()->GetBoolean(prefs::kHotwordAudioLoggingEnabled)); 139 profile->GetPrefs()->GetBoolean(prefs::kHotwordAudioLoggingEnabled));
159 } 140 }
(...skipping 18 matching lines...) Expand all
178 error, 159 error,
179 NUM_HOTWORD_ERROR_METRICS); 160 NUM_HOTWORD_ERROR_METRICS);
180 } 161 }
181 162
182 void RecordHotwordEnabledMetric(HotwordService *service, Profile* profile) { 163 void RecordHotwordEnabledMetric(HotwordService *service, Profile* profile) {
183 HotwordEnabled enabled_state = DISABLED; 164 HotwordEnabled enabled_state = DISABLED;
184 auto prefs = profile->GetPrefs(); 165 auto prefs = profile->GetPrefs();
185 if (!prefs->HasPrefPath(prefs::kHotwordSearchEnabled) && 166 if (!prefs->HasPrefPath(prefs::kHotwordSearchEnabled) &&
186 !prefs->HasPrefPath(prefs::kHotwordAlwaysOnSearchEnabled)) { 167 !prefs->HasPrefPath(prefs::kHotwordAlwaysOnSearchEnabled)) {
187 enabled_state = UNSET; 168 enabled_state = UNSET;
188 } else if (service->IsExperimentalHotwordingEnabled() && 169 } else if (service->IsAlwaysOnEnabled()) {
189 service->IsAlwaysOnEnabled()) {
190 enabled_state = ALWAYS_ON_ENABLED; 170 enabled_state = ALWAYS_ON_ENABLED;
191 } else if (prefs->GetBoolean(prefs::kHotwordSearchEnabled)) { 171 } else if (prefs->GetBoolean(prefs::kHotwordSearchEnabled)) {
192 enabled_state = ENABLED; 172 enabled_state = ENABLED;
193 } 173 }
194 UMA_HISTOGRAM_ENUMERATION("Hotword.Enabled", enabled_state, 174 UMA_HISTOGRAM_ENUMERATION("Hotword.Enabled", enabled_state,
195 NUM_HOTWORD_ENABLED_METRICS); 175 NUM_HOTWORD_ENABLED_METRICS);
196 } 176 }
197 177
198 ExtensionService* GetExtensionService(Profile* profile) { 178 ExtensionService* GetExtensionService(Profile* profile) {
199 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 179 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 l10n_util::NormalizeLocale(GetCurrentLocale(profile)); 266 l10n_util::NormalizeLocale(GetCurrentLocale(profile));
287 base::StringToLowerASCII(&normalized_locale); 267 base::StringToLowerASCII(&normalized_locale);
288 268
289 for (size_t i = 0; i < arraysize(kSupportedLocales); i++) { 269 for (size_t i = 0; i < arraysize(kSupportedLocales); i++) {
290 if (normalized_locale == kSupportedLocales[i]) 270 if (normalized_locale == kSupportedLocales[i])
291 return true; 271 return true;
292 } 272 }
293 return false; 273 return false;
294 } 274 }
295 275
296 // static
297 bool HotwordService::IsExperimentalHotwordingEnabled() {
298 return true;
299 }
300
301 #if defined(OS_CHROMEOS) 276 #if defined(OS_CHROMEOS)
302 class HotwordService::HotwordUserSessionStateObserver 277 class HotwordService::HotwordUserSessionStateObserver
303 : public user_manager::UserManager::UserSessionStateObserver { 278 : public user_manager::UserManager::UserSessionStateObserver {
304 public: 279 public:
305 explicit HotwordUserSessionStateObserver(HotwordService* service) 280 explicit HotwordUserSessionStateObserver(HotwordService* service)
306 : service_(service) {} 281 : service_(service) {}
307 282
308 // Overridden from UserSessionStateObserver: 283 // Overridden from UserSessionStateObserver:
309 void ActiveUserChanged(const user_manager::User* active_user) override { 284 void ActiveUserChanged(const user_manager::User* active_user) override {
310 service_->ActiveUserChanged(); 285 service_->ActiveUserChanged();
(...skipping 14 matching lines...) Expand all
325 300
326 HotwordService::HotwordService(Profile* profile) 301 HotwordService::HotwordService(Profile* profile)
327 : profile_(profile), 302 : profile_(profile),
328 extension_registry_observer_(this), 303 extension_registry_observer_(this),
329 client_(NULL), 304 client_(NULL),
330 error_message_(0), 305 error_message_(0),
331 reinstall_pending_(false), 306 reinstall_pending_(false),
332 training_(false), 307 training_(false),
333 weak_factory_(this) { 308 weak_factory_(this) {
334 extension_registry_observer_.Add(extensions::ExtensionRegistry::Get(profile)); 309 extension_registry_observer_.Add(extensions::ExtensionRegistry::Get(profile));
335 if (IsExperimentalHotwordingEnabled()) { 310
336 // Disable the old extension so it doesn't interfere with the new stuff. 311 // Disable the old extension so it doesn't interfere with the new stuff.
337 DisableHotwordExtension(GetExtensionService(profile_)); 312 ExtensionService* extension_service = GetExtensionService(profile_);
338 } else { 313 if (extension_service) {
339 if (!profile_->GetPrefs()->HasPrefPath(prefs::kHotwordSearchEnabled) && 314 extension_service->DisableExtension(
340 IsHotwordAllowed()) { 315 extension_misc::kHotwordOldExtensionId,
341 // If the preference has not been set the hotword extension should 316 extensions::Extension::DISABLE_USER_ACTION);
342 // not be running. However, this should only be done if auto-install
343 // is enabled which is gated through the IsHotwordAllowed check.
344 DisableHotwordExtension(GetExtensionService(profile_));
345 }
346 } 317 }
318
347 // This will be called during profile initialization which is a good time 319 // This will be called during profile initialization which is a good time
348 // to check the user's hotword state. 320 // to check the user's hotword state.
349 RecordHotwordEnabledMetric(this, profile_); 321 RecordHotwordEnabledMetric(this, profile_);
350 322
351 pref_registrar_.Init(profile_->GetPrefs()); 323 pref_registrar_.Init(profile_->GetPrefs());
352 pref_registrar_.Add( 324 pref_registrar_.Add(
353 prefs::kHotwordSearchEnabled,
354 base::Bind(&HotwordService::OnHotwordSearchEnabledChanged,
355 base::Unretained(this)));
356 pref_registrar_.Add(
357 prefs::kHotwordAlwaysOnSearchEnabled, 325 prefs::kHotwordAlwaysOnSearchEnabled,
358 base::Bind(&HotwordService::OnHotwordAlwaysOnSearchEnabledChanged, 326 base::Bind(&HotwordService::OnHotwordAlwaysOnSearchEnabledChanged,
359 base::Unretained(this))); 327 base::Unretained(this)));
360 328
361 extensions::ExtensionSystem::Get(profile_)->ready().Post( 329 extensions::ExtensionSystem::Get(profile_)->ready().Post(
362 FROM_HERE, 330 FROM_HERE,
363 base::Bind(base::IgnoreResult( 331 base::Bind(base::IgnoreResult(
364 &HotwordService::MaybeReinstallHotwordExtension), 332 &HotwordService::MaybeReinstallHotwordExtension),
365 weak_factory_.GetWeakPtr())); 333 weak_factory_.GetWeakPtr()));
366 334
367 // Clear the old user pref because it became unusable. 335 // Clear the old user pref because it became unusable.
368 // TODO(rlp): Remove this code per crbug.com/358789. 336 // TODO(rlp): Remove this code per crbug.com/358789.
369 if (profile_->GetPrefs()->HasPrefPath( 337 if (profile_->GetPrefs()->HasPrefPath(
370 hotword_internal::kHotwordUnusablePrefName)) { 338 hotword_internal::kHotwordUnusablePrefName)) {
371 profile_->GetPrefs()->ClearPref(hotword_internal::kHotwordUnusablePrefName); 339 profile_->GetPrefs()->ClearPref(hotword_internal::kHotwordUnusablePrefName);
372 } 340 }
373 341
374 SetAudioHistoryHandler(new HotwordAudioHistoryHandler( 342 SetAudioHistoryHandler(new HotwordAudioHistoryHandler(
375 profile_, base::MessageLoop::current()->task_runner())); 343 profile_, base::MessageLoop::current()->task_runner()));
376 344
377 if (HotwordServiceFactory::IsAlwaysOnAvailable() && 345 if (HotwordServiceFactory::IsAlwaysOnAvailable() &&
378 IsHotwordAllowed() && 346 IsHotwordAllowed()) {
379 IsExperimentalHotwordingEnabled()) {
380 // Show the hotword notification in 5 seconds if the experimental flag is 347 // Show the hotword notification in 5 seconds if the experimental flag is
381 // on, or in 30 minutes if not. We need to wait at least a few seconds 348 // on, or in 30 minutes if not. We need to wait at least a few seconds
382 // for the hotword extension to be installed. 349 // for the hotword extension to be installed.
383 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 350 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
384 if (command_line->HasSwitch(switches::kEnableExperimentalHotwordHardware)) { 351 if (command_line->HasSwitch(switches::kEnableExperimentalHotwordHardware)) {
385 base::MessageLoop::current()->PostDelayedTask( 352 base::MessageLoop::current()->PostDelayedTask(
386 FROM_HERE, 353 FROM_HERE,
387 base::Bind(&HotwordService::ShowHotwordNotification, 354 base::Bind(&HotwordService::ShowHotwordNotification,
388 weak_factory_.GetWeakPtr()), 355 weak_factory_.GetWeakPtr()),
389 base::TimeDelta::FromSeconds(5)); 356 base::TimeDelta::FromSeconds(5));
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 profile_->GetPrefs()->SetBoolean( 416 profile_->GetPrefs()->SetBoolean(
450 prefs::kHotwordAlwaysOnNotificationSeen, true); 417 prefs::kHotwordAlwaysOnNotificationSeen, true);
451 } 418 }
452 419
453 void HotwordService::OnExtensionUninstalled( 420 void HotwordService::OnExtensionUninstalled(
454 content::BrowserContext* browser_context, 421 content::BrowserContext* browser_context,
455 const extensions::Extension* extension, 422 const extensions::Extension* extension,
456 extensions::UninstallReason reason) { 423 extensions::UninstallReason reason) {
457 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 424 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
458 425
459 if ((extension->id() != extension_misc::kHotwordExtensionId && 426 if (extension->id() != extension_misc::kHotwordSharedModuleId ||
460 extension->id() != extension_misc::kHotwordSharedModuleId) || 427 profile_ != Profile::FromBrowserContext(browser_context) ||
461 profile_ != Profile::FromBrowserContext(browser_context) ||
462 !GetExtensionService(profile_)) 428 !GetExtensionService(profile_))
463 return; 429 return;
464 430
465 // If the extension wasn't uninstalled due to language change, don't try to 431 // If the extension wasn't uninstalled due to language change, don't try to
466 // reinstall it. 432 // reinstall it.
467 if (!reinstall_pending_) 433 if (!reinstall_pending_)
468 return; 434 return;
469 435
470 InstallHotwordExtensionFromWebstore(kMaxInstallRetries); 436 InstallHotwordExtensionFromWebstore(kMaxInstallRetries);
471 SetPreviousLanguagePref(); 437 SetPreviousLanguagePref();
472 } 438 }
473 439
474 std::string HotwordService::ReinstalledExtensionId() { 440 std::string HotwordService::ReinstalledExtensionId() {
475 if (IsExperimentalHotwordingEnabled()) 441 return extension_misc::kHotwordSharedModuleId;
476 return extension_misc::kHotwordSharedModuleId;
477
478 return extension_misc::kHotwordExtensionId;
479 } 442 }
480 443
481 void HotwordService::InstalledFromWebstoreCallback( 444 void HotwordService::InstalledFromWebstoreCallback(
482 int num_tries, 445 int num_tries,
483 bool success, 446 bool success,
484 const std::string& error, 447 const std::string& error,
485 extensions::webstore_install::Result result) { 448 extensions::webstore_install::Result result) {
486 if (result != extensions::webstore_install::SUCCESS && num_tries) { 449 if (result != extensions::webstore_install::SUCCESS && num_tries) {
487 // Try again on failure. 450 // Try again on failure.
488 content::BrowserThread::PostDelayedTask( 451 content::BrowserThread::PostDelayedTask(
(...skipping 14 matching lines...) Expand all
503 weak_factory_.GetWeakPtr(), 466 weak_factory_.GetWeakPtr(),
504 num_tries - 1)); 467 num_tries - 1));
505 installer_->BeginInstall(); 468 installer_->BeginInstall();
506 } 469 }
507 470
508 void HotwordService::OnExtensionInstalled( 471 void HotwordService::OnExtensionInstalled(
509 content::BrowserContext* browser_context, 472 content::BrowserContext* browser_context,
510 const extensions::Extension* extension, 473 const extensions::Extension* extension,
511 bool is_update) { 474 bool is_update) {
512 475
513 if ((extension->id() != extension_misc::kHotwordExtensionId && 476 if (extension->id() != extension_misc::kHotwordSharedModuleId ||
514 extension->id() != extension_misc::kHotwordSharedModuleId) || 477 profile_ != Profile::FromBrowserContext(browser_context))
515 profile_ != Profile::FromBrowserContext(browser_context))
516 return; 478 return;
517 479
518 // If the previous locale pref has never been set, set it now since 480 // If the previous locale pref has never been set, set it now since
519 // the extension has been installed. 481 // the extension has been installed.
520 if (!profile_->GetPrefs()->HasPrefPath(prefs::kHotwordPreviousLanguage)) 482 if (!profile_->GetPrefs()->HasPrefPath(prefs::kHotwordPreviousLanguage))
521 SetPreviousLanguagePref(); 483 SetPreviousLanguagePref();
522 484
523 // If MaybeReinstallHotwordExtension already triggered an uninstall, we 485 // If MaybeReinstallHotwordExtension already triggered an uninstall, we
524 // don't want to loop and trigger another uninstall-install cycle. 486 // don't want to loop and trigger another uninstall-install cycle.
525 // However, if we arrived here via an uninstall-triggered-install (and in 487 // However, if we arrived here via an uninstall-triggered-install (and in
526 // that case |reinstall_pending_| will be true) then we know install 488 // that case |reinstall_pending_| will be true) then we know install
527 // has completed and we can reset |reinstall_pending_|. 489 // has completed and we can reset |reinstall_pending_|.
528 if (!reinstall_pending_) 490 if (!reinstall_pending_)
529 MaybeReinstallHotwordExtension(); 491 MaybeReinstallHotwordExtension();
530 else 492 else
531 reinstall_pending_ = false; 493 reinstall_pending_ = false;
532
533 // Now that the extension is installed, if the user has not selected
534 // the preference on, make sure it is turned off.
535 //
536 // Disabling the extension automatically on install should only occur
537 // if the user is in the field trial for auto-install which is gated
538 // by the IsHotwordAllowed check. The check for IsHotwordAllowed() here
539 // can be removed once it's known that few people have manually
540 // installed extension.
541 if (IsHotwordAllowed() && !IsSometimesOnEnabled())
542 DisableHotwordExtension(GetExtensionService(profile_));
543 } 494 }
544 495
545 bool HotwordService::MaybeReinstallHotwordExtension() { 496 bool HotwordService::MaybeReinstallHotwordExtension() {
546 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 497 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
547 498
548 ExtensionService* extension_service = GetExtensionService(profile_); 499 ExtensionService* extension_service = GetExtensionService(profile_);
549 if (!extension_service) 500 if (!extension_service)
550 return false; 501 return false;
551 502
552 const extensions::Extension* extension = extension_service->GetExtensionById( 503 const extensions::Extension* extension = extension_service->GetExtensionById(
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 extensions::ExtensionSystem* system = 566 extensions::ExtensionSystem* system =
616 extensions::ExtensionSystem::Get(profile_); 567 extensions::ExtensionSystem::Get(profile_);
617 ExtensionService* service = system->extension_service(); 568 ExtensionService* service = system->extension_service();
618 // Include disabled extensions (true parameter) since it may not be enabled 569 // Include disabled extensions (true parameter) since it may not be enabled
619 // if the user opted out. 570 // if the user opted out.
620 const extensions::Extension* extension = 571 const extensions::Extension* extension =
621 service->GetExtensionById(ReinstalledExtensionId(), true); 572 service->GetExtensionById(ReinstalledExtensionId(), true);
622 if (!extension) 573 if (!extension)
623 error_message_ = IDS_HOTWORD_GENERIC_ERROR_MESSAGE; 574 error_message_ = IDS_HOTWORD_GENERIC_ERROR_MESSAGE;
624 575
625 RecordExtensionAvailabilityMetrics(service, extension); 576 // TODO(amistry): Record availability of shared module in UMA.
626 RecordLoggingMetrics(profile_); 577 RecordLoggingMetrics(profile_);
627 578
628 // Determine if NaCl is available. 579 // Determine if NaCl is available.
629 bool nacl_enabled = false; 580 bool nacl_enabled = false;
630 base::FilePath path; 581 base::FilePath path;
631 if (PathService::Get(chrome::FILE_NACL_PLUGIN, &path)) { 582 if (PathService::Get(chrome::FILE_NACL_PLUGIN, &path)) {
632 content::WebPluginInfo info; 583 content::WebPluginInfo info;
633 PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile_).get(); 584 PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile_).get();
634 if (content::PluginService::GetInstance()->GetPluginInfoByPath(path, &info)) 585 if (content::PluginService::GetInstance()->GetPluginInfoByPath(path, &info))
635 nacl_enabled = plugin_prefs->IsPluginEnabled(info); 586 nacl_enabled = plugin_prefs->IsPluginEnabled(info);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 profile_->GetPrefs()->GetBoolean(prefs::kHotwordAlwaysOnSearchEnabled) && 633 profile_->GetPrefs()->GetBoolean(prefs::kHotwordAlwaysOnSearchEnabled) &&
683 HotwordServiceFactory::IsAlwaysOnAvailable(); 634 HotwordServiceFactory::IsAlwaysOnAvailable();
684 } 635 }
685 636
686 bool HotwordService::IsSometimesOnEnabled() { 637 bool HotwordService::IsSometimesOnEnabled() {
687 return profile_->GetPrefs()->HasPrefPath(prefs::kHotwordSearchEnabled) && 638 return profile_->GetPrefs()->HasPrefPath(prefs::kHotwordSearchEnabled) &&
688 profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled) && 639 profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled) &&
689 !HotwordServiceFactory::IsAlwaysOnAvailable(); 640 !HotwordServiceFactory::IsAlwaysOnAvailable();
690 } 641 }
691 642
692 void HotwordService::EnableHotwordExtension(
693 ExtensionService* extension_service) {
694 if (extension_service && !IsExperimentalHotwordingEnabled())
695 extension_service->EnableExtension(extension_misc::kHotwordExtensionId);
696 }
697
698 void HotwordService::DisableHotwordExtension(
699 ExtensionService* extension_service) {
700 if (extension_service) {
701 extension_service->DisableExtension(
702 extension_misc::kHotwordExtensionId,
703 extensions::Extension::DISABLE_USER_ACTION);
704 }
705 }
706
707 void HotwordService::LaunchHotwordAudioVerificationApp( 643 void HotwordService::LaunchHotwordAudioVerificationApp(
708 const LaunchMode& launch_mode) { 644 const LaunchMode& launch_mode) {
709 hotword_audio_verification_launch_mode_ = launch_mode; 645 hotword_audio_verification_launch_mode_ = launch_mode;
710 646
711 ExtensionService* extension_service = GetExtensionService(profile_); 647 ExtensionService* extension_service = GetExtensionService(profile_);
712 if (!extension_service) 648 if (!extension_service)
713 return; 649 return;
714 const extensions::Extension* extension = extension_service->GetExtensionById( 650 const extensions::Extension* extension = extension_service->GetExtensionById(
715 extension_misc::kHotwordAudioVerificationAppId, true); 651 extension_misc::kHotwordAudioVerificationAppId, true);
716 if (!extension) 652 if (!extension)
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 profile_->GetPrefs()->SetBoolean(prefs::kHotwordSearchEnabled, false); 726 profile_->GetPrefs()->SetBoolean(prefs::kHotwordSearchEnabled, false);
791 } else if (IsAlwaysOnEnabled()) { 727 } else if (IsAlwaysOnEnabled()) {
792 if (profile_->GetPrefs()->HasPrefPath( 728 if (profile_->GetPrefs()->HasPrefPath(
793 prefs::kHotwordAlwaysOnSearchEnabled)) { 729 prefs::kHotwordAlwaysOnSearchEnabled)) {
794 profile_->GetPrefs()->SetBoolean(prefs::kHotwordAlwaysOnSearchEnabled, 730 profile_->GetPrefs()->SetBoolean(prefs::kHotwordAlwaysOnSearchEnabled,
795 false); 731 false);
796 } 732 }
797 } 733 }
798 } 734 }
799 735
800 void HotwordService::OnHotwordSearchEnabledChanged(
801 const std::string& pref_name) {
802 DCHECK_EQ(pref_name, std::string(prefs::kHotwordSearchEnabled));
803
804 ExtensionService* extension_service = GetExtensionService(profile_);
805 if (profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled))
806 EnableHotwordExtension(extension_service);
807 else
808 DisableHotwordExtension(extension_service);
809 }
810
811 void HotwordService::OnHotwordAlwaysOnSearchEnabledChanged( 736 void HotwordService::OnHotwordAlwaysOnSearchEnabledChanged(
812 const std::string& pref_name) { 737 const std::string& pref_name) {
813 // If the pref for always on has been changed in some way, that means that 738 // If the pref for always on has been changed in some way, that means that
814 // the user is aware of always on (either from settings or another source) 739 // the user is aware of always on (either from settings or another source)
815 // so they don't need to be shown the notification. 740 // so they don't need to be shown the notification.
816 profile_->GetPrefs()->SetBoolean(prefs::kHotwordAlwaysOnNotificationSeen, 741 profile_->GetPrefs()->SetBoolean(prefs::kHotwordAlwaysOnNotificationSeen,
817 true); 742 true);
818 pref_registrar_.Remove(prefs::kHotwordAlwaysOnSearchEnabled); 743 pref_registrar_.Remove(prefs::kHotwordAlwaysOnSearchEnabled);
819 } 744 }
820 745
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 std::string previous_locale = 785 std::string previous_locale =
861 profile_->GetPrefs()->GetString(prefs::kHotwordPreviousLanguage); 786 profile_->GetPrefs()->GetString(prefs::kHotwordPreviousLanguage);
862 std::string locale = GetCurrentLocale(profile_); 787 std::string locale = GetCurrentLocale(profile_);
863 788
864 // If it's a new locale, then the old extension should be uninstalled. 789 // If it's a new locale, then the old extension should be uninstalled.
865 return locale != previous_locale && 790 return locale != previous_locale &&
866 HotwordService::DoesHotwordSupportLanguage(profile_); 791 HotwordService::DoesHotwordSupportLanguage(profile_);
867 } 792 }
868 793
869 void HotwordService::ActiveUserChanged() { 794 void HotwordService::ActiveUserChanged() {
870 // Do nothing for old hotwording.
871 if (!IsExperimentalHotwordingEnabled())
872 return;
873
874 // Don't bother notifying the extension if hotwording is completely off. 795 // Don't bother notifying the extension if hotwording is completely off.
875 if (!IsSometimesOnEnabled() && !IsAlwaysOnEnabled() && !IsTraining()) 796 if (!IsSometimesOnEnabled() && !IsAlwaysOnEnabled() && !IsTraining())
876 return; 797 return;
877 798
878 HotwordPrivateEventService* event_service = 799 HotwordPrivateEventService* event_service =
879 BrowserContextKeyedAPIFactory<HotwordPrivateEventService>::Get(profile_); 800 BrowserContextKeyedAPIFactory<HotwordPrivateEventService>::Get(profile_);
880 // "enabled" isn't being changed, but piggy-back off the notification anyway. 801 // "enabled" isn't being changed, but piggy-back off the notification anyway.
881 if (event_service) 802 if (event_service)
882 event_service->OnEnabledChanged(prefs::kHotwordSearchEnabled); 803 event_service->OnEnabledChanged(prefs::kHotwordSearchEnabled);
883 } 804 }
884 805
885 bool HotwordService::UserIsActive() { 806 bool HotwordService::UserIsActive() {
886 #if defined(OS_CHROMEOS) 807 #if defined(OS_CHROMEOS)
887 // Only support multiple profiles and profile switching in ChromeOS. 808 // Only support multiple profiles and profile switching in ChromeOS.
888 if (user_manager::UserManager::IsInitialized()) { 809 if (user_manager::UserManager::IsInitialized()) {
889 user_manager::User* user = 810 user_manager::User* user =
890 user_manager::UserManager::Get()->GetActiveUser(); 811 user_manager::UserManager::Get()->GetActiveUser();
891 if (user && user->is_profile_created()) 812 if (user && user->is_profile_created())
892 return profile_ == ProfileManager::GetActiveUserProfile(); 813 return profile_ == ProfileManager::GetActiveUserProfile();
893 } 814 }
894 #endif 815 #endif
895 return true; 816 return true;
896 } 817 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698