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

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

Issue 10676012: De-dupe input encodings in TemplateURLs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 5 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
« no previous file with comments | « chrome/browser/search_engines/util.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/util.h" 5 #include "chrome/browser/search_engines/util.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <map> 9 #include <map>
10 #include <vector> 10 #include <vector>
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 DCHECK(template_urls->empty()); 250 DCHECK(template_urls->empty());
251 DCHECK(default_search_provider); 251 DCHECK(default_search_provider);
252 DCHECK(*default_search_provider == NULL); 252 DCHECK(*default_search_provider == NULL);
253 DCHECK_EQ(KEYWORDS_RESULT, result.GetType()); 253 DCHECK_EQ(KEYWORDS_RESULT, result.GetType());
254 DCHECK(new_resource_keyword_version); 254 DCHECK(new_resource_keyword_version);
255 255
256 *new_resource_keyword_version = 0; 256 *new_resource_keyword_version = 0;
257 WDKeywordsResult keyword_result = reinterpret_cast< 257 WDKeywordsResult keyword_result = reinterpret_cast<
258 const WDResult<WDKeywordsResult>*>(&result)->GetValue(); 258 const WDResult<WDKeywordsResult>*>(&result)->GetValue();
259 259
260 for (KeywordTable::Keywords::const_iterator i( 260 for (KeywordTable::Keywords::iterator i(keyword_result.keywords.begin());
261 keyword_result.keywords.begin()); i != keyword_result.keywords.end(); 261 i != keyword_result.keywords.end(); ++i) {
262 ++i) 262 // Fix any duplicate encodings in the local database. Note that we don't
263 // adjust the last_modified time of this keyword; this way, we won't later
264 // overwrite any changes on the sync server that happened to this keyword
265 // since the last time we synced. Instead, we also run a de-duping pass on
266 // the server-provided data in
267 // TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData() and
268 // update the server with the merged, de-duped results at that time. We
269 // still fix here, though, to correct problems in clients that have disabled
270 // search engine sync, since in that case that code will never be reached.
271 if (DeDupeEncodings(&i->input_encodings) && service)
272 service->UpdateKeyword(*i);
263 template_urls->push_back(new TemplateURL(profile, *i)); 273 template_urls->push_back(new TemplateURL(profile, *i));
274 }
264 275
265 int64 default_search_provider_id = keyword_result.default_search_provider_id; 276 int64 default_search_provider_id = keyword_result.default_search_provider_id;
266 if (default_search_provider_id) { 277 if (default_search_provider_id) {
267 *default_search_provider = 278 *default_search_provider =
268 GetTemplateURLByID(*template_urls, default_search_provider_id); 279 GetTemplateURLByID(*template_urls, default_search_provider_id);
269 } 280 }
270 281
271 ScopedVector<TemplateURL> prepopulated_urls; 282 ScopedVector<TemplateURL> prepopulated_urls;
272 size_t default_search_index; 283 size_t default_search_index;
273 TemplateURLPrepopulateData::GetPrepopulatedEngines(profile, 284 TemplateURLPrepopulateData::GetPrepopulatedEngines(profile,
274 &prepopulated_urls.get(), &default_search_index); 285 &prepopulated_urls.get(), &default_search_index);
275 RemoveDuplicatePrepopulateIDs(service, prepopulated_urls, 286 RemoveDuplicatePrepopulateIDs(service, prepopulated_urls,
276 *default_search_provider, template_urls, 287 *default_search_provider, template_urls,
277 removed_keyword_guids); 288 removed_keyword_guids);
278 289
279 const int resource_keyword_version = 290 const int resource_keyword_version =
280 TemplateURLPrepopulateData::GetDataVersion( 291 TemplateURLPrepopulateData::GetDataVersion(
281 profile ? profile->GetPrefs() : NULL); 292 profile ? profile->GetPrefs() : NULL);
282 if (keyword_result.builtin_keyword_version != resource_keyword_version) { 293 if (keyword_result.builtin_keyword_version != resource_keyword_version) {
283 MergeEnginesFromPrepopulateData(profile, service, &prepopulated_urls, 294 MergeEnginesFromPrepopulateData(profile, service, &prepopulated_urls,
284 default_search_index, template_urls, default_search_provider, 295 default_search_index, template_urls, default_search_provider,
285 removed_keyword_guids); 296 removed_keyword_guids);
286 *new_resource_keyword_version = resource_keyword_version; 297 *new_resource_keyword_version = resource_keyword_version;
287 } 298 }
288 } 299 }
289 300
301 bool DeDupeEncodings(std::vector<std::string>* encodings) {
302 std::vector<std::string> deduped_encodings;
303 std::set<std::string> encoding_set;
304 for (std::vector<std::string>::const_iterator i(encodings->begin());
305 i != encodings->end(); ++i) {
306 if (encoding_set.insert(*i).second)
307 deduped_encodings.push_back(*i);
308 }
309 encodings->swap(deduped_encodings);
310 return encodings->size() != deduped_encodings.size();
311 }
312
290 bool DidDefaultSearchProviderChange( 313 bool DidDefaultSearchProviderChange(
291 const WDTypedResult& result, 314 const WDTypedResult& result,
292 Profile* profile, 315 Profile* profile,
293 scoped_ptr<TemplateURL>* backup_default_search_provider) { 316 scoped_ptr<TemplateURL>* backup_default_search_provider) {
294 DCHECK(backup_default_search_provider); 317 DCHECK(backup_default_search_provider);
295 DCHECK(!backup_default_search_provider->get()); 318 DCHECK(!backup_default_search_provider->get());
296 DCHECK_EQ(result.GetType(), KEYWORDS_RESULT); 319 DCHECK_EQ(result.GetType(), KEYWORDS_RESULT);
297 320
298 WDKeywordsResult keyword_result = reinterpret_cast< 321 WDKeywordsResult keyword_result = reinterpret_cast<
299 const WDResult<WDKeywordsResult>*>(&result)->GetValue(); 322 const WDResult<WDKeywordsResult>*>(&result)->GetValue();
300 323
301 if (!keyword_result.did_default_search_provider_change) 324 if (!keyword_result.did_default_search_provider_change)
302 return false; 325 return false;
303 326
304 if (keyword_result.backup_valid) { 327 if (keyword_result.backup_valid) {
305 backup_default_search_provider->reset(new TemplateURL(profile, 328 backup_default_search_provider->reset(new TemplateURL(profile,
306 keyword_result.default_search_provider_backup)); 329 keyword_result.default_search_provider_backup));
307 } 330 }
308 return true; 331 return true;
309 } 332 }
OLDNEW
« no previous file with comments | « chrome/browser/search_engines/util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698