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

Side by Side Diff: chrome/browser/search_engines/default_search_manager.cc

Issue 268643002: Use the DefaultSearchManager as the exclusive authority on DSE, ignoring Web Data. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix the KeywordEditorControllerTest. Created 6 years, 7 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 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 "chrome/browser/search_engines/default_search_manager.h" 5 #include "chrome/browser/search_engines/default_search_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 12 matching lines...) Expand all
23 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
24 #include "chrome/browser/search_engines/template_url.h" 24 #include "chrome/browser/search_engines/template_url.h"
25 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" 25 #include "chrome/browser/search_engines/template_url_prepopulate_data.h"
26 #include "chrome/browser/search_engines/template_url_service.h" 26 #include "chrome/browser/search_engines/template_url_service.h"
27 #include "chrome/browser/search_engines/util.h" 27 #include "chrome/browser/search_engines/util.h"
28 #include "chrome/common/pref_names.h" 28 #include "chrome/common/pref_names.h"
29 #include "components/user_prefs/pref_registry_syncable.h" 29 #include "components/user_prefs/pref_registry_syncable.h"
30 30
31 namespace { 31 namespace {
32 32
33 bool IsDefaultSearchProviderManaged(PrefService* pref_service) {
34 const PrefService::Preference* pref = pref_service->FindPreference(
35 DefaultSearchManager::kDefaultSearchProviderDataPrefName);
36 DCHECK(pref);
37 return pref->IsManaged();
38 }
39
40 } // namespace
41
33 // A dictionary to hold all data related to the Default Search Engine. 42 // A dictionary to hold all data related to the Default Search Engine.
34 // Eventually, this should replace all the data stored in the 43 // Eventually, this should replace all the data stored in the
35 // default_search_provider.* prefs. 44 // default_search_provider.* prefs.
36 const char kDefaultSearchProviderData[] = 45 const char DefaultSearchManager::kDefaultSearchProviderDataPrefName[] =
37 "default_search_provider_data.template_url_data"; 46 "default_search_provider_data.template_url_data";
38 47
39 } // namespace
40
41 const char DefaultSearchManager::kID[] = "id"; 48 const char DefaultSearchManager::kID[] = "id";
42 const char DefaultSearchManager::kShortName[] = "short_name"; 49 const char DefaultSearchManager::kShortName[] = "short_name";
43 const char DefaultSearchManager::kKeyword[] = "keyword"; 50 const char DefaultSearchManager::kKeyword[] = "keyword";
44 const char DefaultSearchManager::kPrepopulateID[] = "prepopulate_id"; 51 const char DefaultSearchManager::kPrepopulateID[] = "prepopulate_id";
45 const char DefaultSearchManager::kSyncGUID[] = "synced_guid"; 52 const char DefaultSearchManager::kSyncGUID[] = "synced_guid";
46 53
47 const char DefaultSearchManager::kURL[] = "url"; 54 const char DefaultSearchManager::kURL[] = "url";
48 const char DefaultSearchManager::kSuggestionsURL[] = "suggestions_url"; 55 const char DefaultSearchManager::kSuggestionsURL[] = "suggestions_url";
49 const char DefaultSearchManager::kInstantURL[] = "instant_url"; 56 const char DefaultSearchManager::kInstantURL[] = "instant_url";
50 const char DefaultSearchManager::kImageURL[] = "image_url"; 57 const char DefaultSearchManager::kImageURL[] = "image_url";
(...skipping 16 matching lines...) Expand all
67 const char DefaultSearchManager::kDateCreated[] = "date_created"; 74 const char DefaultSearchManager::kDateCreated[] = "date_created";
68 const char DefaultSearchManager::kLastModified[] = "last_modified"; 75 const char DefaultSearchManager::kLastModified[] = "last_modified";
69 76
70 const char DefaultSearchManager::kUsageCount[] = "usage_count"; 77 const char DefaultSearchManager::kUsageCount[] = "usage_count";
71 const char DefaultSearchManager::kAlternateURLs[] = "alternate_urls"; 78 const char DefaultSearchManager::kAlternateURLs[] = "alternate_urls";
72 const char DefaultSearchManager::kSearchTermsReplacementKey[] = 79 const char DefaultSearchManager::kSearchTermsReplacementKey[] =
73 "search_terms_replacement_key"; 80 "search_terms_replacement_key";
74 const char DefaultSearchManager::kCreatedByPolicy[] = "created_by_policy"; 81 const char DefaultSearchManager::kCreatedByPolicy[] = "created_by_policy";
75 const char DefaultSearchManager::kDisabledByPolicy[] = "disabled_by_policy"; 82 const char DefaultSearchManager::kDisabledByPolicy[] = "disabled_by_policy";
76 83
77 DefaultSearchManager::DefaultSearchManager(PrefService* pref_service) 84 DefaultSearchManager::DefaultSearchManager(
78 : pref_service_(pref_service), default_search_controlled_by_policy_(false) { 85 PrefService* pref_service,
79 DCHECK(pref_service_); 86 const ObserverCallback& change_observer)
80 pref_change_registrar_.Init(pref_service_); 87 : pref_service_(pref_service),
81 pref_change_registrar_.Add( 88 change_observer_(change_observer),
82 kDefaultSearchProviderData, 89 default_search_controlled_by_policy_(false) {
83 base::Bind(&DefaultSearchManager::OnDefaultSearchPrefChanged, 90 if (pref_service_) {
84 base::Unretained(this))); 91 pref_change_registrar_.Init(pref_service_);
85 pref_change_registrar_.Add( 92 pref_change_registrar_.Add(
86 prefs::kSearchProviderOverrides, 93 kDefaultSearchProviderDataPrefName,
87 base::Bind(&DefaultSearchManager::OnOverridesPrefChanged, 94 base::Bind(&DefaultSearchManager::OnDefaultSearchPrefChanged,
88 base::Unretained(this))); 95 base::Unretained(this)));
89 OnDefaultSearchPrefChanged(); 96 pref_change_registrar_.Add(
90 OnOverridesPrefChanged(); 97 prefs::kSearchProviderOverrides,
98 base::Bind(&DefaultSearchManager::OnOverridesPrefChanged,
99 base::Unretained(this)));
100 }
101 LoadPrepopulatedDefaultSearch();
102 LoadDefaultSearchEngineFromPrefs();
91 } 103 }
92 104
93 DefaultSearchManager::~DefaultSearchManager() { 105 DefaultSearchManager::~DefaultSearchManager() {
94 } 106 }
95 107
96 // static 108 // static
97 void DefaultSearchManager::RegisterProfilePrefs( 109 void DefaultSearchManager::RegisterProfilePrefs(
98 user_prefs::PrefRegistrySyncable* registry) { 110 user_prefs::PrefRegistrySyncable* registry) {
99 registry->RegisterDictionaryPref( 111 registry->RegisterDictionaryPref(
100 kDefaultSearchProviderData, 112 kDefaultSearchProviderDataPrefName,
101 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 113 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
102 } 114 }
103 115
104 // static 116 // static
105 void DefaultSearchManager::AddPrefValueToMap(base::DictionaryValue* value, 117 void DefaultSearchManager::AddPrefValueToMap(base::DictionaryValue* value,
106 PrefValueMap* pref_value_map) { 118 PrefValueMap* pref_value_map) {
107 pref_value_map->SetValue(kDefaultSearchProviderData, value); 119 pref_value_map->SetValue(kDefaultSearchProviderDataPrefName, value);
108 } 120 }
109 121
110 DefaultSearchManager::Source 122 TemplateURLData* DefaultSearchManager::GetDefaultSearchEngine(
Peter Kasting 2014/05/03 00:28:18 Given the number of times you call this just to ge
erikwright (departed) 2014/05/05 01:49:38 It makes sense to have a single function calculate
111 DefaultSearchManager::GetDefaultSearchEngineSource() const { 123 Source* source) const {
112 if (default_search_controlled_by_policy_) 124 if (default_search_controlled_by_policy_) {
113 return FROM_POLICY; 125 if (source)
114 if (extension_default_search_) 126 *source = FROM_POLICY;
115 return FROM_EXTENSION; 127 return prefs_default_search_.get();
116 if (prefs_default_search_) 128 }
117 return FROM_USER; 129 if (extension_default_search_) {
130 if (source)
131 *source = FROM_EXTENSION;
132 return extension_default_search_.get();
133 }
134 if (prefs_default_search_) {
135 if (source)
136 *source = FROM_USER;
137 return prefs_default_search_.get();
138 }
118 139
119 return FROM_FALLBACK; 140 if (source)
120 } 141 *source = FROM_FALLBACK;
121
122 TemplateURLData* DefaultSearchManager::GetDefaultSearchEngine() const {
123 if (default_search_controlled_by_policy_)
124 return prefs_default_search_.get();
125 if (extension_default_search_)
126 return extension_default_search_.get();
127 if (prefs_default_search_)
128 return prefs_default_search_.get();
129
130 return fallback_default_search_.get(); 142 return fallback_default_search_.get();
131 } 143 }
132 144
133 void DefaultSearchManager::SetUserSelectedDefaultSearchEngine( 145 void DefaultSearchManager::SetUserSelectedDefaultSearchEngine(
134 const TemplateURLData& data) { 146 const TemplateURLData& data) {
147 if (!pref_service_) {
148 prefs_default_search_.reset(new TemplateURLData(data));
149 MergePrefsDataWithPrepopulated();
150 NotifyObserver();
151 return;
152 }
153
135 base::DictionaryValue url_dict; 154 base::DictionaryValue url_dict;
136 url_dict.SetString(kID, base::Int64ToString(data.id)); 155 url_dict.SetString(kID, base::Int64ToString(data.id));
137 url_dict.SetString(kShortName, data.short_name); 156 url_dict.SetString(kShortName, data.short_name);
138 url_dict.SetString(kKeyword, data.keyword()); 157 url_dict.SetString(kKeyword, data.keyword());
139 url_dict.SetInteger(kPrepopulateID, data.prepopulate_id); 158 url_dict.SetInteger(kPrepopulateID, data.prepopulate_id);
140 url_dict.SetString(kSyncGUID, data.sync_guid); 159 url_dict.SetString(kSyncGUID, data.sync_guid);
141 160
142 url_dict.SetString(kURL, data.url()); 161 url_dict.SetString(kURL, data.url());
143 url_dict.SetString(kSuggestionsURL, data.suggestions_url); 162 url_dict.SetString(kSuggestionsURL, data.suggestions_url);
144 url_dict.SetString(kInstantURL, data.instant_url); 163 url_dict.SetString(kInstantURL, data.instant_url);
(...skipping 10 matching lines...) Expand all
155 174
156 url_dict.SetBoolean(kSafeForAutoReplace, data.safe_for_autoreplace); 175 url_dict.SetBoolean(kSafeForAutoReplace, data.safe_for_autoreplace);
157 176
158 url_dict.SetDouble(kDateCreated, data.date_created.ToInternalValue()); 177 url_dict.SetDouble(kDateCreated, data.date_created.ToInternalValue());
159 url_dict.SetDouble(kLastModified, data.last_modified.ToInternalValue()); 178 url_dict.SetDouble(kLastModified, data.last_modified.ToInternalValue());
160 url_dict.SetInteger(kUsageCount, data.usage_count); 179 url_dict.SetInteger(kUsageCount, data.usage_count);
161 180
162 scoped_ptr<base::ListValue> alternate_urls(new base::ListValue); 181 scoped_ptr<base::ListValue> alternate_urls(new base::ListValue);
163 for (std::vector<std::string>::const_iterator it = 182 for (std::vector<std::string>::const_iterator it =
164 data.alternate_urls.begin(); 183 data.alternate_urls.begin();
165 it != data.alternate_urls.end(); 184 it != data.alternate_urls.end(); ++it) {
166 ++it) {
167 alternate_urls->AppendString(*it); 185 alternate_urls->AppendString(*it);
168 } 186 }
169 url_dict.Set(kAlternateURLs, alternate_urls.release()); 187 url_dict.Set(kAlternateURLs, alternate_urls.release());
170 188
171 scoped_ptr<base::ListValue> encodings(new base::ListValue); 189 scoped_ptr<base::ListValue> encodings(new base::ListValue);
172 for (std::vector<std::string>::const_iterator it = 190 for (std::vector<std::string>::const_iterator it =
173 data.input_encodings.begin(); 191 data.input_encodings.begin();
174 it != data.input_encodings.end(); 192 it != data.input_encodings.end(); ++it) {
175 ++it) {
176 encodings->AppendString(*it); 193 encodings->AppendString(*it);
177 } 194 }
178 url_dict.Set(kInputEncodings, encodings.release()); 195 url_dict.Set(kInputEncodings, encodings.release());
179 196
180 url_dict.SetString(kSearchTermsReplacementKey, 197 url_dict.SetString(kSearchTermsReplacementKey,
181 data.search_terms_replacement_key); 198 data.search_terms_replacement_key);
182 199
183 url_dict.SetBoolean(kCreatedByPolicy, data.created_by_policy); 200 url_dict.SetBoolean(kCreatedByPolicy, data.created_by_policy);
184 201
185 pref_service_->Set(kDefaultSearchProviderData, url_dict); 202 pref_service_->Set(kDefaultSearchProviderDataPrefName, url_dict);
186 } 203 }
187 204
188 void DefaultSearchManager::SetExtensionControlledDefaultSearchEngine( 205 void DefaultSearchManager::SetExtensionControlledDefaultSearchEngine(
189 TemplateURLData* data) { 206 TemplateURLData* data) {
207 DCHECK(data);
208 Source old_source = FROM_FALLBACK;
Peter Kasting 2014/05/03 00:28:18 Nit: I think initting this before the call, when t
erikwright (departed) 2014/05/05 01:49:38 Done.
209 GetDefaultSearchEngine(&old_source);
190 extension_default_search_.reset(data); 210 extension_default_search_.reset(data);
211 if (old_source <= FROM_EXTENSION)
Peter Kasting 2014/05/03 00:28:18 This implies that the Source values are in sorted
erikwright (departed) 2014/05/05 01:49:38 Done.
212 NotifyObserver();
191 } 213 }
192 214
193 void DefaultSearchManager::ClearExtensionControlledDefaultSearchEngine() { 215 void DefaultSearchManager::ClearExtensionControlledDefaultSearchEngine() {
216 Source old_source = FROM_FALLBACK;
217 GetDefaultSearchEngine(&old_source);
194 extension_default_search_.reset(); 218 extension_default_search_.reset();
219 if (old_source == FROM_EXTENSION)
220 NotifyObserver();
195 } 221 }
196 222
197 void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() { 223 void DefaultSearchManager::ClearUserSelectedDefaultSearchEngine() {
198 pref_service_->ClearPref(kDefaultSearchProviderData); 224 if (pref_service_) {
225 pref_service_->ClearPref(kDefaultSearchProviderDataPrefName);
226 } else {
227 prefs_default_search_.reset();
228 NotifyObserver();
229 }
199 } 230 }
200 231
201 void DefaultSearchManager::OnDefaultSearchPrefChanged() { 232 void DefaultSearchManager::OnDefaultSearchPrefChanged() {
202 TemplateURLData* data; 233 Source old_source = FROM_FALLBACK;
203 if (ReadDefaultSearchEngineFromPrefs(&data)) { 234 GetDefaultSearchEngine(&old_source);
204 prefs_default_search_.reset(data); 235 LoadDefaultSearchEngineFromPrefs();
205 MergePrefsDataWithPrepopulated(); 236
237 if (old_source == FROM_USER || old_source == FROM_POLICY) {
238 NotifyObserver();
206 } else { 239 } else {
207 prefs_default_search_.reset(); 240 Source new_source = FROM_FALLBACK;
241 GetDefaultSearchEngine(&new_source);
242 if (new_source == FROM_USER || new_source == FROM_POLICY)
243 NotifyObserver();
208 } 244 }
Peter Kasting 2014/05/03 00:28:18 Nit: Simpler: Source source; GetDefaultSearch
erikwright (departed) 2014/05/05 01:49:38 Done.
209 UpdatePolicyStatus();
210 } 245 }
211 246
212 void DefaultSearchManager::OnOverridesPrefChanged() { 247 void DefaultSearchManager::OnOverridesPrefChanged() {
213 scoped_ptr<TemplateURLData> data = 248 LoadPrepopulatedDefaultSearch();
214 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service_);
215 fallback_default_search_ = data.Pass();
216 MergePrefsDataWithPrepopulated();
217 }
218 249
219 void DefaultSearchManager::UpdatePolicyStatus() { 250 TemplateURLData* effective_data = GetDefaultSearchEngine(NULL);
220 const PrefService::Preference* pref = 251 if (effective_data && effective_data->prepopulate_id) {
221 pref_service_->FindPreference(kDefaultSearchProviderData); 252 // A user-selected, policy-selected or fallback pre-populated engine is
222 default_search_controlled_by_policy_ = pref && pref->IsManaged(); 253 // active and may have changed with this event.
254 NotifyObserver();
255 }
223 } 256 }
224 257
225 void DefaultSearchManager::MergePrefsDataWithPrepopulated() { 258 void DefaultSearchManager::MergePrefsDataWithPrepopulated() {
226 if (!prefs_default_search_ || !prefs_default_search_->prepopulate_id) 259 if (!prefs_default_search_ || !prefs_default_search_->prepopulate_id)
227 return; 260 return;
228 261
229 size_t default_search_index; 262 size_t default_search_index;
230 ScopedVector<TemplateURLData> prepopulated_urls = 263 ScopedVector<TemplateURLData> prepopulated_urls =
231 TemplateURLPrepopulateData::GetPrepopulatedEngines(pref_service_, 264 TemplateURLPrepopulateData::GetPrepopulatedEngines(
232 &default_search_index); 265 pref_service_, &default_search_index);
Peter Kasting 2014/05/03 00:28:18 Nit: Indenting is wrong (3 instead of 4) -- I woul
erikwright (departed) 2014/05/05 01:49:38 Done.
233 266
234 for (size_t i = 0; i < prepopulated_urls.size(); ++i) { 267 for (size_t i = 0; i < prepopulated_urls.size(); ++i) {
235 if (prepopulated_urls[i]->prepopulate_id == 268 if (prepopulated_urls[i]->prepopulate_id ==
236 prefs_default_search_->prepopulate_id) { 269 prefs_default_search_->prepopulate_id) {
237 if (!prefs_default_search_->safe_for_autoreplace) { 270 if (!prefs_default_search_->safe_for_autoreplace) {
238 prepopulated_urls[i]->safe_for_autoreplace = false; 271 prepopulated_urls[i]->safe_for_autoreplace = false;
239 prepopulated_urls[i]->SetKeyword(prefs_default_search_->keyword()); 272 prepopulated_urls[i]->SetKeyword(prefs_default_search_->keyword());
240 prepopulated_urls[i]->short_name = prefs_default_search_->short_name; 273 prepopulated_urls[i]->short_name = prefs_default_search_->short_name;
241 } 274 }
242 prepopulated_urls[i]->id = prefs_default_search_->id; 275 prepopulated_urls[i]->id = prefs_default_search_->id;
243 prepopulated_urls[i]->sync_guid = prefs_default_search_->sync_guid; 276 prepopulated_urls[i]->sync_guid = prefs_default_search_->sync_guid;
244 prepopulated_urls[i]->date_created = prefs_default_search_->date_created; 277 prepopulated_urls[i]->date_created = prefs_default_search_->date_created;
245 prepopulated_urls[i]->last_modified = 278 prepopulated_urls[i]->last_modified =
246 prefs_default_search_->last_modified; 279 prefs_default_search_->last_modified;
247 prefs_default_search_.reset(prepopulated_urls[i]); 280 prefs_default_search_.reset(prepopulated_urls[i]);
248 prepopulated_urls.weak_erase(prepopulated_urls.begin() + i);
Peter Kasting 2014/05/03 00:28:18 Doesn't removing this line result in the URL being
249 return; 281 return;
250 } 282 }
251 } 283 }
252 } 284 }
253 285
254 bool DefaultSearchManager::ReadDefaultSearchEngineFromPrefs( 286 void DefaultSearchManager::LoadDefaultSearchEngineFromPrefs() {
255 TemplateURLData** dse_data) { 287 if (!pref_service_)
288 return;
289
290 prefs_default_search_.reset();
291 default_search_controlled_by_policy_ =
292 IsDefaultSearchProviderManaged(pref_service_);
293
256 const base::DictionaryValue* url_dict = 294 const base::DictionaryValue* url_dict =
257 pref_service_->GetDictionary(kDefaultSearchProviderData); 295 pref_service_->GetDictionary(kDefaultSearchProviderDataPrefName);
296 if (url_dict->empty())
297 return;
258 298
259 if (url_dict->empty()) 299 if (default_search_controlled_by_policy_) {
260 return false; 300 bool disabled_by_policy = false;
261 301 if (url_dict->GetBoolean(kDisabledByPolicy, &disabled_by_policy) &&
262 bool disabled_by_policy = false; 302 disabled_by_policy) {
Peter Kasting 2014/05/03 00:28:18 Nit: No {}
erikwright (departed) 2014/05/05 01:49:38 Done.
263 if (url_dict->GetBoolean(kDisabledByPolicy, &disabled_by_policy) && 303 return;
264 disabled_by_policy) { 304 }
265 *dse_data = NULL;
266 return true;
267 } 305 }
268 306
269 TemplateURLData* data = new TemplateURLData();
270 std::string search_url; 307 std::string search_url;
271 base::string16 keyword; 308 base::string16 keyword;
272 url_dict->GetString(kURL, &search_url); 309 url_dict->GetString(kURL, &search_url);
273 url_dict->GetString(kKeyword, &keyword); 310 url_dict->GetString(kKeyword, &keyword);
274 if (search_url.empty()) 311 if (search_url.empty() || keyword.empty())
275 return false; 312 return;
276 if (keyword.empty()) 313
277 keyword = TemplateURLService::GenerateKeyword(GURL(search_url)); 314 prefs_default_search_.reset(new TemplateURLData);
278 data->SetKeyword(keyword); 315 prefs_default_search_->SetKeyword(keyword);
279 data->SetURL(search_url); 316 prefs_default_search_->SetURL(search_url);
280 317
281 std::string id; 318 std::string id;
282 url_dict->GetString(kID, &id); 319 url_dict->GetString(kID, &id);
283 base::StringToInt64(id, &data->id); 320 base::StringToInt64(id, &prefs_default_search_->id);
284 url_dict->GetString(kShortName, &data->short_name); 321 url_dict->GetString(kShortName, &prefs_default_search_->short_name);
285 url_dict->GetInteger(kPrepopulateID, &data->prepopulate_id); 322 url_dict->GetInteger(kPrepopulateID, &prefs_default_search_->prepopulate_id);
286 url_dict->GetString(kSyncGUID, &data->sync_guid); 323 url_dict->GetString(kSyncGUID, &prefs_default_search_->sync_guid);
287 324
288 url_dict->GetString(kSuggestionsURL, &data->suggestions_url); 325 url_dict->GetString(kSuggestionsURL, &prefs_default_search_->suggestions_url);
289 url_dict->GetString(kInstantURL, &data->instant_url); 326 url_dict->GetString(kInstantURL, &prefs_default_search_->instant_url);
290 url_dict->GetString(kImageURL, &data->image_url); 327 url_dict->GetString(kImageURL, &prefs_default_search_->image_url);
291 url_dict->GetString(kNewTabURL, &data->new_tab_url); 328 url_dict->GetString(kNewTabURL, &prefs_default_search_->new_tab_url);
292 329
293 std::string favicon_url; 330 std::string favicon_url;
294 std::string originating_url; 331 std::string originating_url;
295 url_dict->GetString(kFaviconURL, &favicon_url); 332 url_dict->GetString(kFaviconURL, &favicon_url);
296 url_dict->GetString(kOriginatingURL, &originating_url); 333 url_dict->GetString(kOriginatingURL, &originating_url);
297 data->favicon_url = GURL(favicon_url); 334 prefs_default_search_->favicon_url = GURL(favicon_url);
298 data->originating_url = GURL(originating_url); 335 prefs_default_search_->originating_url = GURL(originating_url);
299 336
300 url_dict->GetString(kSearchURLPostParams, &data->search_url_post_params); 337 url_dict->GetString(kSearchURLPostParams,
338 &prefs_default_search_->search_url_post_params);
301 url_dict->GetString(kSuggestionsURLPostParams, 339 url_dict->GetString(kSuggestionsURLPostParams,
302 &data->suggestions_url_post_params); 340 &prefs_default_search_->suggestions_url_post_params);
303 url_dict->GetString(kInstantURLPostParams, &data->instant_url_post_params); 341 url_dict->GetString(kInstantURLPostParams,
304 url_dict->GetString(kImageURLPostParams, &data->image_url_post_params); 342 &prefs_default_search_->instant_url_post_params);
343 url_dict->GetString(kImageURLPostParams,
344 &prefs_default_search_->image_url_post_params);
305 345
306 url_dict->GetBoolean(kSafeForAutoReplace, &data->safe_for_autoreplace); 346 url_dict->GetBoolean(kSafeForAutoReplace,
347 &prefs_default_search_->safe_for_autoreplace);
307 348
308 double date_created = 0.0; 349 double date_created = 0.0;
309 double last_modified = 0.0; 350 double last_modified = 0.0;
310 url_dict->GetDouble(kDateCreated, &date_created); 351 url_dict->GetDouble(kDateCreated, &date_created);
311 url_dict->GetDouble(kLastModified, &last_modified); 352 url_dict->GetDouble(kLastModified, &last_modified);
312 data->date_created = base::Time::FromInternalValue(date_created); 353 prefs_default_search_->date_created =
313 data->last_modified = base::Time::FromInternalValue(last_modified); 354 base::Time::FromInternalValue(date_created);
355 prefs_default_search_->last_modified =
356 base::Time::FromInternalValue(last_modified);
314 357
315 url_dict->GetInteger(kUsageCount, &data->usage_count); 358 url_dict->GetInteger(kUsageCount, &prefs_default_search_->usage_count);
316 359
317 const base::ListValue* alternate_urls; 360 const base::ListValue* alternate_urls = NULL;
318 url_dict->GetList(kAlternateURLs, &alternate_urls); 361 if (url_dict->GetList(kAlternateURLs, &alternate_urls)) {
319 data->alternate_urls.clear(); 362 for (base::ListValue::const_iterator it = alternate_urls->begin();
320 for (base::ListValue::const_iterator it = alternate_urls->begin(); 363 it != alternate_urls->end();
321 it != alternate_urls->end(); ++it) { 364 ++it) {
322 std::string alternate_url; 365 std::string alternate_url;
323 if ((*it)->GetAsString(&alternate_url)) 366 if ((*it)->GetAsString(&alternate_url))
324 data->alternate_urls.push_back(alternate_url); 367 prefs_default_search_->alternate_urls.push_back(alternate_url);
368 }
325 } 369 }
326 370
327 const base::ListValue* encodings; 371 const base::ListValue* encodings = NULL;
328 url_dict->GetList(kInputEncodings, &encodings); 372 if (url_dict->GetList(kInputEncodings, &encodings)) {
329 data->input_encodings.clear(); 373 for (base::ListValue::const_iterator it = encodings->begin();
330 for (base::ListValue::const_iterator it = encodings->begin(); 374 it != encodings->end();
331 it != encodings->end(); ++it) { 375 ++it) {
332 std::string encoding; 376 std::string encoding;
333 if ((*it)->GetAsString(&encoding)) 377 if ((*it)->GetAsString(&encoding))
334 data->input_encodings.push_back(encoding); 378 prefs_default_search_->input_encodings.push_back(encoding);
379 }
335 } 380 }
336 381
337 url_dict->GetString(kSearchTermsReplacementKey, 382 url_dict->GetString(kSearchTermsReplacementKey,
338 &data->search_terms_replacement_key); 383 &prefs_default_search_->search_terms_replacement_key);
339 384
340 url_dict->GetBoolean(kCreatedByPolicy, &data->created_by_policy); 385 url_dict->GetBoolean(kCreatedByPolicy,
386 &prefs_default_search_->created_by_policy);
341 387
342 data->show_in_default_list = true; 388 prefs_default_search_->show_in_default_list = true;
343 *dse_data = data; 389 MergePrefsDataWithPrepopulated();
344 return true;
345 } 390 }
391
392 void DefaultSearchManager::LoadPrepopulatedDefaultSearch() {
393 scoped_ptr<TemplateURLData> data =
394 TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(pref_service_);
395 fallback_default_search_ = data.Pass();
396 MergePrefsDataWithPrepopulated();
397 }
398
399 void DefaultSearchManager::NotifyObserver() {
400 if (!change_observer_.is_null()) {
401 Source source = FROM_FALLBACK;
402 TemplateURLData* data = GetDefaultSearchEngine(&source);
403 change_observer_.Run(data, source);
404 }
405 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698