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

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

Issue 10033017: More misc. cleanups to minimize future refactoring diffs. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 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/template_url_service.cc
===================================================================
--- chrome/browser/search_engines/template_url_service.cc (revision 131375)
+++ chrome/browser/search_engines/template_url_service.cc (working copy)
@@ -254,9 +254,8 @@
// be replaced. We do this to ensure that if the user assigns a different
// keyword to a generated TemplateURL, we won't regenerate another keyword for
// the same host.
- if (url.is_valid() && !url.host().empty())
- return CanReplaceKeywordForHost(url.host(), template_url_to_replace);
- return true;
+ return !url.is_valid() || url.host().empty() ||
+ CanReplaceKeywordForHost(url.host(), template_url_to_replace);
}
void TemplateURLService::FindMatchingKeywords(
@@ -295,23 +294,36 @@
const string16& keyword) const {
KeywordToTemplateMap::const_iterator elem(
keyword_to_template_map_.find(keyword));
- return (elem == keyword_to_template_map_.end()) ? NULL : elem->second;
+ if (elem != keyword_to_template_map_.end())
+ return elem->second;
+ return (initial_default_search_provider_.get() &&
+ (initial_default_search_provider_->keyword() == keyword)) ?
+ initial_default_search_provider_.get() : NULL;
}
const TemplateURL* TemplateURLService::GetTemplateURLForGUID(
const std::string& sync_guid) const {
GUIDToTemplateMap::const_iterator elem(
guid_to_template_map_.find(sync_guid));
- return (elem == guid_to_template_map_.end()) ? NULL : elem->second;
+ if (elem != guid_to_template_map_.end())
+ return elem->second;
+ return (initial_default_search_provider_.get() &&
+ (initial_default_search_provider_->sync_guid() == sync_guid)) ?
+ initial_default_search_provider_.get() : NULL;
}
const TemplateURL* TemplateURLService::GetTemplateURLForHost(
const std::string& host) const {
- return provider_map_.GetTemplateURLForHost(host);
+ const TemplateURL* t_url = provider_map_.GetTemplateURLForHost(host);
+ if (t_url)
+ return t_url;
+ return (initial_default_search_provider_.get() &&
+ (GenerateSearchURL(initial_default_search_provider_.get()).host() ==
+ host)) ? initial_default_search_provider_.get() : NULL;
}
void TemplateURLService::Add(TemplateURL* template_url) {
- AddNoNotify(template_url);
+ AddNoNotify(template_url, true);
NotifyObservers();
}
@@ -375,33 +387,30 @@
return;
}
- const TemplateURL* existing_url = GetTemplateURLForExtension(extension);
- string16 keyword = UTF8ToUTF16(extension->omnibox_keyword());
-
- TemplateURLData data;
- data.short_name = UTF8ToUTF16(extension->name());
- data.SetKeyword(UTF8ToUTF16(extension->omnibox_keyword()));
- // This URL is not actually used for navigation. It holds the extension's
- // ID, as well as forcing the TemplateURL to be treated as a search keyword.
- data.SetURL(std::string(chrome::kExtensionScheme) + "://" + extension->id() +
- "/?q={searchTerms}");
- scoped_ptr<TemplateURL> template_url(new TemplateURL(data));
-
- if (existing_url) {
- // TODO(mpcomplete): only replace if the user hasn't changed the keyword.
- // (We don't have UI for that yet).
- UpdateNoNotify(existing_url, *template_url);
- } else {
- AddNoNotify(template_url.release());
+ if (!GetTemplateURLForExtension(extension)) {
+ TemplateURLData data;
+ data.short_name = UTF8ToUTF16(extension->name());
+ data.SetKeyword(UTF8ToUTF16(extension->omnibox_keyword()));
+ // This URL is not actually used for navigation. It holds the extension's
+ // 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));
}
- NotifyObservers();
}
void TemplateURLService::UnregisterExtensionKeyword(
const Extension* extension) {
- const TemplateURL* url = GetTemplateURLForExtension(extension);
- if (url)
- Remove(url);
+ if (loaded_) {
+ const TemplateURL* url = GetTemplateURLForExtension(extension);
+ if (url)
+ Remove(url);
+ } else {
+ PendingExtensionIDs::iterator i = std::find(pending_extension_ids_.begin(),
+ pending_extension_ids_.end(), extension->id());
+ if (i != pending_extension_ids_.end())
+ pending_extension_ids_.erase(i);
+ }
}
const TemplateURL* TemplateURLService::GetTemplateURLForExtension(
@@ -416,7 +425,8 @@
return NULL;
}
-std::vector<const TemplateURL*> TemplateURLService::GetTemplateURLs() const {
+TemplateURLService::TemplateURLVector
+ TemplateURLService::GetTemplateURLs() const {
return template_urls_;
}
@@ -424,8 +434,11 @@
DCHECK(url && std::find(template_urls_.begin(), template_urls_.end(), url) !=
template_urls_.end());
++const_cast<TemplateURL*>(url)->data_.usage_count;
- if (service_.get())
- service_->UpdateKeyword(*url);
+ // Extension keywords are not persisted.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those should
+ // be persisted to disk and synced.
+ if (service_.get() && !url->IsExtensionKeyword())
+ service_.get()->UpdateKeyword(*url);
}
void TemplateURLService::ResetTemplateURL(const TemplateURL* url,
@@ -453,10 +466,10 @@
}
void TemplateURLService::SetDefaultSearchProvider(const TemplateURL* url) {
- if (is_default_search_managed_) {
- NOTREACHED();
- return;
- }
+ DCHECK(!is_default_search_managed_);
+ // Extension keywords cannot be made default, as they are inherently async.
+ DCHECK(!url || !url->IsExtensionKeyword());
+
// Always persist the setting in the database, that way if the backup
// signature has changed out from under us it gets reset correctly.
SetDefaultSearchProviderNoNotify(url);
@@ -472,7 +485,7 @@
}
const TemplateURL* TemplateURLService::FindNewDefaultSearchProvider() {
- // See if the prepoluated default still exists.
+ // See if the prepopulated default still exists.
scoped_ptr<TemplateURL> prepopulated_default(
TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(GetPrefs()));
for (TemplateURLVector::iterator i = template_urls_.begin();
@@ -480,8 +493,13 @@
if ((*i)->prepopulate_id() == prepopulated_default->prepopulate_id())
return *i;
}
- // If not, use the first of the templates.
- return template_urls_.empty() ? NULL : template_urls_[0];
+ // If not, use the first non-extension keyword of the templates.
+ for (TemplateURLVector::const_iterator i(template_urls_.begin());
+ i != template_urls_.end(); ++i) {
+ if (!(*i)->IsExtensionKeyword())
+ return *i;
+ }
+ return NULL;
}
void TemplateURLService::AddObserver(TemplateURLServiceObserver* observer) {
@@ -531,12 +549,8 @@
std::vector<TemplateURL*> template_urls;
const TemplateURL* default_search_provider = NULL;
int new_resource_keyword_version = 0;
- GetSearchProvidersUsingKeywordResult(*result,
- service_.get(),
- GetPrefs(),
- &template_urls,
- &default_search_provider,
- &new_resource_keyword_version);
+ GetSearchProvidersUsingKeywordResult(*result, service_.get(), GetPrefs(),
+ &template_urls, &default_search_provider, &new_resource_keyword_version);
bool database_specified_a_default = (default_search_provider != NULL);
@@ -584,12 +598,14 @@
data.created_by_policy = true;
data.id = kInvalidTemplateURLID;
TemplateURL* managed_default = new TemplateURL(data);
- AddNoNotify(managed_default);
+ AddNoNotify(managed_default, true);
default_search_provider = managed_default;
}
}
// Note that this saves the default search provider to prefs.
- SetDefaultSearchProviderNoNotify(default_search_provider);
+ if (!default_search_provider ||
+ !default_search_provider->IsExtensionKeyword())
+ SetDefaultSearchProviderNoNotify(default_search_provider);
} else {
// If we had a managed default, replace it with the synced default if
// applicable, or the first provider of the list.
@@ -598,9 +614,14 @@
default_search_provider = synced_default;
pending_synced_default_search_ = false;
} else if (database_specified_a_default &&
- default_search_provider == NULL &&
- !template_urls.empty()) {
- default_search_provider = template_urls[0];
+ default_search_provider == NULL) {
+ for (std::vector<TemplateURL*>::const_iterator i = template_urls.begin();
+ i != template_urls.end(); ++i) {
+ if (!(*i)->IsExtensionKeyword()) {
+ default_search_provider = *i;
+ break;
+ }
+ }
}
// If the default search provider existed previously, then just
@@ -740,6 +761,8 @@
for (TemplateURLVector::const_iterator iter = template_urls_.begin();
iter != template_urls_.end(); ++iter) {
// We don't sync extension keywords.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those
+ // should be persisted to disk and synced.
if ((*iter)->IsExtensionKeyword())
continue;
// We don't sync keywords managed by policy.
@@ -904,11 +927,9 @@
const TemplateURL* dupe_turl = FindDuplicateOfSyncTemplateURL(*sync_turl);
if (dupe_turl) {
// Merge duplicates and remove the processed local TURL from the map.
- TemplateURL* modifiable_dupe_turl =
- const_cast<TemplateURL*>(dupe_turl);
std::string old_guid = dupe_turl->sync_guid();
MergeSyncAndLocalURLDuplicates(sync_turl.release(),
- modifiable_dupe_turl,
+ const_cast<TemplateURL*>(dupe_turl),
&new_changes);
local_data_map.erase(old_guid);
} else {
@@ -963,6 +984,8 @@
return; // These are changes originating from us. Ignore.
// Avoid syncing Extension keywords.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those should
+ // be persisted to disk and synced.
if (turl->IsExtensionKeyword())
return;
@@ -1032,17 +1055,19 @@
data.created_by_policy = existing_turl->created_by_policy();
data.usage_count = existing_turl->usage_count();
}
- return new TemplateURL(data);
+
+ TemplateURL* turl = new TemplateURL(data);
+ DCHECK(!turl->IsExtensionKeyword());
+ return turl;
}
// static
SyncDataMap TemplateURLService::CreateGUIDToSyncDataMap(
const SyncDataList& sync_data) {
SyncDataMap data_map;
- SyncDataList::const_iterator iter;
- for (iter = sync_data.begin(); iter != sync_data.end(); ++iter) {
- data_map[iter->GetSpecifics().search_engine().sync_guid()] = *iter;
- }
+ for (SyncDataList::const_iterator i(sync_data.begin()); i != sync_data.end();
+ ++i)
+ data_map[i->GetSpecifics().search_engine().sync_guid()] = *i;
return data_map;
}
@@ -1097,7 +1122,7 @@
data.short_name = UTF8ToUTF16(initializers[i].content);
data.SetKeyword(UTF8ToUTF16(initializers[i].keyword));
data.SetURL(osd_url);
- AddNoNotify(new TemplateURL(data));
+ AddNoNotify(new TemplateURL(data), true);
}
}
@@ -1107,7 +1132,7 @@
// Request a server check for the correct Google URL if Google is the
// default search engine, not in headless mode and not in Chrome Frame.
if (initial_default_search_provider_.get() &&
- initial_default_search_provider_->url_ref().HasGoogleBaseURLs()) {
+ initial_default_search_provider_->url_ref().HasGoogleBaseURLs()) {
scoped_ptr<base::Environment> env(base::Environment::Create());
if (!env->HasVar(env_vars::kHeadless) &&
!CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeFrame))
@@ -1118,6 +1143,14 @@
void TemplateURLService::RemoveFromMaps(const TemplateURL* template_url) {
if (!template_url->keyword().empty())
keyword_to_template_map_.erase(template_url->keyword());
+
+ // If the keyword we're removing is from an extension, we're now done, since
+ // it won't be synced or stored in the provider map.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those should
+ // be synced.
+ if (template_url->IsExtensionKeyword())
+ return;
+
if (!template_url->sync_guid().empty())
guid_to_template_map_.erase(template_url->sync_guid());
if (loaded_)
@@ -1141,6 +1174,15 @@
void TemplateURLService::AddToMaps(const TemplateURL* template_url) {
if (!template_url->keyword().empty())
keyword_to_template_map_[template_url->keyword()] = template_url;
+
+ // Extension keywords are not synced, so they don't go into the GUID map,
+ // and do not use host-based search URLs, so they don't go into the provider
+ // map, so at this point we're done.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those should
+ // be persisted to disk and synced.
+ if (template_url->IsExtensionKeyword())
+ return;
+
if (!template_url->sync_guid().empty())
guid_to_template_map_[template_url->sync_guid()] = template_url;
if (loaded_) {
@@ -1156,21 +1198,18 @@
// First, add the items that already have id's, so that the next_id_
// gets properly set.
for (std::vector<TemplateURL*>::const_iterator i = urls.begin();
- i != urls.end();
- ++i) {
+ i != urls.end(); ++i) {
if ((*i)->id() != kInvalidTemplateURLID) {
next_id_ = std::max(next_id_, (*i)->id());
- AddToMaps(*i);
- template_urls_.push_back(*i);
+ AddNoNotify(*i, false);
Peter Kasting 2012/04/10 01:24:33 I changed this call because in the future I need t
}
}
// Next add the new items that don't have id's.
for (std::vector<TemplateURL*>::const_iterator i = urls.begin();
- i != urls.end();
- ++i) {
+ i != urls.end(); ++i) {
if ((*i)->id() == kInvalidTemplateURLID)
- AddNoNotify(*i);
+ AddNoNotify(*i, true);
}
}
@@ -1215,6 +1254,7 @@
std::string id_string;
std::string prepopulate_id;
if (t_url) {
+ DCHECK(!t_url->IsExtensionKeyword());
enabled = true;
search_url = t_url->url();
suggest_url = t_url->suggestions_url();
@@ -1298,28 +1338,26 @@
data.prepopulate_id = value;
}
default_provider->reset(new TemplateURL(data));
+ DCHECK(!(*default_provider)->IsExtensionKeyword());
return true;
}
bool TemplateURLService::CanReplaceKeywordForHost(
const std::string& host,
const TemplateURL** to_replace) {
+ DCHECK(to_replace);
+ DCHECK(!*to_replace);
const TemplateURLSet* urls = provider_map_.GetURLsForHost(host);
- if (urls) {
- for (TemplateURLSet::const_iterator i = urls->begin();
- i != urls->end(); ++i) {
- const TemplateURL* url = *i;
- if (CanReplace(url)) {
- if (to_replace)
- *to_replace = url;
- return true;
- }
+ if (!urls)
+ return true;
+ for (TemplateURLSet::const_iterator i(urls->begin()); i != urls->end(); ++i) {
+ if (CanReplace(*i)) {
+ if (to_replace)
+ *to_replace = *i;
+ return true;
}
}
-
- if (to_replace)
- *to_replace = NULL;
- return !urls;
+ return false;
}
bool TemplateURLService::CanReplace(const TemplateURL* t_url) {
@@ -1334,8 +1372,14 @@
DCHECK(std::find(template_urls_.begin(), template_urls_.end(),
existing_turl) != template_urls_.end());
- if (!existing_turl->keyword().empty())
- keyword_to_template_map_.erase(existing_turl->keyword());
+ // TODO(mpcomplete): If we allow editing extension keywords, then those should
+ // be persisted to disk and synced. In this case this DCHECK should be
+ // removed.
+ DCHECK(!existing_turl->IsExtensionKeyword());
+
+ string16 old_keyword(existing_turl->keyword());
+ if (!old_keyword.empty())
+ keyword_to_template_map_.erase(old_keyword);
if (!existing_turl->sync_guid().empty())
guid_to_template_map_.erase(existing_turl->sync_guid());
@@ -1347,8 +1391,9 @@
UIThreadSearchTermsData search_terms_data;
provider_map_.Add(existing_turl, search_terms_data);
- if (!existing_turl->keyword().empty())
- keyword_to_template_map_[existing_turl->keyword()] = existing_turl;
+ const string16& keyword = existing_turl->keyword();
+ if (!keyword.empty())
+ keyword_to_template_map_[keyword] = existing_turl;
if (!existing_turl->sync_guid().empty())
guid_to_template_map_[existing_turl->sync_guid()] = existing_turl;
@@ -1414,12 +1459,10 @@
AddTabToSearchVisit(**i);
}
- QueryTerms::iterator terms_iterator =
- query_terms.find(search_ref.GetSearchTermKey());
- if (terms_iterator != query_terms.end() &&
- !terms_iterator->second.empty()) {
+ QueryTerms::iterator j(query_terms.find(search_ref.GetSearchTermKey()));
+ if (j != query_terms.end() && !j->second.empty()) {
SetKeywordSearchTermsForURL(*i, row.url(),
- search_ref.SearchTermToString16(terms_iterator->second));
+ search_ref.SearchTermToString16(j->second));
}
}
}
@@ -1487,15 +1530,18 @@
void TemplateURLService::GoogleBaseURLChanged() {
bool something_changed = false;
- for (size_t i = 0; i < template_urls_.size(); ++i) {
- const TemplateURL* t_url = template_urls_[i];
+ for (TemplateURLVector::iterator i(template_urls_.begin());
+ i != template_urls_.end(); ++i) {
+ TemplateURL* t_url = const_cast<TemplateURL*>(*i);
if (t_url->url_ref().HasGoogleBaseURLs() ||
t_url->suggestions_url_ref().HasGoogleBaseURLs()) {
+ something_changed = true;
+ string16 original_keyword(t_url->keyword());
+ t_url->InvalidateCachedValues();
+ const string16& new_keyword(t_url->keyword());
RemoveFromKeywordMapByPointer(t_url);
- t_url->InvalidateCachedValues();
- if (!t_url->keyword().empty())
- keyword_to_template_map_[t_url->keyword()] = t_url;
- something_changed = true;
+ if (!new_keyword.empty())
+ keyword_to_template_map_[new_keyword] = t_url;
}
}
@@ -1555,14 +1601,12 @@
TemplateURL new_values(data);
UpdateNoNotify(default_search_provider_, new_values);
} else {
- // AddNoNotify will take ownership of new_template, so it's safe to
- // release.
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);
- AddNoNotify(new_template);
+ AddNoNotify(new_template, true);
}
SetDefaultSearchProviderNoNotify(new_template);
}
@@ -1570,14 +1614,12 @@
// The default used to be unmanaged and is now managed. Add the new
// managed default to the list of URLs and set it as default.
is_default_search_managed_ = new_is_default_managed;
- // AddNoNotify will take ownership of new_template, so it's safe to
- // release.
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);
- AddNoNotify(new_template);
+ AddNoNotify(new_template, true);
}
SetDefaultSearchProviderNoNotify(new_template);
} else {
@@ -1606,8 +1648,13 @@
void TemplateURLService::SetDefaultSearchProviderNoNotify(
const TemplateURL* url) {
- DCHECK(!url || std::find(template_urls_.begin(), template_urls_.end(), url) !=
- template_urls_.end());
+ if (url) {
+ DCHECK(std::find(template_urls_.begin(), template_urls_.end(), url) !=
+ template_urls_.end());
+ // Extension keywords cannot be made default, as they're inherently async.
+ DCHECK(!url->IsExtensionKeyword());
+ }
+
default_search_provider_ = url;
if (url) {
@@ -1650,21 +1697,32 @@
ProcessTemplateURLChange(url, SyncChange::ACTION_UPDATE);
}
-void TemplateURLService::AddNoNotify(TemplateURL* template_url) {
+void TemplateURLService::AddNoNotify(TemplateURL* template_url,
+ bool newly_adding) {
DCHECK(template_url);
- DCHECK_EQ(kInvalidTemplateURLID, template_url->id());
- DCHECK(std::find(template_urls_.begin(), template_urls_.end(),
- template_url) == template_urls_.end());
- template_url->data_.id = ++next_id_;
+
+ if (newly_adding) {
+ DCHECK_EQ(kInvalidTemplateURLID, template_url->id());
+ DCHECK(std::find(template_urls_.begin(), template_urls_.end(),
+ template_url) == template_urls_.end());
+ template_url->data_.id = ++next_id_;
+ }
+
template_urls_.push_back(template_url);
AddToMaps(template_url);
- if (service_.get())
- service_->AddKeyword(*template_url);
+ if (newly_adding) {
+ // Don't persist extension keywords to disk. They'll get re-added on each
+ // launch as the extensions are loaded.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those
+ // should be persisted to disk and synced.
+ if (service_.get() && !template_url->IsExtensionKeyword())
+ service_->AddKeyword(*template_url);
- // Inform sync of the addition. Note that this will assign a GUID to
- // template_url and add it to the guid_to_template_map_.
- ProcessTemplateURLChange(template_url, SyncChange::ACTION_ADD);
+ // Inform sync of the addition. Note that this will assign a GUID to
+ // template_url and add it to the guid_to_template_map_.
+ ProcessTemplateURLChange(template_url, SyncChange::ACTION_ADD);
+ }
}
void TemplateURLService::RemoveNoNotify(const TemplateURL* template_url) {
@@ -1684,7 +1742,10 @@
// Remove it from the vector containing all TemplateURLs.
template_urls_.erase(i);
- if (service_.get())
+ // Extension keywords are not persisted.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those should
+ // be persisted to disk and synced.
+ if (service_.get() && !template_url->IsExtensionKeyword())
service_->RemoveKeyword(template_url->id());
// Inform sync of the deletion.
@@ -1726,7 +1787,7 @@
DCHECK(template_urls);
DCHECK(default_search_provider);
for (std::vector<TemplateURL*>::iterator i = template_urls->begin();
- i != template_urls->end(); ) {
+ i != template_urls->end(); ) {
TemplateURL* template_url = *i;
if (template_url->created_by_policy()) {
if (template_url == *default_search_provider &&
@@ -1749,7 +1810,10 @@
*default_search_provider = NULL;
i = template_urls->erase(i);
- if (service_.get())
+ // Extension keywords are not persisted.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those
+ // should be persisted to disk and synced.
+ if (service_.get() && !template_url->IsExtensionKeyword())
service_->RemoveKeyword(template_url->id());
delete template_url;
} else {
@@ -1775,16 +1839,17 @@
// First, try to return the generated keyword for the TemplateURL.
GURL gurl(turl.url());
- string16 keyword_candidate = GenerateKeyword(gurl, true);
- if (!GetTemplateURLForKeyword(keyword_candidate) &&
- !keyword_candidate.empty()) {
- return keyword_candidate;
+ if (gurl.is_valid()) {
+ string16 keyword_candidate = GenerateKeyword(gurl, true);
+ if (!GetTemplateURLForKeyword(keyword_candidate) &&
+ !keyword_candidate.empty())
+ return keyword_candidate;
}
// We try to uniquify the keyword by appending a special character to the end.
// This is a best-effort approach where we try to preserve the original
// keyword and let the user do what they will after our attempt.
- keyword_candidate = turl.keyword();
+ string16 keyword_candidate(turl.keyword());
do {
keyword_candidate.append(ASCIIToUTF16("_"));
} while (GetTemplateURLForKeyword(keyword_candidate));
@@ -1828,14 +1893,8 @@
const TemplateURL& sync_turl) {
const TemplateURL* existing_turl =
GetTemplateURLForKeyword(sync_turl.keyword());
- if (!existing_turl)
- return NULL;
-
- if (!existing_turl->url().empty() &&
- existing_turl->url() == sync_turl.url()) {
- return existing_turl;
- }
- return NULL;
+ return existing_turl && !existing_turl->url().empty() &&
+ (existing_turl->url() == sync_turl.url()) ? existing_turl : NULL;
}
void TemplateURLService::MergeSyncAndLocalURLDuplicates(
@@ -1909,7 +1968,11 @@
i != template_urls->end(); ++i) {
TemplateURL* template_url = *i;
DCHECK(template_url);
- if (template_url->sync_guid().empty()) {
+ // Extension keywords are never synced.
+ // TODO(mpcomplete): If we allow editing extension keywords, then those
+ // should be persisted to disk and synced.
+ if (template_url->sync_guid().empty() &&
+ !template_url->IsExtensionKeyword()) {
template_url->data_.sync_guid = guid::GenerateGUID();
if (service_.get())
service_->UpdateKeyword(*template_url);

Powered by Google App Engine
This is Rietveld 408576698