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

Unified Diff: chrome/browser/search_engines/util.cc

Issue 10384188: Ensure that TemplateURLs removed by prepopulate search engine merging is also removed from Sync. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: init Created 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/search_engines/util.cc
diff --git a/chrome/browser/search_engines/util.cc b/chrome/browser/search_engines/util.cc
index 216d8f3c96235d95e69cc4e8b9aa2dd174e64ae5..c68771a01c42a496213c053c61a8c14da710ffc3 100644
--- a/chrome/browser/search_engines/util.cc
+++ b/chrome/browser/search_engines/util.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/search_engines/util.h"
#include <set>
+#include <string>
#include <vector>
#include "base/logging.h"
@@ -38,10 +39,12 @@ string16 GetDefaultSearchEngineName(Profile* profile) {
// prepopulate ids. Duplicate prepopulate ids are not allowed, but due to a
// bug it was possible get dups. This step is only called when the version
// number changes. Only pass in a non-NULL value for |service| if the removed
-// items should be removed from the DB.
+// items should be removed from the DB. If |removed_keyword_guids| is not NULL,
+// the Sync GUID of each item removed from the DB will be added to it.
static void RemoveDuplicatePrepopulateIDs(
std::vector<TemplateURL*>* template_urls,
- WebDataService* service) {
+ WebDataService* service,
+ std::set<std::string>* removed_keyword_guids) {
DCHECK(template_urls);
DCHECK(service == NULL || BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -51,8 +54,11 @@ static void RemoveDuplicatePrepopulateIDs(
int prepopulate_id = (*i)->prepopulate_id();
if (prepopulate_id) {
if (ids.find(prepopulate_id) != ids.end()) {
- if (service)
+ if (service) {
service->RemoveKeyword((*i)->id());
+ if (removed_keyword_guids)
+ removed_keyword_guids->insert((*i)->sync_guid());
+ }
delete *i;
i = template_urls->erase(i);
} else {
@@ -81,11 +87,14 @@ TemplateURL* GetTemplateURLByID(
// Loads engines from prepopulate data and merges them in with the existing
// engines. This is invoked when the version of the prepopulate data changes.
+// If |removed_keyword_guids| is not NULL, the Sync GUID of each item removed
+// from the DB will be added to it.
void MergeEnginesFromPrepopulateData(
Profile* profile,
WebDataService* service,
std::vector<TemplateURL*>* template_urls,
- TemplateURL** default_search_provider) {
+ TemplateURL** default_search_provider,
+ std::set<std::string>* removed_keyword_guids) {
DCHECK(service == NULL || BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(template_urls);
DCHECK(default_search_provider);
@@ -163,8 +172,11 @@ void MergeEnginesFromPrepopulateData(
std::find(template_urls->begin(), template_urls->end(), template_url);
DCHECK(j != template_urls->end());
template_urls->erase(j);
- if (service)
+ if (service) {
service->RemoveKeyword(template_url->id());
+ if (removed_keyword_guids)
+ removed_keyword_guids->insert(template_url->sync_guid());
+ }
delete template_url;
}
}
@@ -176,7 +188,8 @@ void GetSearchProvidersUsingKeywordResult(
Profile* profile,
std::vector<TemplateURL*>* template_urls,
TemplateURL** default_search_provider,
- int* new_resource_keyword_version) {
+ int* new_resource_keyword_version,
+ std::set<std::string>* removed_keyword_guids) {
DCHECK(service == NULL || BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(template_urls);
DCHECK(template_urls->empty());
@@ -201,7 +214,8 @@ void GetSearchProvidersUsingKeywordResult(
// There should never be duplicate TemplateURLs. We had a bug such that
// duplicate TemplateURLs existed for one locale. As such we invoke
// RemoveDuplicatePrepopulateIDs to nuke the duplicates.
- RemoveDuplicatePrepopulateIDs(template_urls, service);
+ RemoveDuplicatePrepopulateIDs(template_urls, service,
+ removed_keyword_guids);
}
int64 default_search_provider_id = keyword_result.default_search_provider_id;
@@ -212,7 +226,8 @@ void GetSearchProvidersUsingKeywordResult(
if (keyword_result.builtin_keyword_version != resource_keyword_version) {
MergeEnginesFromPrepopulateData(profile, service, template_urls,
- default_search_provider);
+ default_search_provider,
+ removed_keyword_guids);
*new_resource_keyword_version = resource_keyword_version;
}
}
@@ -237,4 +252,3 @@ bool DidDefaultSearchProviderChange(
}
return true;
}
-

Powered by Google App Engine
This is Rietveld 408576698