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

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

Issue 210473002: Merge 258106 "[Hotword] Making enabling/disabling the setting en..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1847/src/
Patch Set: Created 6 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 | Annotate | Revision Log
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 "base/i18n/case_conversion.h" 7 #include "base/i18n/case_conversion.h"
8 #include "base/metrics/field_trial.h" 8 #include "base/metrics/field_trial.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/prefs/pref_service.h" 10 #include "base/prefs/pref_service.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 availability_state = PENDING_DOWNLOAD; 53 availability_state = PENDING_DOWNLOAD;
54 } else if (!service->IsExtensionEnabled( 54 } else if (!service->IsExtensionEnabled(
55 extension_misc::kHotwordExtensionId)) { 55 extension_misc::kHotwordExtensionId)) {
56 availability_state = DISABLED_EXTENSION; 56 availability_state = DISABLED_EXTENSION;
57 } 57 }
58 UMA_HISTOGRAM_ENUMERATION("Hotword.HotwordExtensionAvailability", 58 UMA_HISTOGRAM_ENUMERATION("Hotword.HotwordExtensionAvailability",
59 availability_state, 59 availability_state,
60 NUM_HOTWORD_EXTENSION_AVAILABILITY_METRICS); 60 NUM_HOTWORD_EXTENSION_AVAILABILITY_METRICS);
61 } 61 }
62 62
63 ExtensionService* GetExtensionService(Profile* profile) {
64 CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
65
66 extensions::ExtensionSystem* extension_system =
67 extensions::ExtensionSystem::Get(profile);
68 if (extension_system)
69 return extension_system->extension_service();
70 return NULL;
71 }
72
63 } // namespace 73 } // namespace
64 74
65 namespace hotword_internal { 75 namespace hotword_internal {
66 // Constants for the hotword field trial. 76 // Constants for the hotword field trial.
67 const char kHotwordFieldTrialName[] = "VoiceTrigger"; 77 const char kHotwordFieldTrialName[] = "VoiceTrigger";
68 const char kHotwordFieldTrialDisabledGroupName[] = "Disabled"; 78 const char kHotwordFieldTrialDisabledGroupName[] = "Disabled";
69 } // namespace hotword_internal 79 } // namespace hotword_internal
70 80
71 // static 81 // static
72 bool HotwordService::DoesHotwordSupportLanguage(Profile* profile) { 82 bool HotwordService::DoesHotwordSupportLanguage(Profile* profile) {
(...skipping 13 matching lines...) Expand all
86 HotwordService::HotwordService(Profile* profile) 96 HotwordService::HotwordService(Profile* profile)
87 : profile_(profile) { 97 : profile_(profile) {
88 // This will be called during profile initialization which is a good time 98 // This will be called during profile initialization which is a good time
89 // to check the user's hotword state. 99 // to check the user's hotword state.
90 HotwordEnabled enabled_state = UNSET; 100 HotwordEnabled enabled_state = UNSET;
91 if (profile_->GetPrefs()->HasPrefPath(prefs::kHotwordSearchEnabled)) { 101 if (profile_->GetPrefs()->HasPrefPath(prefs::kHotwordSearchEnabled)) {
92 if (profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled)) 102 if (profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled))
93 enabled_state = ENABLED; 103 enabled_state = ENABLED;
94 else 104 else
95 enabled_state = DISABLED; 105 enabled_state = DISABLED;
106 } else {
107 // If the preference has not been set the hotword extension should
108 // not be running.
109 DisableHotwordExtension(GetExtensionService(profile_));
96 } 110 }
97 UMA_HISTOGRAM_ENUMERATION("Hotword.Enabled", enabled_state, 111 UMA_HISTOGRAM_ENUMERATION("Hotword.Enabled", enabled_state,
98 NUM_HOTWORD_ENABLED_METRICS); 112 NUM_HOTWORD_ENABLED_METRICS);
113
114 pref_registrar_.Init(profile_->GetPrefs());
115 pref_registrar_.Add(
116 prefs::kHotwordSearchEnabled,
117 base::Bind(&HotwordService::OnHotwordSearchEnabledChanged,
118 base::Unretained(this)));
99 } 119 }
100 120
101 HotwordService::~HotwordService() { 121 HotwordService::~HotwordService() {
102 } 122 }
103 123
104 bool HotwordService::ShouldShowOptInPopup() { 124 bool HotwordService::ShouldShowOptInPopup() {
105 if (profile_->IsOffTheRecord()) 125 if (profile_->IsOffTheRecord())
106 return false; 126 return false;
107 127
108 // Profile is not off the record. 128 // Profile is not off the record.
(...skipping 14 matching lines...) Expand all
123 prefs::kHotwordOptInPopupTimesShown); 143 prefs::kHotwordOptInPopupTimesShown);
124 profile_->GetPrefs()->SetInteger(prefs::kHotwordOptInPopupTimesShown, 144 profile_->GetPrefs()->SetInteger(prefs::kHotwordOptInPopupTimesShown,
125 ++number_shown); 145 ++number_shown);
126 // TODO(rlp): actually show opt in popup when linked up to extension. 146 // TODO(rlp): actually show opt in popup when linked up to extension.
127 } 147 }
128 148
129 bool HotwordService::IsServiceAvailable() { 149 bool HotwordService::IsServiceAvailable() {
130 extensions::ExtensionSystem* system = 150 extensions::ExtensionSystem* system =
131 extensions::ExtensionSystem::Get(profile_); 151 extensions::ExtensionSystem::Get(profile_);
132 ExtensionService* service = system->extension_service(); 152 ExtensionService* service = system->extension_service();
133 // Do not include disabled extension (false parameter) because if the 153 // Include disabled extensions (true parameter) since it may not be enabled
134 // extension is disabled, it's not available. 154 // if the user opted out.
135 const extensions::Extension* extension = 155 const extensions::Extension* extension =
136 service->GetExtensionById(extension_misc::kHotwordExtensionId, false); 156 service->GetExtensionById(extension_misc::kHotwordExtensionId, true);
137 157
138 RecordAvailabilityMetrics(service, extension); 158 RecordAvailabilityMetrics(service, extension);
139 159
140 return extension && IsHotwordAllowed(); 160 return extension && IsHotwordAllowed();
141 } 161 }
142 162
143 bool HotwordService::IsHotwordAllowed() { 163 bool HotwordService::IsHotwordAllowed() {
144 std::string group = base::FieldTrialList::FindFullName( 164 std::string group = base::FieldTrialList::FindFullName(
145 hotword_internal::kHotwordFieldTrialName); 165 hotword_internal::kHotwordFieldTrialName);
146 return !group.empty() && 166 return !group.empty() &&
147 group != hotword_internal::kHotwordFieldTrialDisabledGroupName && 167 group != hotword_internal::kHotwordFieldTrialDisabledGroupName &&
148 DoesHotwordSupportLanguage(profile_); 168 DoesHotwordSupportLanguage(profile_);
149 } 169 }
170
171 bool HotwordService::RetryHotwordExtension() {
172 ExtensionService* extension_service = GetExtensionService(profile_);
173 if (!extension_service)
174 return false;
175
176 extension_service->ReloadExtension(extension_misc::kHotwordExtensionId);
177 return true;
178 }
179
180 void HotwordService::EnableHotwordExtension(
181 ExtensionService* extension_service) {
182 if (extension_service)
183 extension_service->EnableExtension(extension_misc::kHotwordExtensionId);
184 }
185
186 void HotwordService::DisableHotwordExtension(
187 ExtensionService* extension_service) {
188 if (extension_service) {
189 extension_service->DisableExtension(
190 extension_misc::kHotwordExtensionId,
191 extensions::Extension::DISABLE_USER_ACTION);
192 }
193 }
194
195 void HotwordService::OnHotwordSearchEnabledChanged(
196 const std::string& pref_name) {
197 DCHECK_EQ(pref_name, std::string(prefs::kHotwordSearchEnabled));
198
199 ExtensionService* extension_service = GetExtensionService(profile_);
200 if (profile_->GetPrefs()->GetBoolean(prefs::kHotwordSearchEnabled))
201 EnableHotwordExtension(extension_service);
202 else
203 DisableHotwordExtension(extension_service);
204 }
OLDNEW
« no previous file with comments | « chrome/browser/search/hotword_service.h ('k') | chrome/browser/search/hotword_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698