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

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

Issue 2479113002: Make extensions DSE persistent in browser prefs (Closed)
Patch Set: Fixed default extension keywords conflicts problem Created 3 years, 11 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 const char DefaultSearchManager::kLastModified[] = "last_modified"; 71 const char DefaultSearchManager::kLastModified[] = "last_modified";
73 const char DefaultSearchManager::kLastVisited[] = "last_visited"; 72 const char DefaultSearchManager::kLastVisited[] = "last_visited";
74 73
75 const char DefaultSearchManager::kUsageCount[] = "usage_count"; 74 const char DefaultSearchManager::kUsageCount[] = "usage_count";
76 const char DefaultSearchManager::kAlternateURLs[] = "alternate_urls"; 75 const char DefaultSearchManager::kAlternateURLs[] = "alternate_urls";
77 const char DefaultSearchManager::kSearchTermsReplacementKey[] = 76 const char DefaultSearchManager::kSearchTermsReplacementKey[] =
78 "search_terms_replacement_key"; 77 "search_terms_replacement_key";
79 const char DefaultSearchManager::kCreatedByPolicy[] = "created_by_policy"; 78 const char DefaultSearchManager::kCreatedByPolicy[] = "created_by_policy";
80 const char DefaultSearchManager::kDisabledByPolicy[] = "disabled_by_policy"; 79 const char DefaultSearchManager::kDisabledByPolicy[] = "disabled_by_policy";
81 80
81 const char DefaultSearchManager::kExtensionID[] = "extension_id";
82
82 DefaultSearchManager::DefaultSearchManager( 83 DefaultSearchManager::DefaultSearchManager(
83 PrefService* pref_service, 84 PrefService* pref_service,
84 const ObserverCallback& change_observer) 85 const ObserverCallback& change_observer)
85 : pref_service_(pref_service), 86 : pref_service_(pref_service),
86 change_observer_(change_observer), 87 change_observer_(change_observer),
87 default_search_controlled_by_policy_(false) { 88 default_search_controlled_by_policy_(false) {
88 if (pref_service_) { 89 if (pref_service_) {
89 pref_change_registrar_.Init(pref_service_); 90 pref_change_registrar_.Init(pref_service_);
90 pref_change_registrar_.Add( 91 pref_change_registrar_.Add(
91 kDefaultSearchProviderDataPrefName, 92 kDefaultSearchProviderDataPrefName,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 if (extension_default_search_) { 134 if (extension_default_search_) {
134 if (source) 135 if (source)
135 *source = FROM_EXTENSION; 136 *source = FROM_EXTENSION;
136 return extension_default_search_.get(); 137 return extension_default_search_.get();
137 } 138 }
138 if (prefs_default_search_) { 139 if (prefs_default_search_) {
139 if (source) 140 if (source)
140 *source = FROM_USER; 141 *source = FROM_USER;
141 return prefs_default_search_.get(); 142 return prefs_default_search_.get();
142 } 143 }
143
144 if (source) 144 if (source)
145 *source = FROM_FALLBACK; 145 *source = FROM_FALLBACK;
146 return g_fallback_search_engines_disabled ? 146 return g_fallback_search_engines_disabled ?
147 NULL : fallback_default_search_.get(); 147 NULL : fallback_default_search_.get();
148 } 148 }
149 149
150 DefaultSearchManager::Source 150 DefaultSearchManager::Source
151 DefaultSearchManager::GetDefaultSearchEngineSource() const { 151 DefaultSearchManager::GetDefaultSearchEngineSource() const {
152 Source source; 152 Source source;
153 GetDefaultSearchEngine(&source); 153 GetDefaultSearchEngine(&source);
154 return source; 154 return source;
155 } 155 }
156 156
157 void DefaultSearchManager::SetUserSelectedDefaultSearchEngine( 157 void DefaultSearchManager::SetUserSelectedDefaultSearchEngine(
158 const TemplateURLData& data) { 158 const TemplateURLData& data) {
159 if (!pref_service_) { 159 if (!pref_service_) {
160 prefs_default_search_.reset(new TemplateURLData(data)); 160 prefs_default_search_.reset(new TemplateURLData(data));
161 MergePrefsDataWithPrepopulated(); 161 MergePrefsDataWithPrepopulated();
162 NotifyObserver(); 162 NotifyObserver();
163 return; 163 return;
164 } 164 }
165 165
166 pref_service_->Set(kDefaultSearchProviderDataPrefName, 166 pref_service_->Set(kDefaultSearchProviderDataPrefName,
167 *TemplateURLDataToDictionary(data)); 167 *TemplateURLDataToDictionary(data));
168 } 168 }
169 169
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() { 170 void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() {
185 if (pref_service_) { 171 if (pref_service_) {
186 pref_service_->ClearPref(kDefaultSearchProviderDataPrefName); 172 pref_service_->ClearPref(kDefaultSearchProviderDataPrefName);
187 } else { 173 } else {
188 prefs_default_search_.reset(); 174 prefs_default_search_.reset();
189 NotifyObserver(); 175 NotifyObserver();
190 } 176 }
191 } 177 }
192 178
193 void DefaultSearchManager::OnDefaultSearchPrefChanged() { 179 void DefaultSearchManager::OnDefaultSearchPrefChanged() {
194 Source source = GetDefaultSearchEngineSource(); 180 bool source_was_fallback = GetDefaultSearchEngineSource() == FROM_FALLBACK;
181
195 LoadDefaultSearchEngineFromPrefs(); 182 LoadDefaultSearchEngineFromPrefs();
196 183
197 // If we were/are FROM_USER or FROM_POLICY the effective DSE may have changed. 184 // The effective DSE may have changed unless we were using the fallback source
198 if (source != FROM_USER && source != FROM_POLICY) 185 // both before and after the above load.
199 source = GetDefaultSearchEngineSource(); 186 if (!source_was_fallback || (GetDefaultSearchEngineSource() != FROM_FALLBACK))
200 if (source == FROM_USER || source == FROM_POLICY)
201 NotifyObserver(); 187 NotifyObserver();
202 } 188 }
203 189
204 void DefaultSearchManager::OnOverridesPrefChanged() { 190 void DefaultSearchManager::OnOverridesPrefChanged() {
205 LoadPrepopulatedDefaultSearch(); 191 LoadPrepopulatedDefaultSearch();
206 192
207 TemplateURLData* effective_data = GetDefaultSearchEngine(NULL); 193 TemplateURLData* effective_data = GetDefaultSearchEngine(NULL);
208 if (effective_data && effective_data->prepopulate_id) { 194 if (effective_data && effective_data->prepopulate_id) {
209 // A user-selected, policy-selected or fallback pre-populated engine is 195 // A user-selected, policy-selected or fallback pre-populated engine is
210 // active and may have changed with this event. 196 // active and may have changed with this event.
(...skipping 27 matching lines...) Expand all
238 prefs_default_search_ = std::move(engine); 224 prefs_default_search_ = std::move(engine);
239 return; 225 return;
240 } 226 }
241 } 227 }
242 228
243 void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() { 229 void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() {
244 if (!pref_service_) 230 if (!pref_service_)
245 return; 231 return;
246 232
247 prefs_default_search_.reset(); 233 prefs_default_search_.reset();
234 extension_default_search_.reset();
248 const PrefService::Preference* pref = 235 const PrefService::Preference* pref =
249 pref_service_->FindPreference(kDefaultSearchProviderDataPrefName); 236 pref_service_->FindPreference(kDefaultSearchProviderDataPrefName);
250 DCHECK(pref); 237 DCHECK(pref);
251 default_search_controlled_by_policy_ = pref->IsManaged(); 238 default_search_controlled_by_policy_ = pref->IsManaged();
252 239
253 const base::DictionaryValue* url_dict = 240 const base::DictionaryValue* url_dict =
254 pref_service_->GetDictionary(kDefaultSearchProviderDataPrefName); 241 pref_service_->GetDictionary(kDefaultSearchProviderDataPrefName);
255 if (url_dict->empty()) 242 if (url_dict->empty())
256 return; 243 return;
257 244
258 if (default_search_controlled_by_policy_) { 245 if (default_search_controlled_by_policy_) {
259 bool disabled_by_policy = false; 246 bool disabled_by_policy = false;
260 if (url_dict->GetBoolean(kDisabledByPolicy, &disabled_by_policy) && 247 if (url_dict->GetBoolean(kDisabledByPolicy, &disabled_by_policy) &&
261 disabled_by_policy) 248 disabled_by_policy)
262 return; 249 return;
263 } 250 }
264 251
265 auto turl_data = TemplateURLDataFromDictionary(*url_dict); 252 auto turl_data = TemplateURLDataFromDictionary(*url_dict);
266 if (!turl_data) 253 if (!turl_data)
267 return; 254 return;
268 255
269 prefs_default_search_ = std::move(turl_data); 256 // Check if default search preference is overriden by extension.
270 MergePrefsDataWithPrepopulated(); 257 if (pref->IsExtensionControlled()) {
258 extension_default_search_ = std::move(turl_data);
259 } else {
260 prefs_default_search_ = std::move(turl_data);
261 MergePrefsDataWithPrepopulated();
262 }
271 } 263 }
272 264
273 void DefaultSearchManager::LoadPrepopulatedDefaultSearch() { 265 void DefaultSearchManager::LoadPrepopulatedDefaultSearch() {
274 std::unique_ptr<TemplateURLData> data = 266 std::unique_ptr<TemplateURLData> data =
275 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service_); 267 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service_);
276 fallback_default_search_ = std::move(data); 268 fallback_default_search_ = std::move(data);
277 MergePrefsDataWithPrepopulated(); 269 MergePrefsDataWithPrepopulated();
278 } 270 }
279 271
280 void DefaultSearchManager::NotifyObserver() { 272 void DefaultSearchManager::NotifyObserver() {
281 if (!change_observer_.is_null()) { 273 if (!change_observer_.is_null()) {
282 Source source = FROM_FALLBACK; 274 Source source = FROM_FALLBACK;
283 TemplateURLData* data = GetDefaultSearchEngine(&source); 275 TemplateURLData* data = GetDefaultSearchEngine(&source);
284 change_observer_.Run(data, source); 276 change_observer_.Run(data, source);
285 } 277 }
286 } 278 }
OLDNEW
« no previous file with comments | « components/search_engines/default_search_manager.h ('k') | components/search_engines/default_search_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698