| OLD | NEW |
| 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 "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/i18n/case_conversion.h" | 8 #include "base/i18n/case_conversion.h" |
| 9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 } | 155 } |
| 156 | 156 |
| 157 } // namespace | 157 } // namespace |
| 158 | 158 |
| 159 namespace hotword_internal { | 159 namespace hotword_internal { |
| 160 // Constants for the hotword field trial. | 160 // Constants for the hotword field trial. |
| 161 const char kHotwordFieldTrialName[] = "VoiceTrigger"; | 161 const char kHotwordFieldTrialName[] = "VoiceTrigger"; |
| 162 const char kHotwordFieldTrialDisabledGroupName[] = "Disabled"; | 162 const char kHotwordFieldTrialDisabledGroupName[] = "Disabled"; |
| 163 // Old preference constant. | 163 // Old preference constant. |
| 164 const char kHotwordUnusablePrefName[] = "hotword.search_enabled"; | 164 const char kHotwordUnusablePrefName[] = "hotword.search_enabled"; |
| 165 // String passed to indicate the training state has changed. |
| 166 const char kHotwordTrainingEnabled[] = "hotword_training_enabled"; |
| 165 } // namespace hotword_internal | 167 } // namespace hotword_internal |
| 166 | 168 |
| 167 // static | 169 // static |
| 168 bool HotwordService::DoesHotwordSupportLanguage(Profile* profile) { | 170 bool HotwordService::DoesHotwordSupportLanguage(Profile* profile) { |
| 169 std::string normalized_locale = | 171 std::string normalized_locale = |
| 170 l10n_util::NormalizeLocale(GetCurrentLocale(profile)); | 172 l10n_util::NormalizeLocale(GetCurrentLocale(profile)); |
| 171 base::StringToLowerASCII(&normalized_locale); | 173 base::StringToLowerASCII(&normalized_locale); |
| 172 | 174 |
| 173 for (size_t i = 0; i < arraysize(kSupportedLocales); i++) { | 175 for (size_t i = 0; i < arraysize(kSupportedLocales); i++) { |
| 174 if (normalized_locale.compare(0, 2, kSupportedLocales[i]) == 0) | 176 if (normalized_locale.compare(0, 2, kSupportedLocales[i]) == 0) |
| 175 return true; | 177 return true; |
| 176 } | 178 } |
| 177 return false; | 179 return false; |
| 178 } | 180 } |
| 179 | 181 |
| 180 // static | 182 // static |
| 181 bool HotwordService::IsExperimentalHotwordingEnabled() { | 183 bool HotwordService::IsExperimentalHotwordingEnabled() { |
| 182 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 184 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| 183 return command_line->HasSwitch(switches::kEnableExperimentalHotwording); | 185 return command_line->HasSwitch(switches::kEnableExperimentalHotwording); |
| 184 } | 186 } |
| 185 | 187 |
| 186 HotwordService::HotwordService(Profile* profile) | 188 HotwordService::HotwordService(Profile* profile) |
| 187 : profile_(profile), | 189 : profile_(profile), |
| 188 extension_registry_observer_(this), | 190 extension_registry_observer_(this), |
| 189 client_(NULL), | 191 client_(NULL), |
| 190 error_message_(0), | 192 error_message_(0), |
| 191 reinstall_pending_(false), | 193 reinstall_pending_(false), |
| 194 training_(false), |
| 192 weak_factory_(this) { | 195 weak_factory_(this) { |
| 193 extension_registry_observer_.Add(extensions::ExtensionRegistry::Get(profile)); | 196 extension_registry_observer_.Add(extensions::ExtensionRegistry::Get(profile)); |
| 194 // This will be called during profile initialization which is a good time | 197 // This will be called during profile initialization which is a good time |
| 195 // to check the user's hotword state. | 198 // to check the user's hotword state. |
| 196 HotwordEnabled enabled_state = UNSET; | 199 HotwordEnabled enabled_state = UNSET; |
| 197 if (IsExperimentalHotwordingEnabled()) { | 200 if (IsExperimentalHotwordingEnabled()) { |
| 198 // Disable the old extension so it doesn't interfere with the new stuff. | 201 // Disable the old extension so it doesn't interfere with the new stuff. |
| 199 DisableHotwordExtension(GetExtensionService(profile_)); | 202 DisableHotwordExtension(GetExtensionService(profile_)); |
| 200 } else { | 203 } else { |
| 201 if (profile_->GetPrefs()->HasPrefPath(prefs::kHotwordSearchEnabled)) { | 204 if (profile_->GetPrefs()->HasPrefPath(prefs::kHotwordSearchEnabled)) { |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 | 470 |
| 468 OpenApplication(AppLaunchParams( | 471 OpenApplication(AppLaunchParams( |
| 469 profile_, extension, extensions::LAUNCH_CONTAINER_WINDOW, NEW_WINDOW)); | 472 profile_, extension, extensions::LAUNCH_CONTAINER_WINDOW, NEW_WINDOW)); |
| 470 } | 473 } |
| 471 | 474 |
| 472 HotwordService::LaunchMode | 475 HotwordService::LaunchMode |
| 473 HotwordService::GetHotwordAudioVerificationLaunchMode() { | 476 HotwordService::GetHotwordAudioVerificationLaunchMode() { |
| 474 return hotword_audio_verification_launch_mode_; | 477 return hotword_audio_verification_launch_mode_; |
| 475 } | 478 } |
| 476 | 479 |
| 480 void HotwordService::StartTraining() { |
| 481 training_ = true; |
| 482 |
| 483 if (!IsServiceAvailable()) |
| 484 return; |
| 485 |
| 486 HotwordPrivateEventService* event_service = |
| 487 BrowserContextKeyedAPIFactory<HotwordPrivateEventService>::Get(profile_); |
| 488 if (event_service) |
| 489 event_service->OnEnabledChanged(hotword_internal::kHotwordTrainingEnabled); |
| 490 } |
| 491 |
| 492 void HotwordService::FinalizeSpeakerModel() { |
| 493 if (!IsServiceAvailable()) |
| 494 return; |
| 495 |
| 496 HotwordPrivateEventService* event_service = |
| 497 BrowserContextKeyedAPIFactory<HotwordPrivateEventService>::Get(profile_); |
| 498 if (event_service) |
| 499 event_service->OnFinalizeSpeakerModel(); |
| 500 } |
| 501 |
| 502 void HotwordService::StopTraining() { |
| 503 training_ = false; |
| 504 |
| 505 if (!IsServiceAvailable()) |
| 506 return; |
| 507 |
| 508 HotwordPrivateEventService* event_service = |
| 509 BrowserContextKeyedAPIFactory<HotwordPrivateEventService>::Get(profile_); |
| 510 if (event_service) |
| 511 event_service->OnEnabledChanged(hotword_internal::kHotwordTrainingEnabled); |
| 512 } |
| 513 |
| 514 void HotwordService::NotifyHotwordTriggered() { |
| 515 if (!IsServiceAvailable()) |
| 516 return; |
| 517 |
| 518 HotwordPrivateEventService* event_service = |
| 519 BrowserContextKeyedAPIFactory<HotwordPrivateEventService>::Get(profile_); |
| 520 if (event_service) |
| 521 event_service->OnHotwordTriggered(); |
| 522 } |
| 523 |
| 524 bool HotwordService::IsTraining() { |
| 525 return training_; |
| 526 } |
| 527 |
| 477 void HotwordService::OnHotwordSearchEnabledChanged( | 528 void HotwordService::OnHotwordSearchEnabledChanged( |
| 478 const std::string& pref_name) { | 529 const std::string& pref_name) { |
| 479 DCHECK_EQ(pref_name, std::string(prefs::kHotwordSearchEnabled)); | 530 DCHECK_EQ(pref_name, std::string(prefs::kHotwordSearchEnabled)); |
| 480 | 531 |
| 481 ExtensionService* extension_service = GetExtensionService(profile_); | 532 ExtensionService* extension_service = GetExtensionService(profile_); |
| 482 if (profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)) | 533 if (profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)) |
| 483 EnableHotwordExtension(extension_service); | 534 EnableHotwordExtension(extension_service); |
| 484 else | 535 else |
| 485 DisableHotwordExtension(extension_service); | 536 DisableHotwordExtension(extension_service); |
| 486 } | 537 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 return false; | 576 return false; |
| 526 | 577 |
| 527 std::string previous_locale = | 578 std::string previous_locale = |
| 528 profile_->GetPrefs()->GetString(prefs::kHotwordPreviousLanguage); | 579 profile_->GetPrefs()->GetString(prefs::kHotwordPreviousLanguage); |
| 529 std::string locale = GetCurrentLocale(profile_); | 580 std::string locale = GetCurrentLocale(profile_); |
| 530 | 581 |
| 531 // If it's a new locale, then the old extension should be uninstalled. | 582 // If it's a new locale, then the old extension should be uninstalled. |
| 532 return locale != previous_locale && | 583 return locale != previous_locale && |
| 533 HotwordService::DoesHotwordSupportLanguage(profile_); | 584 HotwordService::DoesHotwordSupportLanguage(profile_); |
| 534 } | 585 } |
| OLD | NEW |