| Index: chrome/browser/search_engines/util.cc
|
| diff --git a/chrome/browser/search_engines/util.cc b/chrome/browser/search_engines/util.cc
|
| index 5378b3b05b747bcd1c275f070c515577b770eeec..afb3a53e82b1fac8cbf00f4ac92b0105ca56e32b 100644
|
| --- a/chrome/browser/search_engines/util.cc
|
| +++ b/chrome/browser/search_engines/util.cc
|
| @@ -98,16 +98,8 @@
|
| UncheckedURLMap::iterator best = unchecked_urls.begin();
|
| bool matched_keyword = false;
|
| for (UncheckedURLMap::iterator i = unchecked_urls.begin(); i != end; ++i) {
|
| - // If the user-selected DSE is a prepopulated engine its properties will
|
| - // either come from the prepopulation origin or from the user preferences
|
| - // file (see DefaultSearchManager). Those properties will end up
|
| - // overwriting whatever we load now anyway. If we are eliminating
|
| - // duplicates, then, we err on the side of keeping the thing that looks
|
| - // more like the value we will end up with in the end.
|
| - if (default_search_provider &&
|
| - (default_search_provider->prepopulate_id() ==
|
| - i->second->prepopulate_id()) &&
|
| - default_search_provider->HasSameKeywordAs(i->second->data())) {
|
| + // A URL is automatically the best if it's the default search engine.
|
| + if (i->second == default_search_provider) {
|
| best = i;
|
| break;
|
| }
|
| @@ -199,14 +191,17 @@
|
| ScopedVector<TemplateURLData>* prepopulated_urls,
|
| size_t default_search_index,
|
| TemplateURLService::TemplateURLVector* 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(prepopulated_urls);
|
| DCHECK(template_urls);
|
| -
|
| + DCHECK(default_search_provider);
|
| +
|
| + int default_prepopulated_id =
|
| + (*prepopulated_urls)[default_search_index]->prepopulate_id;
|
| ActionsFromPrepopulateData actions(CreateActionsFromCurrentPrepopulateData(
|
| - prepopulated_urls, *template_urls, default_search_provider));
|
| + prepopulated_urls, *template_urls, *default_search_provider));
|
|
|
| // Remove items.
|
| for (std::vector<TemplateURL*>::iterator i = actions.removed_engines.begin();
|
| @@ -215,8 +210,7 @@
|
| TemplateURLService::TemplateURLVector::iterator j =
|
| std::find(template_urls->begin(), template_urls->end(), template_url);
|
| DCHECK(j != template_urls->end());
|
| - DCHECK(!default_search_provider ||
|
| - (*j)->prepopulate_id() != default_search_provider->prepopulate_id());
|
| + DCHECK(*j != *default_search_provider);
|
| template_urls->erase(j);
|
| if (service) {
|
| service->RemoveKeyword(template_url->id());
|
| @@ -237,6 +231,8 @@
|
| TemplateURLService::TemplateURLVector::iterator j = std::find(
|
| template_urls->begin(), template_urls->end(), existing_url.get());
|
| *j = new TemplateURL(profile, data);
|
| + if (*default_search_provider == existing_url.get())
|
| + *default_search_provider = *j;
|
| }
|
|
|
| // Add items.
|
| @@ -245,6 +241,13 @@
|
| it != actions.added_engines.end();
|
| ++it) {
|
| template_urls->push_back(new TemplateURL(profile, *it));
|
| + }
|
| +
|
| + if (!*default_search_provider) {
|
| + // The user had no existing default search provider, so set the
|
| + // default to the default prepopulated engine.
|
| + *default_search_provider = FindURLByPrepopulateID(*template_urls,
|
| + default_prepopulated_id);
|
| }
|
| }
|
|
|
| @@ -299,16 +302,10 @@
|
| // The block above removed all the URLs from the |id_to_turl| map that were
|
| // found in the prepopulate data. Any remaining URLs that haven't been
|
| // user-edited or made default can be removed from the data store.
|
| - // We assume that this entry is equivalent to the DSE if its prepopulate ID
|
| - // and keyword both match. If the prepopulate ID _does_ match all properties
|
| - // will be replaced with those from |default_search_provider| anyway.
|
| for (IDMap::iterator i(id_to_turl.begin()); i != id_to_turl.end(); ++i) {
|
| TemplateURL* template_url = i->second;
|
| if ((template_url->safe_for_autoreplace()) &&
|
| - (!default_search_provider ||
|
| - (template_url->prepopulate_id() !=
|
| - default_search_provider->prepopulate_id()) ||
|
| - (template_url->keyword() != default_search_provider->keyword())))
|
| + (template_url != default_search_provider))
|
| actions.removed_engines.push_back(template_url);
|
| }
|
|
|
| @@ -320,12 +317,14 @@
|
| WebDataService* service,
|
| Profile* profile,
|
| TemplateURLService::TemplateURLVector* template_urls,
|
| - TemplateURL* default_search_provider,
|
| + TemplateURL** default_search_provider,
|
| 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());
|
| + DCHECK(default_search_provider);
|
| + DCHECK(*default_search_provider == NULL);
|
| DCHECK_EQ(KEYWORDS_RESULT, result.GetType());
|
| DCHECK(new_resource_keyword_version);
|
|
|
| @@ -348,6 +347,12 @@
|
| template_urls->push_back(new TemplateURL(profile, *i));
|
| }
|
|
|
| + int64 default_search_provider_id = keyword_result.default_search_provider_id;
|
| + if (default_search_provider_id) {
|
| + *default_search_provider =
|
| + GetTemplateURLByID(*template_urls, default_search_provider_id);
|
| + }
|
| +
|
| *new_resource_keyword_version = keyword_result.builtin_keyword_version;
|
| GetSearchProvidersUsingLoadedEngines(service, profile, template_urls,
|
| default_search_provider,
|
| @@ -359,11 +364,12 @@
|
| WebDataService* service,
|
| Profile* profile,
|
| TemplateURLService::TemplateURLVector* template_urls,
|
| - TemplateURL* default_search_provider,
|
| + TemplateURL** default_search_provider,
|
| int* resource_keyword_version,
|
| std::set<std::string>* removed_keyword_guids) {
|
| DCHECK(service == NULL || BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(template_urls);
|
| + DCHECK(default_search_provider);
|
| DCHECK(resource_keyword_version);
|
| PrefService* prefs = profile ? profile->GetPrefs() : NULL;
|
| size_t default_search_index;
|
| @@ -371,7 +377,7 @@
|
| TemplateURLPrepopulateData::GetPrepopulatedEngines(prefs,
|
| &default_search_index);
|
| RemoveDuplicatePrepopulateIDs(service, prepopulated_urls,
|
| - default_search_provider, template_urls,
|
| + *default_search_provider, template_urls,
|
| removed_keyword_guids);
|
|
|
| const int prepopulate_resource_keyword_version =
|
|
|