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

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

Issue 2479113002: Make extensions DSE persistent in browser prefs (Closed)
Patch Set: Fixed after review, round 7 Created 3 years, 12 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 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 if (extension_default_search_) { 132 if (extension_default_search_) {
134 if (source) 133 if (source)
135 *source = FROM_EXTENSION; 134 *source = FROM_EXTENSION;
136 return extension_default_search_.get(); 135 return extension_default_search_.get();
137 } 136 }
138 if (prefs_default_search_) { 137 if (prefs_default_search_) {
139 if (source) 138 if (source)
140 *source = FROM_USER; 139 *source = FROM_USER;
141 return prefs_default_search_.get(); 140 return prefs_default_search_.get();
142 } 141 }
143
144 if (source) 142 if (source)
145 *source = FROM_FALLBACK; 143 *source = FROM_FALLBACK;
146 return g_fallback_search_engines_disabled ? 144 return g_fallback_search_engines_disabled ?
147 NULL : fallback_default_search_.get(); 145 NULL : fallback_default_search_.get();
148 } 146 }
149 147
150 DefaultSearchManager::Source 148 DefaultSearchManager::Source
151 DefaultSearchManager::GetDefaultSearchEngineSource() const { 149 DefaultSearchManager::GetDefaultSearchEngineSource() const {
152 Source source; 150 Source source;
153 GetDefaultSearchEngine(&source); 151 GetDefaultSearchEngine(&source);
154 return source; 152 return source;
155 } 153 }
156 154
157 void DefaultSearchManager::SetUserSelectedDefaultSearchEngine( 155 void DefaultSearchManager::SetUserSelectedDefaultSearchEngine(
158 const TemplateURLData& data) { 156 const TemplateURLData& data) {
159 if (!pref_service_) { 157 if (!pref_service_) {
160 prefs_default_search_.reset(new TemplateURLData(data)); 158 prefs_default_search_.reset(new TemplateURLData(data));
161 MergePrefsDataWithPrepopulated(); 159 MergePrefsDataWithPrepopulated();
162 NotifyObserver(); 160 NotifyObserver();
163 return; 161 return;
164 } 162 }
165 163
166 pref_service_->Set(kDefaultSearchProviderDataPrefName, 164 pref_service_->Set(kDefaultSearchProviderDataPrefName,
167 *TemplateURLDataToDictionary(data)); 165 *TemplateURLDataToDictionary(data));
168 } 166 }
169 167
170 void DefaultSearchManager::SetExtensionControlledDefaultSearchEngine(
171 const TemplateURLData& data) {
172 extension_default_search_.reset(new TemplateURLData(data));
173 if (GetDefaultSearchEngineSource() == FROM_EXTENSION)
174 NotifyObserver();
175 }
176
177 void DefaultSearchManager::ClearExtensionControlledDefaultSearchEngine() {
178 Source old_source = GetDefaultSearchEngineSource();
179 extension_default_search_.reset();
180 if (old_source == FROM_EXTENSION)
181 NotifyObserver();
182 }
183
184 void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() { 168 void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() {
185 if (pref_service_) { 169 if (pref_service_) {
186 pref_service_->ClearPref(kDefaultSearchProviderDataPrefName); 170 pref_service_->ClearPref(kDefaultSearchProviderDataPrefName);
187 } else { 171 } else {
188 prefs_default_search_.reset(); 172 prefs_default_search_.reset();
189 NotifyObserver(); 173 NotifyObserver();
190 } 174 }
191 } 175 }
192 176
193 void DefaultSearchManager::OnDefaultSearchPrefChanged() { 177 void DefaultSearchManager::OnDefaultSearchPrefChanged() {
194 Source source = GetDefaultSearchEngineSource(); 178 bool source_was_fallback = GetDefaultSearchEngineSource() == FROM_FALLBACK;
179
195 LoadDefaultSearchEngineFromPrefs(); 180 LoadDefaultSearchEngineFromPrefs();
196 181
197 // If we were/are FROM_USER or FROM_POLICY the effective DSE may have changed. 182 // The effective DSE may have changed unless we were using the fallback source
198 if (source != FROM_USER && source != FROM_POLICY) 183 // both before and after the above load.
199 source = GetDefaultSearchEngineSource(); 184 if (!source_was_fallback || (GetDefaultSearchEngineSource() != FROM_FALLBACK))
200 if (source == FROM_USER || source == FROM_POLICY)
201 NotifyObserver(); 185 NotifyObserver();
202 } 186 }
203 187
204 void DefaultSearchManager::OnOverridesPrefChanged() { 188 void DefaultSearchManager::OnOverridesPrefChanged() {
205 LoadPrepopulatedDefaultSearch(); 189 LoadPrepopulatedDefaultSearch();
206 190
207 TemplateURLData* effective_data = GetDefaultSearchEngine(NULL); 191 TemplateURLData* effective_data = GetDefaultSearchEngine(NULL);
208 if (effective_data && effective_data->prepopulate_id) { 192 if (effective_data && effective_data->prepopulate_id) {
209 // A user-selected, policy-selected or fallback pre-populated engine is 193 // A user-selected, policy-selected or fallback pre-populated engine is
210 // active and may have changed with this event. 194 // active and may have changed with this event.
(...skipping 28 matching lines...) Expand all
239 prefs_default_search_ = std::move(engine); 223 prefs_default_search_ = std::move(engine);
240 return; 224 return;
241 } 225 }
242 } 226 }
243 227
244 void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() { 228 void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() {
245 if (!pref_service_) 229 if (!pref_service_)
246 return; 230 return;
247 231
248 prefs_default_search_.reset(); 232 prefs_default_search_.reset();
233 extension_default_search_.reset();
249 const PrefService::Preference* pref = 234 const PrefService::Preference* pref =
250 pref_service_->FindPreference(kDefaultSearchProviderDataPrefName); 235 pref_service_->FindPreference(kDefaultSearchProviderDataPrefName);
251 DCHECK(pref); 236 DCHECK(pref);
252 default_search_controlled_by_policy_ = pref->IsManaged(); 237 default_search_controlled_by_policy_ = pref->IsManaged();
253 238
254 const base::DictionaryValue* url_dict = 239 const base::DictionaryValue* url_dict =
255 pref_service_->GetDictionary(kDefaultSearchProviderDataPrefName); 240 pref_service_->GetDictionary(kDefaultSearchProviderDataPrefName);
256 if (url_dict->empty()) 241 if (url_dict->empty())
257 return; 242 return;
258 243
259 if (default_search_controlled_by_policy_) { 244 if (default_search_controlled_by_policy_) {
260 bool disabled_by_policy = false; 245 bool disabled_by_policy = false;
261 if (url_dict->GetBoolean(kDisabledByPolicy, &disabled_by_policy) && 246 if (url_dict->GetBoolean(kDisabledByPolicy, &disabled_by_policy) &&
262 disabled_by_policy) 247 disabled_by_policy)
263 return; 248 return;
264 } 249 }
265 250
266 auto turl_data = TemplateURLDataFromDictionary(*url_dict); 251 auto turl_data = TemplateURLDataFromDictionary(*url_dict);
267 if (!turl_data) 252 if (!turl_data)
268 return; 253 return;
269 254
270 prefs_default_search_ = std::move(turl_data); 255 // Check if default search preference is overriden by extension.
271 MergePrefsDataWithPrepopulated(); 256 if (pref->IsExtensionControlled()) {
257 extension_default_search_ = TemplateURLDataFromDictionary(*url_dict);
Peter Kasting 2017/01/06 01:44:57 Nit: Use |turl_data| here and below
Alexander Yashkin 2017/01/07 12:55:59 Fixed, good shot.
258 } else {
259 prefs_default_search_ = TemplateURLDataFromDictionary(*url_dict);
260 MergePrefsDataWithPrepopulated();
261 }
272 } 262 }
273 263
274 void DefaultSearchManager::LoadPrepopulatedDefaultSearch() { 264 void DefaultSearchManager::LoadPrepopulatedDefaultSearch() {
275 std::unique_ptr<TemplateURLData> data = 265 std::unique_ptr<TemplateURLData> data =
276 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service_); 266 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service_);
277 fallback_default_search_ = std::move(data); 267 fallback_default_search_ = std::move(data);
278 MergePrefsDataWithPrepopulated(); 268 MergePrefsDataWithPrepopulated();
279 } 269 }
280 270
281 void DefaultSearchManager::NotifyObserver() { 271 void DefaultSearchManager::NotifyObserver() {
282 if (!change_observer_.is_null()) { 272 if (!change_observer_.is_null()) {
283 Source source = FROM_FALLBACK; 273 Source source = FROM_FALLBACK;
284 TemplateURLData* data = GetDefaultSearchEngine(&source); 274 TemplateURLData* data = GetDefaultSearchEngine(&source);
285 change_observer_.Run(data, source); 275 change_observer_.Run(data, source);
286 } 276 }
287 } 277 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698