Index: chrome/browser/search_engines/template_url_service.cc |
=================================================================== |
--- chrome/browser/search_engines/template_url_service.cc (revision 132909) |
+++ chrome/browser/search_engines/template_url_service.cc (working copy) |
@@ -325,6 +325,12 @@ |
NotifyObservers(); |
} |
+void TemplateURLService::AddAndSetProfile(TemplateURL* template_url, |
+ Profile* profile) { |
+ template_url->profile_ = profile; |
+ Add(template_url); |
+} |
+ |
void TemplateURLService::AddWithOverrides(const TemplateURL* template_url, |
const string16& short_name, |
const string16& keyword, |
@@ -394,7 +400,7 @@ |
// ID, as well as forcing the TemplateURL to be treated as a search keyword. |
data.SetURL(std::string(chrome::kExtensionScheme) + "://" + |
extension->id() + "/?q={searchTerms}"); |
- Add(new TemplateURL(data)); |
+ Add(new TemplateURL(profile_, data)); |
} |
} |
@@ -455,7 +461,7 @@ |
} |
data.safe_for_autoreplace = false; |
data.last_modified = time_provider_(); |
- TemplateURL new_url(data); |
+ TemplateURL new_url(const_cast<TemplateURL*>(url)->profile(), data); |
UpdateNoNotify(url, new_url); |
NotifyObservers(); |
} |
@@ -487,7 +493,7 @@ |
const TemplateURL* TemplateURLService::FindNewDefaultSearchProvider() { |
// See if the prepopulated default still exists. |
scoped_ptr<TemplateURL> prepopulated_default( |
- TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(GetPrefs())); |
+ TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(profile_)); |
for (TemplateURLVector::iterator i = template_urls_.begin(); |
i != template_urls_.end(); ++i) { |
if ((*i)->prepopulate_id() == prepopulated_default->prepopulate_id()) |
@@ -549,7 +555,7 @@ |
std::vector<TemplateURL*> template_urls; |
const TemplateURL* default_search_provider = NULL; |
int new_resource_keyword_version = 0; |
- GetSearchProvidersUsingKeywordResult(*result, service_.get(), GetPrefs(), |
+ GetSearchProvidersUsingKeywordResult(*result, service_.get(), profile_, |
&template_urls, &default_search_provider, &new_resource_keyword_version); |
bool database_specified_a_default = (default_search_provider != NULL); |
@@ -568,7 +574,7 @@ |
// No check is required if the default search is managed. |
// |DidDefaultSearchProviderChange| must always be called because it will |
// take care of the unowned backup default search provider instance. |
- if (DidDefaultSearchProviderChange(*result, |
+ if (DidDefaultSearchProviderChange(*result, profile_, |
&backup_default_search_provider) && |
!is_default_search_managed_) { |
hijacked_default_search_provider = default_search_provider; |
@@ -597,7 +603,7 @@ |
TemplateURLData data(default_from_prefs->data()); |
data.created_by_policy = true; |
data.id = kInvalidTemplateURLID; |
- TemplateURL* managed_default = new TemplateURL(data); |
+ TemplateURL* managed_default = new TemplateURL(profile_, data); |
AddNoNotify(managed_default, true); |
default_search_provider = managed_default; |
} |
@@ -617,7 +623,7 @@ |
default_search_provider == NULL) { |
for (std::vector<TemplateURL*>::const_iterator i = template_urls.begin(); |
i != template_urls.end(); ++i) { |
- if (!(*i)->IsExtensionKeyword()) { |
+ if (!(*i)->IsExtensionKeyword() && (*i)->SupportsReplacement()) { |
default_search_provider = *i; |
break; |
} |
@@ -791,7 +797,7 @@ |
iter->sync_data().GetSpecifics().search_engine().sync_guid(); |
const TemplateURL* existing_turl = GetTemplateURLForGUID(guid); |
scoped_ptr<TemplateURL> turl(CreateTemplateURLFromTemplateURLAndSyncData( |
- existing_turl, iter->sync_data(), &new_changes)); |
+ profile_, existing_turl, iter->sync_data(), &new_changes)); |
if (!turl.get()) |
continue; |
@@ -820,7 +826,7 @@ |
// Force the local ID to kInvalidTemplateURLID so we can add it. |
TemplateURLData data(turl->data()); |
data.id = kInvalidTemplateURLID; |
- Add(new TemplateURL(data)); |
+ Add(new TemplateURL(profile_, data)); |
// Possibly set the newly added |turl| as the default search provider. |
SetDefaultSearchProviderIfNewlySynced(guid); |
@@ -891,8 +897,8 @@ |
iter != sync_data_map.end(); ++iter) { |
const TemplateURL* local_turl = GetTemplateURLForGUID(iter->first); |
scoped_ptr<TemplateURL> sync_turl( |
- CreateTemplateURLFromTemplateURLAndSyncData(local_turl, iter->second, |
- &new_changes)); |
+ CreateTemplateURLFromTemplateURLAndSyncData(profile_, local_turl, |
+ iter->second, &new_changes)); |
if (!sync_turl.get()) |
continue; |
@@ -937,7 +943,7 @@ |
// Force the local ID to kInvalidTemplateURLID so we can add it. |
TemplateURLData data(sync_turl->data()); |
data.id = kInvalidTemplateURLID; |
- Add(new TemplateURL(data)); |
+ Add(new TemplateURL(profile_, data)); |
// Possibly set the newly added |turl| as the default search provider. |
SetDefaultSearchProviderIfNewlySynced(guid); |
@@ -1024,9 +1030,12 @@ |
// static |
TemplateURL* TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData( |
+ Profile* profile, |
const TemplateURL* existing_turl, |
const SyncData& sync_data, |
SyncChangeList* change_list) { |
+ DCHECK(change_list); |
+ |
sync_pb::SearchEngineSpecifics specifics = |
sync_data.GetSpecifics().search_engine(); |
@@ -1059,7 +1068,7 @@ |
data.usage_count = existing_turl->usage_count(); |
} |
- TemplateURL* turl = new TemplateURL(data); |
+ TemplateURL* turl = new TemplateURL(profile, data); |
DCHECK(!turl->IsExtensionKeyword()); |
return turl; |
} |
@@ -1127,7 +1136,7 @@ |
data.short_name = UTF8ToUTF16(initializers[i].content); |
data.SetKeyword(UTF8ToUTF16(initializers[i].keyword)); |
data.SetURL(osd_url); |
- AddNoNotify(new TemplateURL(data), true); |
+ AddNoNotify(new TemplateURL(profile_, data), true); |
} |
} |
@@ -1344,7 +1353,7 @@ |
base::StringToInt(prepopulate_id, &value); |
data.prepopulate_id = value; |
} |
- default_provider->reset(new TemplateURL(data)); |
+ default_provider->reset(new TemplateURL(profile_, data)); |
DCHECK(!(*default_provider)->IsExtensionKeyword()); |
return true; |
} |
@@ -1567,7 +1576,7 @@ |
// Prefs does not specify, so rely on the prepopulated engines. This |
// should happen only the first time Chrome is started. |
initial_default_search_provider_.reset( |
- TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(GetPrefs())); |
+ TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(profile_)); |
is_default_search_managed_ = false; |
} |
return; |
@@ -1604,14 +1613,14 @@ |
} else if (default_search_provider_) { |
TemplateURLData data(new_default_from_prefs->data()); |
data.created_by_policy = true; |
- TemplateURL new_values(data); |
+ TemplateURL new_values(profile_, data); |
UpdateNoNotify(default_search_provider_, new_values); |
} else { |
TemplateURL* new_template = NULL; |
if (new_default_from_prefs.get()) { |
TemplateURLData data(new_default_from_prefs->data()); |
data.created_by_policy = true; |
- new_template = new TemplateURL(data); |
+ new_template = new TemplateURL(profile_, data); |
AddNoNotify(new_template, true); |
} |
SetDefaultSearchProviderNoNotify(new_template); |
@@ -1624,7 +1633,7 @@ |
if (new_default_from_prefs.get()) { |
TemplateURLData data(new_default_from_prefs->data()); |
data.created_by_policy = true; |
- new_template = new TemplateURL(data); |
+ new_template = new TemplateURL(profile_, data); |
AddNoNotify(new_template, true); |
} |
SetDefaultSearchProviderNoNotify(new_template); |
@@ -1834,7 +1843,7 @@ |
TemplateURLData data(url->data()); |
data.sync_guid = guid; |
- TemplateURL new_url(data); |
+ TemplateURL new_url(const_cast<TemplateURL*>(url)->profile(), data); |
UpdateNoNotify(url, new_url); |
} |
@@ -1888,7 +1897,8 @@ |
string16 new_keyword = UniquifyKeyword(*existing_turl); |
TemplateURLData data(existing_turl->data()); |
data.SetKeyword(new_keyword); |
- TemplateURL new_turl(data); |
+ TemplateURL new_turl(const_cast<TemplateURL*>(existing_turl)->profile(), |
+ data); |
UpdateNoNotify(existing_turl, new_turl); |
NotifyObservers(); |
} |