Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/template_url_service.h" | 5 #include "chrome/browser/search_engines/template_url_service.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 420 | 420 |
| 421 // Remove leading "www.". | 421 // Remove leading "www.". |
| 422 result = net::StripWWW(result); | 422 result = net::StripWWW(result); |
| 423 | 423 |
| 424 // Remove trailing "/". | 424 // Remove trailing "/". |
| 425 return (result.length() > 0 && result[result.length() - 1] == '/') ? | 425 return (result.length() > 0 && result[result.length() - 1] == '/') ? |
| 426 result.substr(0, result.length() - 1) : result; | 426 result.substr(0, result.length() - 1) : result; |
| 427 } | 427 } |
| 428 | 428 |
| 429 // static | 429 // static |
| 430 GURL TemplateURLService::GenerateSearchURL(TemplateURL* t_url) { | 430 GURL TemplateURLService::GenerateSearchURL( |
| 431 DCHECK(t_url); | |
| 432 UIThreadSearchTermsData search_terms_data(t_url->profile()); | |
| 433 return GenerateSearchURLUsingTermsData(t_url, search_terms_data); | |
| 434 } | |
| 435 | |
| 436 // static | |
| 437 GURL TemplateURLService::GenerateSearchURLUsingTermsData( | |
| 438 const TemplateURL* t_url, | 431 const TemplateURL* t_url, |
| 439 const SearchTermsData& search_terms_data) { | 432 const SearchTermsData& search_terms_data) { |
| 440 DCHECK(t_url); | 433 DCHECK(t_url); |
| 441 | 434 |
| 442 const TemplateURLRef& search_ref = t_url->url_ref(); | 435 const TemplateURLRef& search_ref = t_url->url_ref(); |
| 443 if (!search_ref.IsValid(search_terms_data)) | 436 if (!search_ref.IsValid(search_terms_data)) |
| 444 return GURL(); | 437 return GURL(); |
| 445 | 438 |
| 446 if (!search_ref.SupportsReplacement(search_terms_data)) | 439 if (!search_ref.SupportsReplacement(search_terms_data)) |
| 447 return GURL(t_url->url()); | 440 return GURL(t_url->url()); |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 612 } | 605 } |
| 613 | 606 |
| 614 TemplateURL* TemplateURLService::GetTemplateURLForHost( | 607 TemplateURL* TemplateURLService::GetTemplateURLForHost( |
| 615 const std::string& host) { | 608 const std::string& host) { |
| 616 if (loaded_) { | 609 if (loaded_) { |
| 617 TemplateURL* t_url = provider_map_->GetTemplateURLForHost(host); | 610 TemplateURL* t_url = provider_map_->GetTemplateURLForHost(host); |
| 618 if (t_url) | 611 if (t_url) |
| 619 return t_url; | 612 return t_url; |
| 620 } | 613 } |
| 621 return (!loaded_ && | 614 return (!loaded_ && |
| 622 initial_default_search_provider_.get() && | 615 initial_default_search_provider_.get() && |
| 623 (GenerateSearchURL(initial_default_search_provider_.get()).host() == | 616 (GenerateSearchURL(initial_default_search_provider_.get(), |
| 624 host)) ? initial_default_search_provider_.get() : NULL; | 617 search_terms_data()).host() == |
| 618 host)) ? initial_default_search_provider_.get() : NULL; | |
|
Peter Kasting
2014/06/17 21:07:54
Nit: This line has gotten unwieldy. How about thi
hashimoto
2014/06/17 21:58:02
Makes sense.
Done.
| |
| 625 } | 619 } |
| 626 | 620 |
| 627 bool TemplateURLService::Add(TemplateURL* template_url) { | 621 bool TemplateURLService::Add(TemplateURL* template_url) { |
| 628 WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get()); | 622 WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get()); |
| 629 if (!AddNoNotify(template_url, true)) | 623 if (!AddNoNotify(template_url, true)) |
| 630 return false; | 624 return false; |
| 631 NotifyObservers(); | 625 NotifyObservers(); |
| 632 return true; | 626 return true; |
| 633 } | 627 } |
| 634 | 628 |
| 635 void TemplateURLService::AddAndSetProfile(TemplateURL* template_url, | |
| 636 Profile* profile) { | |
| 637 template_url->profile_ = profile; | |
| 638 Add(template_url); | |
| 639 } | |
| 640 | |
| 641 void TemplateURLService::AddWithOverrides(TemplateURL* template_url, | 629 void TemplateURLService::AddWithOverrides(TemplateURL* template_url, |
| 642 const base::string16& short_name, | 630 const base::string16& short_name, |
| 643 const base::string16& keyword, | 631 const base::string16& keyword, |
| 644 const std::string& url) { | 632 const std::string& url) { |
| 645 DCHECK(!keyword.empty()); | 633 DCHECK(!keyword.empty()); |
| 646 DCHECK(!url.empty()); | 634 DCHECK(!url.empty()); |
| 647 template_url->data_.short_name = short_name; | 635 template_url->data_.short_name = short_name; |
| 648 template_url->data_.SetKeyword(keyword); | 636 template_url->data_.SetKeyword(keyword); |
| 649 template_url->SetURL(url); | 637 template_url->SetURL(url); |
| 650 Add(template_url); | 638 Add(template_url); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 709 base::Time created_before) { | 697 base::Time created_before) { |
| 710 GURL o(origin.GetOrigin()); | 698 GURL o(origin.GetOrigin()); |
| 711 bool should_notify = false; | 699 bool should_notify = false; |
| 712 WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get()); | 700 WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get()); |
| 713 for (size_t i = 0; i < template_urls_.size();) { | 701 for (size_t i = 0; i < template_urls_.size();) { |
| 714 if (template_urls_[i]->date_created() >= created_after && | 702 if (template_urls_[i]->date_created() >= created_after && |
| 715 (created_before.is_null() || | 703 (created_before.is_null() || |
| 716 template_urls_[i]->date_created() < created_before) && | 704 template_urls_[i]->date_created() < created_before) && |
| 717 CanReplace(template_urls_[i]) && | 705 CanReplace(template_urls_[i]) && |
| 718 (o.is_empty() || | 706 (o.is_empty() || |
| 719 GenerateSearchURL(template_urls_[i]).GetOrigin() == o)) { | 707 GenerateSearchURL(template_urls_[i], |
| 708 search_terms_data()).GetOrigin() == o)) { | |
| 720 RemoveNoNotify(template_urls_[i]); | 709 RemoveNoNotify(template_urls_[i]); |
| 721 should_notify = true; | 710 should_notify = true; |
| 722 } else { | 711 } else { |
| 723 ++i; | 712 ++i; |
| 724 } | 713 } |
| 725 } | 714 } |
| 726 if (should_notify) | 715 if (should_notify) |
| 727 NotifyObservers(); | 716 NotifyObservers(); |
| 728 } | 717 } |
| 729 | 718 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 851 | 840 |
| 852 // Remove items. | 841 // Remove items. |
| 853 for (std::vector<TemplateURL*>::iterator i = actions.removed_engines.begin(); | 842 for (std::vector<TemplateURL*>::iterator i = actions.removed_engines.begin(); |
| 854 i < actions.removed_engines.end(); ++i) | 843 i < actions.removed_engines.end(); ++i) |
| 855 RemoveNoNotify(*i); | 844 RemoveNoNotify(*i); |
| 856 | 845 |
| 857 // Edit items. | 846 // Edit items. |
| 858 for (EditedEngines::iterator i(actions.edited_engines.begin()); | 847 for (EditedEngines::iterator i(actions.edited_engines.begin()); |
| 859 i < actions.edited_engines.end(); ++i) { | 848 i < actions.edited_engines.end(); ++i) { |
| 860 UIThreadSearchTermsData search_terms_data(profile()); | 849 UIThreadSearchTermsData search_terms_data(profile()); |
| 861 TemplateURL new_values(profile(), i->second); | 850 TemplateURL new_values(i->second); |
| 862 UpdateNoNotify(i->first, new_values, search_terms_data); | 851 UpdateNoNotify(i->first, new_values, search_terms_data); |
| 863 } | 852 } |
| 864 | 853 |
| 865 // Add items. | 854 // Add items. |
| 866 for (std::vector<TemplateURLData>::const_iterator i = | 855 for (std::vector<TemplateURLData>::const_iterator i = |
| 867 actions.added_engines.begin(); | 856 actions.added_engines.begin(); |
| 868 i < actions.added_engines.end(); | 857 i < actions.added_engines.end(); |
| 869 ++i) { | 858 ++i) { |
| 870 AddNoNotify(new TemplateURL(profile_, *i), true); | 859 AddNoNotify(new TemplateURL(*i), true); |
| 871 } | 860 } |
| 872 | 861 |
| 873 base::AutoReset<DefaultSearchChangeOrigin> change_origin( | 862 base::AutoReset<DefaultSearchChangeOrigin> change_origin( |
| 874 &dsp_change_origin_, DSP_CHANGE_PROFILE_RESET); | 863 &dsp_change_origin_, DSP_CHANGE_PROFILE_RESET); |
| 875 | 864 |
| 876 default_search_manager_.ClearUserSelectedDefaultSearchEngine(); | 865 default_search_manager_.ClearUserSelectedDefaultSearchEngine(); |
| 877 | 866 |
| 878 if (!default_search_provider_) { | 867 if (!default_search_provider_) { |
| 879 // If the default search provider came from a user pref we would have been | 868 // If the default search provider came from a user pref we would have been |
| 880 // notified of the new (fallback-provided) value in | 869 // notified of the new (fallback-provided) value in |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1097 // not ideal, but it prevents a far more severe bug where the default is | 1086 // not ideal, but it prevents a far more severe bug where the default is |
| 1098 // unexpectedly swapped to something else. The user can safely delete | 1087 // unexpectedly swapped to something else. The user can safely delete |
| 1099 // the extra entry again later, if they choose. Most users who do not | 1088 // the extra entry again later, if they choose. Most users who do not |
| 1100 // look at the search engines UI will not notice this. | 1089 // look at the search engines UI will not notice this. |
| 1101 // Note that we append a special character to the end of the keyword in | 1090 // Note that we append a special character to the end of the keyword in |
| 1102 // an attempt to avoid a ping-poinging situation where receiving clients | 1091 // an attempt to avoid a ping-poinging situation where receiving clients |
| 1103 // may try to continually delete the resurrected entry. | 1092 // may try to continually delete the resurrected entry. |
| 1104 base::string16 updated_keyword = UniquifyKeyword(*existing_turl, true); | 1093 base::string16 updated_keyword = UniquifyKeyword(*existing_turl, true); |
| 1105 TemplateURLData data(existing_turl->data()); | 1094 TemplateURLData data(existing_turl->data()); |
| 1106 data.SetKeyword(updated_keyword); | 1095 data.SetKeyword(updated_keyword); |
| 1107 TemplateURL new_turl(existing_turl->profile(), data); | 1096 TemplateURL new_turl(data); |
| 1108 UIThreadSearchTermsData search_terms_data(existing_turl->profile()); | 1097 if (UpdateNoNotify(existing_turl, new_turl, search_terms_data())) |
| 1109 if (UpdateNoNotify(existing_turl, new_turl, search_terms_data)) | |
| 1110 NotifyObservers(); | 1098 NotifyObservers(); |
| 1111 | 1099 |
| 1112 syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(new_turl); | 1100 syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(new_turl); |
| 1113 new_changes.push_back(syncer::SyncChange(FROM_HERE, | 1101 new_changes.push_back(syncer::SyncChange(FROM_HERE, |
| 1114 syncer::SyncChange::ACTION_ADD, | 1102 syncer::SyncChange::ACTION_ADD, |
| 1115 sync_data)); | 1103 sync_data)); |
| 1116 // Ignore the delete attempt. This means we never end up resetting the | 1104 // Ignore the delete attempt. This means we never end up resetting the |
| 1117 // default search provider due to an ACTION_DELETE from sync. | 1105 // default search provider due to an ACTION_DELETE from sync. |
| 1118 continue; | 1106 continue; |
| 1119 } | 1107 } |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 1130 if (existing_keyword_turl) { | 1118 if (existing_keyword_turl) { |
| 1131 // Resolve any conflicts so we can safely add the new entry. | 1119 // Resolve any conflicts so we can safely add the new entry. |
| 1132 ResolveSyncKeywordConflict(turl.get(), existing_keyword_turl, | 1120 ResolveSyncKeywordConflict(turl.get(), existing_keyword_turl, |
| 1133 &new_changes); | 1121 &new_changes); |
| 1134 } | 1122 } |
| 1135 base::AutoReset<DefaultSearchChangeOrigin> change_origin( | 1123 base::AutoReset<DefaultSearchChangeOrigin> change_origin( |
| 1136 &dsp_change_origin_, DSP_CHANGE_SYNC_ADD); | 1124 &dsp_change_origin_, DSP_CHANGE_SYNC_ADD); |
| 1137 // Force the local ID to kInvalidTemplateURLID so we can add it. | 1125 // Force the local ID to kInvalidTemplateURLID so we can add it. |
| 1138 TemplateURLData data(turl->data()); | 1126 TemplateURLData data(turl->data()); |
| 1139 data.id = kInvalidTemplateURLID; | 1127 data.id = kInvalidTemplateURLID; |
| 1140 TemplateURL* added = new TemplateURL(profile_, data); | 1128 TemplateURL* added = new TemplateURL(data); |
| 1141 if (Add(added)) | 1129 if (Add(added)) |
| 1142 MaybeUpdateDSEAfterSync(added); | 1130 MaybeUpdateDSEAfterSync(added); |
| 1143 } else if (iter->change_type() == syncer::SyncChange::ACTION_UPDATE) { | 1131 } else if (iter->change_type() == syncer::SyncChange::ACTION_UPDATE) { |
| 1144 if (!existing_turl) { | 1132 if (!existing_turl) { |
| 1145 error = sync_error_factory_->CreateAndUploadError( | 1133 error = sync_error_factory_->CreateAndUploadError( |
| 1146 FROM_HERE, | 1134 FROM_HERE, |
| 1147 "ProcessSyncChanges failed on ChangeType ACTION_UPDATE"); | 1135 "ProcessSyncChanges failed on ChangeType ACTION_UPDATE"); |
| 1148 continue; | 1136 continue; |
| 1149 } | 1137 } |
| 1150 if (existing_keyword_turl && (existing_keyword_turl != existing_turl)) { | 1138 if (existing_keyword_turl && (existing_keyword_turl != existing_turl)) { |
| 1151 // Resolve any conflicts with other entries so we can safely update the | 1139 // Resolve any conflicts with other entries so we can safely update the |
| 1152 // keyword. | 1140 // keyword. |
| 1153 ResolveSyncKeywordConflict(turl.get(), existing_keyword_turl, | 1141 ResolveSyncKeywordConflict(turl.get(), existing_keyword_turl, |
| 1154 &new_changes); | 1142 &new_changes); |
| 1155 } | 1143 } |
| 1156 UIThreadSearchTermsData search_terms_data(existing_turl->profile()); | 1144 if (UpdateNoNotify(existing_turl, *turl, search_terms_data())) { |
| 1157 if (UpdateNoNotify(existing_turl, *turl, search_terms_data)) { | |
| 1158 NotifyObservers(); | 1145 NotifyObservers(); |
| 1159 MaybeUpdateDSEAfterSync(existing_turl); | 1146 MaybeUpdateDSEAfterSync(existing_turl); |
| 1160 } | 1147 } |
| 1161 } else { | 1148 } else { |
| 1162 // We've unexpectedly received an ACTION_INVALID. | 1149 // We've unexpectedly received an ACTION_INVALID. |
| 1163 error = sync_error_factory_->CreateAndUploadError( | 1150 error = sync_error_factory_->CreateAndUploadError( |
| 1164 FROM_HERE, | 1151 FROM_HERE, |
| 1165 "ProcessSyncChanges received an ACTION_INVALID"); | 1152 "ProcessSyncChanges received an ACTION_INVALID"); |
| 1166 } | 1153 } |
| 1167 } | 1154 } |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1246 DCHECK(IsFromSync(local_turl, sync_data_map)); | 1233 DCHECK(IsFromSync(local_turl, sync_data_map)); |
| 1247 // This local search engine is already synced. If the timestamp differs | 1234 // This local search engine is already synced. If the timestamp differs |
| 1248 // from Sync, we need to update locally or to the cloud. Note that if the | 1235 // from Sync, we need to update locally or to the cloud. Note that if the |
| 1249 // timestamps are equal, we touch neither. | 1236 // timestamps are equal, we touch neither. |
| 1250 if (sync_turl->last_modified() > local_turl->last_modified()) { | 1237 if (sync_turl->last_modified() > local_turl->last_modified()) { |
| 1251 // We've received an update from Sync. We should replace all synced | 1238 // We've received an update from Sync. We should replace all synced |
| 1252 // fields in the local TemplateURL. Note that this includes the | 1239 // fields in the local TemplateURL. Note that this includes the |
| 1253 // TemplateURLID and the TemplateURL may have to be reparsed. This | 1240 // TemplateURLID and the TemplateURL may have to be reparsed. This |
| 1254 // also makes the local data's last_modified timestamp equal to Sync's, | 1241 // also makes the local data's last_modified timestamp equal to Sync's, |
| 1255 // avoiding an Update on the next MergeData call. | 1242 // avoiding an Update on the next MergeData call. |
| 1256 UIThreadSearchTermsData search_terms_data(local_turl->profile()); | 1243 if (UpdateNoNotify(local_turl, *sync_turl, search_terms_data())) |
| 1257 if (UpdateNoNotify(local_turl, *sync_turl, search_terms_data)) | |
| 1258 NotifyObservers(); | 1244 NotifyObservers(); |
| 1259 merge_result.set_num_items_modified( | 1245 merge_result.set_num_items_modified( |
| 1260 merge_result.num_items_modified() + 1); | 1246 merge_result.num_items_modified() + 1); |
| 1261 } else if (sync_turl->last_modified() < local_turl->last_modified()) { | 1247 } else if (sync_turl->last_modified() < local_turl->last_modified()) { |
| 1262 // Otherwise, we know we have newer data, so update Sync with our | 1248 // Otherwise, we know we have newer data, so update Sync with our |
| 1263 // data fields. | 1249 // data fields. |
| 1264 new_changes.push_back( | 1250 new_changes.push_back( |
| 1265 syncer::SyncChange(FROM_HERE, | 1251 syncer::SyncChange(FROM_HERE, |
| 1266 syncer::SyncChange::ACTION_UPDATE, | 1252 syncer::SyncChange::ACTION_UPDATE, |
| 1267 local_data_map[local_turl->sync_guid()])); | 1253 local_data_map[local_turl->sync_guid()])); |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1446 bool deduped = DeDupeEncodings(&data.input_encodings); | 1432 bool deduped = DeDupeEncodings(&data.input_encodings); |
| 1447 data.date_created = base::Time::FromInternalValue(specifics.date_created()); | 1433 data.date_created = base::Time::FromInternalValue(specifics.date_created()); |
| 1448 data.last_modified = base::Time::FromInternalValue(specifics.last_modified()); | 1434 data.last_modified = base::Time::FromInternalValue(specifics.last_modified()); |
| 1449 data.prepopulate_id = specifics.prepopulate_id(); | 1435 data.prepopulate_id = specifics.prepopulate_id(); |
| 1450 data.sync_guid = specifics.sync_guid(); | 1436 data.sync_guid = specifics.sync_guid(); |
| 1451 data.alternate_urls.clear(); | 1437 data.alternate_urls.clear(); |
| 1452 for (int i = 0; i < specifics.alternate_urls_size(); ++i) | 1438 for (int i = 0; i < specifics.alternate_urls_size(); ++i) |
| 1453 data.alternate_urls.push_back(specifics.alternate_urls(i)); | 1439 data.alternate_urls.push_back(specifics.alternate_urls(i)); |
| 1454 data.search_terms_replacement_key = specifics.search_terms_replacement_key(); | 1440 data.search_terms_replacement_key = specifics.search_terms_replacement_key(); |
| 1455 | 1441 |
| 1456 TemplateURL* turl = new TemplateURL(profile, data); | 1442 TemplateURL* turl = new TemplateURL(data); |
| 1457 UIThreadSearchTermsData search_terms_data(profile); | 1443 UIThreadSearchTermsData search_terms_data(profile); |
| 1458 // If this TemplateURL matches a built-in prepopulated template URL, it's | 1444 // If this TemplateURL matches a built-in prepopulated template URL, it's |
| 1459 // possible that sync is trying to modify fields that should not be touched. | 1445 // possible that sync is trying to modify fields that should not be touched. |
| 1460 // Revert these fields to the built-in values. | 1446 // Revert these fields to the built-in values. |
| 1461 UpdateTemplateURLIfPrepopulated(turl, profile); | 1447 UpdateTemplateURLIfPrepopulated(turl, profile); |
| 1462 DCHECK_NE(TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, turl->GetType()); | 1448 DCHECK_NE(TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, turl->GetType()); |
| 1463 if (reset_keyword || deduped) { | 1449 if (reset_keyword || deduped) { |
| 1464 if (reset_keyword) | 1450 if (reset_keyword) |
| 1465 turl->ResetKeywordIfNecessary(search_terms_data, true); | 1451 turl->ResetKeywordIfNecessary(search_terms_data, true); |
| 1466 syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*turl); | 1452 syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*turl); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1554 DCHECK(initializers[i].keyword); | 1540 DCHECK(initializers[i].keyword); |
| 1555 DCHECK(initializers[i].url); | 1541 DCHECK(initializers[i].url); |
| 1556 DCHECK(initializers[i].content); | 1542 DCHECK(initializers[i].content); |
| 1557 | 1543 |
| 1558 // TemplateURLService ends up owning the TemplateURL, don't try and free | 1544 // TemplateURLService ends up owning the TemplateURL, don't try and free |
| 1559 // it. | 1545 // it. |
| 1560 TemplateURLData data; | 1546 TemplateURLData data; |
| 1561 data.short_name = base::UTF8ToUTF16(initializers[i].content); | 1547 data.short_name = base::UTF8ToUTF16(initializers[i].content); |
| 1562 data.SetKeyword(base::UTF8ToUTF16(initializers[i].keyword)); | 1548 data.SetKeyword(base::UTF8ToUTF16(initializers[i].keyword)); |
| 1563 data.SetURL(initializers[i].url); | 1549 data.SetURL(initializers[i].url); |
| 1564 TemplateURL* template_url = new TemplateURL(profile_, data); | 1550 TemplateURL* template_url = new TemplateURL(data); |
| 1565 AddNoNotify(template_url, true); | 1551 AddNoNotify(template_url, true); |
| 1566 | 1552 |
| 1567 // Set the first provided identifier to be the default. | 1553 // Set the first provided identifier to be the default. |
| 1568 if (i == 0) | 1554 if (i == 0) |
| 1569 default_search_manager_.SetUserSelectedDefaultSearchEngine(data); | 1555 default_search_manager_.SetUserSelectedDefaultSearchEngine(data); |
| 1570 } | 1556 } |
| 1571 } | 1557 } |
| 1572 | 1558 |
| 1573 // Request a server check for the correct Google URL if Google is the | 1559 // Request a server check for the correct Google URL if Google is the |
| 1574 // default search engine and not in headless mode. | 1560 // default search engine and not in headless mode. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1611 if (best_fallback) | 1597 if (best_fallback) |
| 1612 keyword_to_template_map_[keyword] = best_fallback; | 1598 keyword_to_template_map_[keyword] = best_fallback; |
| 1613 else | 1599 else |
| 1614 keyword_to_template_map_.erase(keyword); | 1600 keyword_to_template_map_.erase(keyword); |
| 1615 } | 1601 } |
| 1616 | 1602 |
| 1617 if (!template_url->sync_guid().empty()) | 1603 if (!template_url->sync_guid().empty()) |
| 1618 guid_to_template_map_.erase(template_url->sync_guid()); | 1604 guid_to_template_map_.erase(template_url->sync_guid()); |
| 1619 // |provider_map_| is only initialized after loading has completed. | 1605 // |provider_map_| is only initialized after loading has completed. |
| 1620 if (loaded_) { | 1606 if (loaded_) { |
| 1621 UIThreadSearchTermsData search_terms_data(template_url->profile()); | 1607 provider_map_->Remove(template_url, search_terms_data()); |
| 1622 provider_map_->Remove(template_url, search_terms_data); | |
| 1623 } | 1608 } |
| 1624 } | 1609 } |
| 1625 | 1610 |
| 1626 void TemplateURLService::AddToMaps(TemplateURL* template_url) { | 1611 void TemplateURLService::AddToMaps(TemplateURL* template_url) { |
| 1627 bool template_url_is_omnibox_api = | 1612 bool template_url_is_omnibox_api = |
| 1628 template_url->GetType() == TemplateURL::OMNIBOX_API_EXTENSION; | 1613 template_url->GetType() == TemplateURL::OMNIBOX_API_EXTENSION; |
| 1629 const base::string16& keyword = template_url->keyword(); | 1614 const base::string16& keyword = template_url->keyword(); |
| 1630 KeywordToTemplateMap::const_iterator i = | 1615 KeywordToTemplateMap::const_iterator i = |
| 1631 keyword_to_template_map_.find(keyword); | 1616 keyword_to_template_map_.find(keyword); |
| 1632 if (i == keyword_to_template_map_.end()) { | 1617 if (i == keyword_to_template_map_.end()) { |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1822 return; | 1807 return; |
| 1823 | 1808 |
| 1824 size_t default_search_index; | 1809 size_t default_search_index; |
| 1825 ScopedVector<TemplateURLData> prepopulated_urls = | 1810 ScopedVector<TemplateURLData> prepopulated_urls = |
| 1826 TemplateURLPrepopulateData::GetPrepopulatedEngines( | 1811 TemplateURLPrepopulateData::GetPrepopulatedEngines( |
| 1827 profile ? profile->GetPrefs() : NULL, &default_search_index); | 1812 profile ? profile->GetPrefs() : NULL, &default_search_index); |
| 1828 | 1813 |
| 1829 for (size_t i = 0; i < prepopulated_urls.size(); ++i) { | 1814 for (size_t i = 0; i < prepopulated_urls.size(); ++i) { |
| 1830 if (prepopulated_urls[i]->prepopulate_id == prepopulate_id) { | 1815 if (prepopulated_urls[i]->prepopulate_id == prepopulate_id) { |
| 1831 MergeIntoPrepopulatedEngineData(template_url, prepopulated_urls[i]); | 1816 MergeIntoPrepopulatedEngineData(template_url, prepopulated_urls[i]); |
| 1832 template_url->CopyFrom(TemplateURL(profile, *prepopulated_urls[i])); | 1817 template_url->CopyFrom(TemplateURL(*prepopulated_urls[i])); |
| 1833 } | 1818 } |
| 1834 } | 1819 } |
| 1835 } | 1820 } |
| 1836 | 1821 |
| 1837 void TemplateURLService::MaybeUpdateDSEAfterSync(TemplateURL* synced_turl) { | 1822 void TemplateURLService::MaybeUpdateDSEAfterSync(TemplateURL* synced_turl) { |
| 1838 if (GetPrefs() && | 1823 if (GetPrefs() && |
| 1839 (synced_turl->sync_guid() == | 1824 (synced_turl->sync_guid() == |
| 1840 GetPrefs()->GetString(prefs::kSyncedDefaultSearchProviderGUID))) { | 1825 GetPrefs()->GetString(prefs::kSyncedDefaultSearchProviderGUID))) { |
| 1841 default_search_manager_.SetUserSelectedDefaultSearchEngine( | 1826 default_search_manager_.SetUserSelectedDefaultSearchEngine( |
| 1842 synced_turl->data()); | 1827 synced_turl->data()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1905 history::SOURCE_BROWSED, false); | 1890 history::SOURCE_BROWSED, false); |
| 1906 } | 1891 } |
| 1907 | 1892 |
| 1908 void TemplateURLService::GoogleBaseURLChanged(const GURL& old_base_url) { | 1893 void TemplateURLService::GoogleBaseURLChanged(const GURL& old_base_url) { |
| 1909 WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get()); | 1894 WebDataService::KeywordBatchModeScoper keyword_scoper(service_.get()); |
| 1910 bool something_changed = false; | 1895 bool something_changed = false; |
| 1911 for (TemplateURLVector::iterator i(template_urls_.begin()); | 1896 for (TemplateURLVector::iterator i(template_urls_.begin()); |
| 1912 i != template_urls_.end(); ++i) { | 1897 i != template_urls_.end(); ++i) { |
| 1913 TemplateURL* t_url = *i; | 1898 TemplateURL* t_url = *i; |
| 1914 if (t_url->HasGoogleBaseURLs(search_terms_data())) { | 1899 if (t_url->HasGoogleBaseURLs(search_terms_data())) { |
| 1915 TemplateURL updated_turl(t_url->profile(), t_url->data()); | 1900 TemplateURL updated_turl(t_url->data()); |
| 1916 updated_turl.ResetKeywordIfNecessary(search_terms_data(), false); | 1901 updated_turl.ResetKeywordIfNecessary(search_terms_data(), false); |
| 1917 KeywordToTemplateMap::const_iterator existing_entry = | 1902 KeywordToTemplateMap::const_iterator existing_entry = |
| 1918 keyword_to_template_map_.find(updated_turl.keyword()); | 1903 keyword_to_template_map_.find(updated_turl.keyword()); |
| 1919 if ((existing_entry != keyword_to_template_map_.end()) && | 1904 if ((existing_entry != keyword_to_template_map_.end()) && |
| 1920 (existing_entry->second != t_url)) { | 1905 (existing_entry->second != t_url)) { |
| 1921 // The new autogenerated keyword conflicts with another TemplateURL. | 1906 // The new autogenerated keyword conflicts with another TemplateURL. |
| 1922 // Overwrite it if it's replaceable; otherwise, leave |t_url| using its | 1907 // Overwrite it if it's replaceable; otherwise, leave |t_url| using its |
| 1923 // current keyword. (This will not prevent |t_url| from auto-updating | 1908 // current keyword. (This will not prevent |t_url| from auto-updating |
| 1924 // the keyword in the future if the conflicting TemplateURL disappears.) | 1909 // the keyword in the future if the conflicting TemplateURL disappears.) |
| 1925 // Note that we must still update |t_url| in this case, or the | 1910 // Note that we must still update |t_url| in this case, or the |
| 1926 // |provider_map_| will not be updated correctly. | 1911 // |provider_map_| will not be updated correctly. |
| 1927 if (CanReplace(existing_entry->second)) | 1912 if (CanReplace(existing_entry->second)) |
| 1928 RemoveNoNotify(existing_entry->second); | 1913 RemoveNoNotify(existing_entry->second); |
| 1929 else | 1914 else |
| 1930 updated_turl.data_.SetKeyword(t_url->keyword()); | 1915 updated_turl.data_.SetKeyword(t_url->keyword()); |
| 1931 } | 1916 } |
| 1932 something_changed = true; | 1917 something_changed = true; |
| 1933 // This will send the keyword change to sync. Note that other clients | 1918 // This will send the keyword change to sync. Note that other clients |
| 1934 // need to reset the keyword to an appropriate local value when this | 1919 // need to reset the keyword to an appropriate local value when this |
| 1935 // change arrives; see CreateTemplateURLFromTemplateURLAndSyncData(). | 1920 // change arrives; see CreateTemplateURLFromTemplateURLAndSyncData(). |
| 1936 UpdateNoNotify(t_url, updated_turl, | 1921 UpdateNoNotify(t_url, updated_turl, |
| 1937 OldBaseURLSearchTermsData(t_url->profile(), old_base_url.spec())); | 1922 OldBaseURLSearchTermsData(profile(), old_base_url.spec())); |
| 1938 } | 1923 } |
| 1939 } | 1924 } |
| 1940 if (something_changed) | 1925 if (something_changed) |
| 1941 NotifyObservers(); | 1926 NotifyObservers(); |
| 1942 } | 1927 } |
| 1943 | 1928 |
| 1944 void TemplateURLService::OnGoogleURLUpdated(GURL old_url, GURL new_url) { | 1929 void TemplateURLService::OnGoogleURLUpdated(GURL old_url, GURL new_url) { |
| 1945 if (loaded_) | 1930 if (loaded_) |
| 1946 GoogleBaseURLChanged(old_url); | 1931 GoogleBaseURLChanged(old_url); |
| 1947 } | 1932 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1980 const TemplateURLData* data, | 1965 const TemplateURLData* data, |
| 1981 DefaultSearchManager::Source source) { | 1966 DefaultSearchManager::Source source) { |
| 1982 if (!loaded_) { | 1967 if (!loaded_) { |
| 1983 // Set |initial_default_search_provider_| from the preferences. This is | 1968 // Set |initial_default_search_provider_| from the preferences. This is |
| 1984 // mainly so we can hold ownership until we get to the point where the list | 1969 // mainly so we can hold ownership until we get to the point where the list |
| 1985 // of keywords from Web Data is the owner of everything including the | 1970 // of keywords from Web Data is the owner of everything including the |
| 1986 // default. | 1971 // default. |
| 1987 bool changed = TemplateURL::MatchesData( | 1972 bool changed = TemplateURL::MatchesData( |
| 1988 initial_default_search_provider_.get(), data, search_terms_data()); | 1973 initial_default_search_provider_.get(), data, search_terms_data()); |
| 1989 initial_default_search_provider_.reset( | 1974 initial_default_search_provider_.reset( |
| 1990 data ? new TemplateURL(profile_, *data) : NULL); | 1975 data ? new TemplateURL(*data) : NULL); |
| 1991 default_search_provider_source_ = source; | 1976 default_search_provider_source_ = source; |
| 1992 return changed; | 1977 return changed; |
| 1993 } | 1978 } |
| 1994 | 1979 |
| 1995 // Prevent recursion if we update the value stored in default_search_manager_. | 1980 // Prevent recursion if we update the value stored in default_search_manager_. |
| 1996 // Note that we exclude the case of data == NULL because that could cause a | 1981 // Note that we exclude the case of data == NULL because that could cause a |
| 1997 // false positive for recursion when the initial_default_search_provider_ is | 1982 // false positive for recursion when the initial_default_search_provider_ is |
| 1998 // NULL due to policy. We'll never actually get recursion with data == NULL. | 1983 // NULL due to policy. We'll never actually get recursion with data == NULL. |
| 1999 if (source == default_search_provider_source_ && data != NULL && | 1984 if (source == default_search_provider_source_ && data != NULL && |
| 2000 TemplateURL::MatchesData(default_search_provider_, data, | 1985 TemplateURL::MatchesData(default_search_provider_, data, |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 2024 default_search_provider_ = | 2009 default_search_provider_ = |
| 2025 FindPrepopulatedTemplateURL(data->prepopulate_id); | 2010 FindPrepopulatedTemplateURL(data->prepopulate_id); |
| 2026 if (default_search_provider_) { | 2011 if (default_search_provider_) { |
| 2027 TemplateURLData update_data(*data); | 2012 TemplateURLData update_data(*data); |
| 2028 update_data.sync_guid = default_search_provider_->sync_guid(); | 2013 update_data.sync_guid = default_search_provider_->sync_guid(); |
| 2029 if (!default_search_provider_->safe_for_autoreplace()) { | 2014 if (!default_search_provider_->safe_for_autoreplace()) { |
| 2030 update_data.safe_for_autoreplace = false; | 2015 update_data.safe_for_autoreplace = false; |
| 2031 update_data.SetKeyword(default_search_provider_->keyword()); | 2016 update_data.SetKeyword(default_search_provider_->keyword()); |
| 2032 update_data.short_name = default_search_provider_->short_name(); | 2017 update_data.short_name = default_search_provider_->short_name(); |
| 2033 } | 2018 } |
| 2034 UIThreadSearchTermsData search_terms_data( | |
| 2035 default_search_provider_->profile()); | |
| 2036 UpdateNoNotify(default_search_provider_, | 2019 UpdateNoNotify(default_search_provider_, |
| 2037 TemplateURL(profile_, update_data), | 2020 TemplateURL(update_data), |
| 2038 search_terms_data); | 2021 search_terms_data()); |
| 2039 } else { | 2022 } else { |
| 2040 // Normally the prepopulated fallback should be present in | 2023 // Normally the prepopulated fallback should be present in |
| 2041 // |template_urls_|, but in a few cases it might not be: | 2024 // |template_urls_|, but in a few cases it might not be: |
| 2042 // (1) Tests that initialize the TemplateURLService in peculiar ways. | 2025 // (1) Tests that initialize the TemplateURLService in peculiar ways. |
| 2043 // (2) If the user deleted the pre-populated default and we subsequently | 2026 // (2) If the user deleted the pre-populated default and we subsequently |
| 2044 // lost their user-selected value. | 2027 // lost their user-selected value. |
| 2045 TemplateURL* new_dse = new TemplateURL(profile_, *data); | 2028 TemplateURL* new_dse = new TemplateURL(*data); |
| 2046 if (AddNoNotify(new_dse, true)) | 2029 if (AddNoNotify(new_dse, true)) |
| 2047 default_search_provider_ = new_dse; | 2030 default_search_provider_ = new_dse; |
| 2048 } | 2031 } |
| 2049 } else if (source == DefaultSearchManager::FROM_USER) { | 2032 } else if (source == DefaultSearchManager::FROM_USER) { |
| 2050 default_search_provider_ = GetTemplateURLForGUID(data->sync_guid); | 2033 default_search_provider_ = GetTemplateURLForGUID(data->sync_guid); |
| 2051 if (!default_search_provider_ && data->prepopulate_id) { | 2034 if (!default_search_provider_ && data->prepopulate_id) { |
| 2052 default_search_provider_ = | 2035 default_search_provider_ = |
| 2053 FindPrepopulatedTemplateURL(data->prepopulate_id); | 2036 FindPrepopulatedTemplateURL(data->prepopulate_id); |
| 2054 } | 2037 } |
| 2055 TemplateURLData new_data(*data); | 2038 TemplateURLData new_data(*data); |
| 2056 new_data.show_in_default_list = true; | 2039 new_data.show_in_default_list = true; |
| 2057 if (default_search_provider_) { | 2040 if (default_search_provider_) { |
| 2058 UIThreadSearchTermsData search_terms_data( | |
| 2059 default_search_provider_->profile()); | |
| 2060 UpdateNoNotify(default_search_provider_, | 2041 UpdateNoNotify(default_search_provider_, |
| 2061 TemplateURL(profile_, new_data), | 2042 TemplateURL(new_data), |
| 2062 search_terms_data); | 2043 search_terms_data()); |
| 2063 } else { | 2044 } else { |
| 2064 new_data.id = kInvalidTemplateURLID; | 2045 new_data.id = kInvalidTemplateURLID; |
| 2065 TemplateURL* new_dse = new TemplateURL(profile_, new_data); | 2046 TemplateURL* new_dse = new TemplateURL(new_data); |
| 2066 if (AddNoNotify(new_dse, true)) | 2047 if (AddNoNotify(new_dse, true)) |
| 2067 default_search_provider_ = new_dse; | 2048 default_search_provider_ = new_dse; |
| 2068 } | 2049 } |
| 2069 if (default_search_provider_ && GetPrefs()) { | 2050 if (default_search_provider_ && GetPrefs()) { |
| 2070 GetPrefs()->SetString( | 2051 GetPrefs()->SetString( |
| 2071 prefs::kSyncedDefaultSearchProviderGUID, | 2052 prefs::kSyncedDefaultSearchProviderGUID, |
| 2072 default_search_provider_->sync_guid()); | 2053 default_search_provider_->sync_guid()); |
| 2073 } | 2054 } |
| 2074 | 2055 |
| 2075 } | 2056 } |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2206 TemplateURLData data(url->data()); | 2187 TemplateURLData data(url->data()); |
| 2207 data.short_name = title; | 2188 data.short_name = title; |
| 2208 data.SetKeyword(keyword); | 2189 data.SetKeyword(keyword); |
| 2209 if (search_url != data.url()) { | 2190 if (search_url != data.url()) { |
| 2210 data.SetURL(search_url); | 2191 data.SetURL(search_url); |
| 2211 // The urls have changed, reset the favicon url. | 2192 // The urls have changed, reset the favicon url. |
| 2212 data.favicon_url = GURL(); | 2193 data.favicon_url = GURL(); |
| 2213 } | 2194 } |
| 2214 data.safe_for_autoreplace = false; | 2195 data.safe_for_autoreplace = false; |
| 2215 data.last_modified = time_provider_(); | 2196 data.last_modified = time_provider_(); |
| 2216 UIThreadSearchTermsData search_terms_data(url->profile()); | 2197 return UpdateNoNotify(url, TemplateURL(data), search_terms_data()); |
| 2217 return UpdateNoNotify(url, TemplateURL(profile_, data), search_terms_data); | |
| 2218 } | 2198 } |
| 2219 | 2199 |
| 2220 void TemplateURLService::NotifyObservers() { | 2200 void TemplateURLService::NotifyObservers() { |
| 2221 if (!loaded_) | 2201 if (!loaded_) |
| 2222 return; | 2202 return; |
| 2223 | 2203 |
| 2224 FOR_EACH_OBSERVER(TemplateURLServiceObserver, model_observers_, | 2204 FOR_EACH_OBSERVER(TemplateURLServiceObserver, model_observers_, |
| 2225 OnTemplateURLServiceChanged()); | 2205 OnTemplateURLServiceChanged()); |
| 2226 } | 2206 } |
| 2227 | 2207 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2265 } | 2245 } |
| 2266 } | 2246 } |
| 2267 | 2247 |
| 2268 if (default_from_prefs) { | 2248 if (default_from_prefs) { |
| 2269 default_search_provider_ = NULL; | 2249 default_search_provider_ = NULL; |
| 2270 default_search_provider_source_ = DefaultSearchManager::FROM_POLICY; | 2250 default_search_provider_source_ = DefaultSearchManager::FROM_POLICY; |
| 2271 TemplateURLData new_data(*default_from_prefs); | 2251 TemplateURLData new_data(*default_from_prefs); |
| 2272 if (new_data.sync_guid.empty()) | 2252 if (new_data.sync_guid.empty()) |
| 2273 new_data.sync_guid = base::GenerateGUID(); | 2253 new_data.sync_guid = base::GenerateGUID(); |
| 2274 new_data.created_by_policy = true; | 2254 new_data.created_by_policy = true; |
| 2275 TemplateURL* new_dse = new TemplateURL(profile_, new_data); | 2255 TemplateURL* new_dse = new TemplateURL(new_data); |
| 2276 if (AddNoNotify(new_dse, true)) | 2256 if (AddNoNotify(new_dse, true)) |
| 2277 default_search_provider_ = new_dse; | 2257 default_search_provider_ = new_dse; |
| 2278 } | 2258 } |
| 2279 } | 2259 } |
| 2280 | 2260 |
| 2281 void TemplateURLService::ResetTemplateURLGUID(TemplateURL* url, | 2261 void TemplateURLService::ResetTemplateURLGUID(TemplateURL* url, |
| 2282 const std::string& guid) { | 2262 const std::string& guid) { |
| 2283 DCHECK(loaded_); | 2263 DCHECK(loaded_); |
| 2284 DCHECK(!guid.empty()); | 2264 DCHECK(!guid.empty()); |
| 2285 | 2265 |
| 2286 TemplateURLData data(url->data()); | 2266 TemplateURLData data(url->data()); |
| 2287 data.sync_guid = guid; | 2267 data.sync_guid = guid; |
| 2288 UIThreadSearchTermsData search_terms_data(url->profile()); | 2268 UpdateNoNotify(url, TemplateURL(data), search_terms_data()); |
| 2289 UpdateNoNotify(url, TemplateURL(profile_, data), search_terms_data); | |
| 2290 } | 2269 } |
| 2291 | 2270 |
| 2292 base::string16 TemplateURLService::UniquifyKeyword(const TemplateURL& turl, | 2271 base::string16 TemplateURLService::UniquifyKeyword(const TemplateURL& turl, |
| 2293 bool force) { | 2272 bool force) { |
| 2294 if (!force) { | 2273 if (!force) { |
| 2295 // Already unique. | 2274 // Already unique. |
| 2296 if (!GetTemplateURLForKeyword(turl.keyword())) | 2275 if (!GetTemplateURLForKeyword(turl.keyword())) |
| 2297 return turl.keyword(); | 2276 return turl.keyword(); |
| 2298 | 2277 |
| 2299 // First, try to return the generated keyword for the TemplateURL (except | 2278 // First, try to return the generated keyword for the TemplateURL (except |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2350 base::string16 new_keyword = UniquifyKeyword(*loser, false); | 2329 base::string16 new_keyword = UniquifyKeyword(*loser, false); |
| 2351 DCHECK(!GetTemplateURLForKeyword(new_keyword)); | 2330 DCHECK(!GetTemplateURLForKeyword(new_keyword)); |
| 2352 if (applied_turl_is_better) { | 2331 if (applied_turl_is_better) { |
| 2353 // Just set the keyword of |unapplied_sync_turl|. The caller is responsible | 2332 // Just set the keyword of |unapplied_sync_turl|. The caller is responsible |
| 2354 // for adding or updating unapplied_sync_turl in the local model. | 2333 // for adding or updating unapplied_sync_turl in the local model. |
| 2355 unapplied_sync_turl->data_.SetKeyword(new_keyword); | 2334 unapplied_sync_turl->data_.SetKeyword(new_keyword); |
| 2356 } else { | 2335 } else { |
| 2357 // Update |applied_sync_turl| in the local model with the new keyword. | 2336 // Update |applied_sync_turl| in the local model with the new keyword. |
| 2358 TemplateURLData data(applied_sync_turl->data()); | 2337 TemplateURLData data(applied_sync_turl->data()); |
| 2359 data.SetKeyword(new_keyword); | 2338 data.SetKeyword(new_keyword); |
| 2360 UIThreadSearchTermsData search_terms_data(applied_sync_turl->profile()); | |
| 2361 if (UpdateNoNotify( | 2339 if (UpdateNoNotify( |
| 2362 applied_sync_turl, TemplateURL(profile_, data), search_terms_data)) | 2340 applied_sync_turl, TemplateURL(data), search_terms_data())) |
| 2363 NotifyObservers(); | 2341 NotifyObservers(); |
| 2364 } | 2342 } |
| 2365 // The losing TemplateURL should have their keyword updated. Send a change to | 2343 // The losing TemplateURL should have their keyword updated. Send a change to |
| 2366 // the server to reflect this change. | 2344 // the server to reflect this change. |
| 2367 syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*loser); | 2345 syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*loser); |
| 2368 change_list->push_back(syncer::SyncChange(FROM_HERE, | 2346 change_list->push_back(syncer::SyncChange(FROM_HERE, |
| 2369 syncer::SyncChange::ACTION_UPDATE, | 2347 syncer::SyncChange::ACTION_UPDATE, |
| 2370 sync_data)); | 2348 sync_data)); |
| 2371 } | 2349 } |
| 2372 | 2350 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2425 // This TemplateURL was either removed or overwritten in the local model. | 2403 // This TemplateURL was either removed or overwritten in the local model. |
| 2426 // Remove the entry from the local data so it isn't pushed up to Sync. | 2404 // Remove the entry from the local data so it isn't pushed up to Sync. |
| 2427 local_data->erase(guid); | 2405 local_data->erase(guid); |
| 2428 } | 2406 } |
| 2429 } | 2407 } |
| 2430 | 2408 |
| 2431 if (should_add_sync_turl) { | 2409 if (should_add_sync_turl) { |
| 2432 // Force the local ID to kInvalidTemplateURLID so we can add it. | 2410 // Force the local ID to kInvalidTemplateURLID so we can add it. |
| 2433 TemplateURLData data(sync_turl->data()); | 2411 TemplateURLData data(sync_turl->data()); |
| 2434 data.id = kInvalidTemplateURLID; | 2412 data.id = kInvalidTemplateURLID; |
| 2435 TemplateURL* added = new TemplateURL(profile_, data); | 2413 TemplateURL* added = new TemplateURL(data); |
| 2436 base::AutoReset<DefaultSearchChangeOrigin> change_origin( | 2414 base::AutoReset<DefaultSearchChangeOrigin> change_origin( |
| 2437 &dsp_change_origin_, DSP_CHANGE_SYNC_ADD); | 2415 &dsp_change_origin_, DSP_CHANGE_SYNC_ADD); |
| 2438 if (Add(added)) | 2416 if (Add(added)) |
| 2439 MaybeUpdateDSEAfterSync(added); | 2417 MaybeUpdateDSEAfterSync(added); |
| 2440 merge_result->set_num_items_added( | 2418 merge_result->set_num_items_added( |
| 2441 merge_result->num_items_added() + 1); | 2419 merge_result->num_items_added() + 1); |
| 2442 } | 2420 } |
| 2443 } | 2421 } |
| 2444 | 2422 |
| 2445 void TemplateURLService::PatchMissingSyncGUIDs( | 2423 void TemplateURLService::PatchMissingSyncGUIDs( |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2487 | 2465 |
| 2488 TemplateURL* TemplateURLService::CreateTemplateURLForExtension( | 2466 TemplateURL* TemplateURLService::CreateTemplateURLForExtension( |
| 2489 const ExtensionKeyword& extension_keyword) { | 2467 const ExtensionKeyword& extension_keyword) { |
| 2490 TemplateURLData data; | 2468 TemplateURLData data; |
| 2491 data.short_name = base::UTF8ToUTF16(extension_keyword.extension_name); | 2469 data.short_name = base::UTF8ToUTF16(extension_keyword.extension_name); |
| 2492 data.SetKeyword(base::UTF8ToUTF16(extension_keyword.extension_keyword)); | 2470 data.SetKeyword(base::UTF8ToUTF16(extension_keyword.extension_keyword)); |
| 2493 // This URL is not actually used for navigation. It holds the extension's | 2471 // This URL is not actually used for navigation. It holds the extension's |
| 2494 // ID, as well as forcing the TemplateURL to be treated as a search keyword. | 2472 // ID, as well as forcing the TemplateURL to be treated as a search keyword. |
| 2495 data.SetURL(std::string(extensions::kExtensionScheme) + "://" + | 2473 data.SetURL(std::string(extensions::kExtensionScheme) + "://" + |
| 2496 extension_keyword.extension_id + "/?q={searchTerms}"); | 2474 extension_keyword.extension_id + "/?q={searchTerms}"); |
| 2497 return new TemplateURL(profile_, data); | 2475 return new TemplateURL(data); |
| 2498 } | 2476 } |
| 2499 | 2477 |
| 2500 TemplateURL* TemplateURLService::FindTemplateURLForExtension( | 2478 TemplateURL* TemplateURLService::FindTemplateURLForExtension( |
| 2501 const std::string& extension_id, | 2479 const std::string& extension_id, |
| 2502 TemplateURL::Type type) { | 2480 TemplateURL::Type type) { |
| 2503 DCHECK_NE(TemplateURL::NORMAL, type); | 2481 DCHECK_NE(TemplateURL::NORMAL, type); |
| 2504 for (TemplateURLVector::const_iterator i = template_urls_.begin(); | 2482 for (TemplateURLVector::const_iterator i = template_urls_.begin(); |
| 2505 i != template_urls_.end(); ++i) { | 2483 i != template_urls_.end(); ++i) { |
| 2506 if ((*i)->GetType() == type && | 2484 if ((*i)->GetType() == type && |
| 2507 (*i)->GetExtensionId() == extension_id) | 2485 (*i)->GetExtensionId() == extension_id) |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 2538 | 2516 |
| 2539 if (most_recently_intalled_default) { | 2517 if (most_recently_intalled_default) { |
| 2540 base::AutoReset<DefaultSearchChangeOrigin> change_origin( | 2518 base::AutoReset<DefaultSearchChangeOrigin> change_origin( |
| 2541 &dsp_change_origin_, DSP_CHANGE_OVERRIDE_SETTINGS_EXTENSION); | 2519 &dsp_change_origin_, DSP_CHANGE_OVERRIDE_SETTINGS_EXTENSION); |
| 2542 default_search_manager_.SetExtensionControlledDefaultSearchEngine( | 2520 default_search_manager_.SetExtensionControlledDefaultSearchEngine( |
| 2543 most_recently_intalled_default->data()); | 2521 most_recently_intalled_default->data()); |
| 2544 } else { | 2522 } else { |
| 2545 default_search_manager_.ClearExtensionControlledDefaultSearchEngine(); | 2523 default_search_manager_.ClearExtensionControlledDefaultSearchEngine(); |
| 2546 } | 2524 } |
| 2547 } | 2525 } |
| OLD | NEW |