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

Side by Side Diff: components/search_engines/default_search_manager.cc

Issue 2479113002: Make extensions DSE persistent in browser prefs (Closed)
Patch Set: Added DSE tests Created 4 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/search_engines/default_search_manager.h" 5 #include "components/search_engines/default_search_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
11 #include <utility> 11 #include <utility>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/bind_helpers.h" 14 #include "base/bind_helpers.h"
15 #include "base/compiler_specific.h" 15 #include "base/compiler_specific.h"
16 #include "base/i18n/case_conversion.h" 16 #include "base/i18n/case_conversion.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/strings/string_number_conversions.h"
19 #include "base/strings/string_split.h" 18 #include "base/strings/string_split.h"
20 #include "base/strings/string_util.h" 19 #include "base/strings/string_util.h"
21 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
22 #include "base/time/time.h" 21 #include "base/time/time.h"
23 #include "components/pref_registry/pref_registry_syncable.h" 22 #include "components/pref_registry/pref_registry_syncable.h"
24 #include "components/prefs/pref_service.h" 23 #include "components/prefs/pref_service.h"
25 #include "components/prefs/pref_value_map.h" 24 #include "components/prefs/pref_value_map.h"
26 #include "components/search_engines/search_engines_pref_names.h" 25 #include "components/search_engines/search_engines_pref_names.h"
27 #include "components/search_engines/template_url_data.h" 26 #include "components/search_engines/template_url_data.h"
28 #include "components/search_engines/template_url_data_util.h" 27 #include "components/search_engines/template_url_data_util.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 if (extension_default_search_) { 131 if (extension_default_search_) {
133 if (source) 132 if (source)
134 *source = FROM_EXTENSION; 133 *source = FROM_EXTENSION;
135 return extension_default_search_.get(); 134 return extension_default_search_.get();
136 } 135 }
137 if (prefs_default_search_) { 136 if (prefs_default_search_) {
138 if (source) 137 if (source)
139 *source = FROM_USER; 138 *source = FROM_USER;
140 return prefs_default_search_.get(); 139 return prefs_default_search_.get();
141 } 140 }
142
143 if (source) 141 if (source)
144 *source = FROM_FALLBACK; 142 *source = FROM_FALLBACK;
145 return g_fallback_search_engines_disabled ? 143 return g_fallback_search_engines_disabled ?
146 NULL : fallback_default_search_.get(); 144 NULL : fallback_default_search_.get();
147 } 145 }
148 146
149 DefaultSearchManager::Source 147 DefaultSearchManager::Source
150 DefaultSearchManager::GetDefaultSearchEngineSource() const { 148 DefaultSearchManager::GetDefaultSearchEngineSource() const {
151 Source source; 149 Source source;
152 GetDefaultSearchEngine(&source); 150 GetDefaultSearchEngine(&source);
153 return source; 151 return source;
154 } 152 }
155 153
156 void DefaultSearchManager::SetUserSelectedDefaultSearchEngine( 154 void DefaultSearchManager::SetUserSelectedDefaultSearchEngine(
157 const TemplateURLData& data) { 155 const TemplateURLData& data) {
158 if (!pref_service_) { 156 if (!pref_service_) {
159 prefs_default_search_.reset(new TemplateURLData(data)); 157 prefs_default_search_.reset(new TemplateURLData(data));
160 MergePrefsDataWithPrepopulated(); 158 MergePrefsDataWithPrepopulated();
161 NotifyObserver(); 159 NotifyObserver();
162 return; 160 return;
163 } 161 }
164 pref_service_->Set(kDefaultSearchProviderDataPrefName, 162 pref_service_->Set(kDefaultSearchProviderDataPrefName,
165 *TemplateURLDataToDictionary(data)); 163 *TemplateURLDataToDictionary(data));
166 } 164 }
167 165
168 void DefaultSearchManager::SetExtensionControlledDefaultSearchEngine(
169 const TemplateURLData& data) {
170 extension_default_search_.reset(new TemplateURLData(data));
171 if (GetDefaultSearchEngineSource() == FROM_EXTENSION)
172 NotifyObserver();
173 }
174
175 void DefaultSearchManager::ClearExtensionControlledDefaultSearchEngine() {
176 Source old_source = GetDefaultSearchEngineSource();
177 extension_default_search_.reset();
178 if (old_source == FROM_EXTENSION)
179 NotifyObserver();
180 }
181
182 void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() { 166 void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() {
183 if (pref_service_) { 167 if (pref_service_) {
184 pref_service_->ClearPref(kDefaultSearchProviderDataPrefName); 168 pref_service_->ClearPref(kDefaultSearchProviderDataPrefName);
185 } else { 169 } else {
186 prefs_default_search_.reset(); 170 prefs_default_search_.reset();
187 NotifyObserver(); 171 NotifyObserver();
188 } 172 }
189 } 173 }
190 174
191 void DefaultSearchManager::OnDefaultSearchPrefChanged() { 175 void DefaultSearchManager::OnDefaultSearchPrefChanged() {
192 Source source = GetDefaultSearchEngineSource(); 176 Source source = GetDefaultSearchEngineSource();
193 LoadDefaultSearchEngineFromPrefs(); 177 LoadDefaultSearchEngineFromPrefs();
194 178
195 // If we were/are FROM_USER or FROM_POLICY the effective DSE may have changed. 179 if (source == FROM_FALLBACK)
196 if (source != FROM_USER && source != FROM_POLICY)
197 source = GetDefaultSearchEngineSource(); 180 source = GetDefaultSearchEngineSource();
198 if (source == FROM_USER || source == FROM_POLICY) 181 // The effective DSE may have changed if it was/become non fallback.
182 if (source != FROM_FALLBACK)
199 NotifyObserver(); 183 NotifyObserver();
200 } 184 }
201 185
202 void DefaultSearchManager::OnOverridesPrefChanged() { 186 void DefaultSearchManager::OnOverridesPrefChanged() {
203 LoadPrepopulatedDefaultSearch(); 187 LoadPrepopulatedDefaultSearch();
204 188
205 TemplateURLData* effective_data = GetDefaultSearchEngine(NULL); 189 TemplateURLData* effective_data = GetDefaultSearchEngine(NULL);
206 if (effective_data && effective_data->prepopulate_id) { 190 if (effective_data && effective_data->prepopulate_id) {
207 // A user-selected, policy-selected or fallback pre-populated engine is 191 // A user-selected, policy-selected or fallback pre-populated engine is
208 // active and may have changed with this event. 192 // active and may have changed with this event.
(...skipping 27 matching lines...) Expand all
236 prefs_default_search_ = std::move(engine); 220 prefs_default_search_ = std::move(engine);
237 return; 221 return;
238 } 222 }
239 } 223 }
240 224
241 void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() { 225 void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() {
242 if (!pref_service_) 226 if (!pref_service_)
243 return; 227 return;
244 228
245 prefs_default_search_.reset(); 229 prefs_default_search_.reset();
230 extension_default_search_.reset();
246 const PrefService::Preference* pref = 231 const PrefService::Preference* pref =
247 pref_service_->FindPreference(kDefaultSearchProviderDataPrefName); 232 pref_service_->FindPreference(kDefaultSearchProviderDataPrefName);
248 DCHECK(pref); 233 DCHECK(pref);
249 default_search_controlled_by_policy_ = pref->IsManaged(); 234 default_search_controlled_by_policy_ = pref->IsManaged();
250 235
251 const base::DictionaryValue* url_dict = 236 const base::DictionaryValue* url_dict =
252 pref_service_->GetDictionary(kDefaultSearchProviderDataPrefName); 237 pref_service_->GetDictionary(kDefaultSearchProviderDataPrefName);
253 if (url_dict->empty()) 238 if (url_dict->empty())
254 return; 239 return;
255 240
256 if (default_search_controlled_by_policy_) { 241 if (default_search_controlled_by_policy_) {
257 bool disabled_by_policy = false; 242 bool disabled_by_policy = false;
258 if (url_dict->GetBoolean(kDisabledByPolicy, &disabled_by_policy) && 243 if (url_dict->GetBoolean(kDisabledByPolicy, &disabled_by_policy) &&
259 disabled_by_policy) 244 disabled_by_policy)
260 return; 245 return;
261 } 246 }
262 247
263 auto turl_data = TemplateURLDataFromDictionary(*url_dict); 248 auto turl_data = TemplateURLDataFromDictionary(*url_dict);
264 if (!turl_data) 249 if (!turl_data)
265 return; 250 return;
266 251
267 prefs_default_search_ = std::move(turl_data); 252 // Check if default search preference is overriden by extension.
268 MergePrefsDataWithPrepopulated(); 253 if (pref->IsExtensionControlled()) {
254 extension_default_search_ = TemplateURLDataFromDictionary(*url_dict);
255 } else {
256 prefs_default_search_ = TemplateURLDataFromDictionary(*url_dict);
257 MergePrefsDataWithPrepopulated();
258 }
269 } 259 }
270 260
271 void DefaultSearchManager::LoadPrepopulatedDefaultSearch() { 261 void DefaultSearchManager::LoadPrepopulatedDefaultSearch() {
272 std::unique_ptr<TemplateURLData> data = 262 std::unique_ptr<TemplateURLData> data =
273 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service_); 263 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service_);
274 fallback_default_search_ = std::move(data); 264 fallback_default_search_ = std::move(data);
275 MergePrefsDataWithPrepopulated(); 265 MergePrefsDataWithPrepopulated();
276 } 266 }
277 267
278 void DefaultSearchManager::NotifyObserver() { 268 void DefaultSearchManager::NotifyObserver() {
279 if (!change_observer_.is_null()) { 269 if (!change_observer_.is_null()) {
280 Source source = FROM_FALLBACK; 270 Source source = FROM_FALLBACK;
281 TemplateURLData* data = GetDefaultSearchEngine(&source); 271 TemplateURLData* data = GetDefaultSearchEngine(&source);
282 change_observer_.Run(data, source); 272 change_observer_.Run(data, source);
283 } 273 }
284 } 274 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698