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

Side by Side Diff: chrome/browser/search_engines/template_url_service.cc

Issue 10662035: [Sync] Put everything in sync/api into csync namespace (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comments Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/environment.h" 9 #include "base/environment.h"
10 #include "base/guid.h" 10 #include "base/guid.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 // to changes after it in |change_list|. 103 // to changes after it in |change_list|.
104 // The criteria is: 104 // The criteria is:
105 // 1) It is an ACTION_UPDATE or ACTION_DELETE and the sync_guid associated 105 // 1) It is an ACTION_UPDATE or ACTION_DELETE and the sync_guid associated
106 // with it is NOT found in |sync_data|. We can only update and remove 106 // with it is NOT found in |sync_data|. We can only update and remove
107 // entries that were originally from the Sync server. 107 // entries that were originally from the Sync server.
108 // 2) It is an ACTION_ADD and the sync_guid associated with it is found in 108 // 2) It is an ACTION_ADD and the sync_guid associated with it is found in
109 // |sync_data|. We cannot re-add entries that Sync already knew about. 109 // |sync_data|. We cannot re-add entries that Sync already knew about.
110 // 3) There is an update after an update for the same GUID. We prune earlier 110 // 3) There is an update after an update for the same GUID. We prune earlier
111 // ones just to save bandwidth (Sync would normally coalesce them). 111 // ones just to save bandwidth (Sync would normally coalesce them).
112 bool ShouldRemoveSyncChange(size_t index, 112 bool ShouldRemoveSyncChange(size_t index,
113 SyncChangeList* change_list, 113 csync::SyncChangeList* change_list,
114 const SyncDataMap* sync_data) { 114 const SyncDataMap* sync_data) {
115 DCHECK(index < change_list->size()); 115 DCHECK(index < change_list->size());
116 const SyncChange& change_i = (*change_list)[index]; 116 const csync::SyncChange& change_i = (*change_list)[index];
117 const std::string guid = change_i.sync_data().GetSpecifics() 117 const std::string guid = change_i.sync_data().GetSpecifics()
118 .search_engine().sync_guid(); 118 .search_engine().sync_guid();
119 SyncChange::SyncChangeType type = change_i.change_type(); 119 csync::SyncChange::SyncChangeType type = change_i.change_type();
120 if ((type == SyncChange::ACTION_UPDATE || 120 if ((type == csync::SyncChange::ACTION_UPDATE ||
121 type == SyncChange::ACTION_DELETE) && 121 type == csync::SyncChange::ACTION_DELETE) &&
122 sync_data->find(guid) == sync_data->end()) 122 sync_data->find(guid) == sync_data->end())
123 return true; 123 return true;
124 if (type == SyncChange::ACTION_ADD && 124 if (type == csync::SyncChange::ACTION_ADD &&
125 sync_data->find(guid) != sync_data->end()) 125 sync_data->find(guid) != sync_data->end())
126 return true; 126 return true;
127 if (type == SyncChange::ACTION_UPDATE) { 127 if (type == csync::SyncChange::ACTION_UPDATE) {
128 for (size_t j = index + 1; j < change_list->size(); j++) { 128 for (size_t j = index + 1; j < change_list->size(); j++) {
129 const SyncChange& change_j = (*change_list)[j]; 129 const csync::SyncChange& change_j = (*change_list)[j];
130 if ((SyncChange::ACTION_UPDATE == change_j.change_type()) && 130 if ((csync::SyncChange::ACTION_UPDATE == change_j.change_type()) &&
131 (change_j.sync_data().GetSpecifics().search_engine().sync_guid() == 131 (change_j.sync_data().GetSpecifics().search_engine().sync_guid() ==
132 guid)) 132 guid))
133 return true; 133 return true;
134 } 134 }
135 } 135 }
136 return false; 136 return false;
137 } 137 }
138 138
139 // Remove SyncChanges that should not be sent to the server from |change_list|. 139 // Remove SyncChanges that should not be sent to the server from |change_list|.
140 // This is done to eliminate incorrect SyncChanges added by the merge and 140 // This is done to eliminate incorrect csync::SyncChanges added by the merge and
141 // conflict resolution logic when it is unsure of whether or not an entry is new 141 // conflict resolution logic when it is unsure of whether or not an entry is new
142 // from Sync or originally from the local model. This also removes changes that 142 // from Sync or originally from the local model. This also removes changes that
143 // would be otherwise be coalesced by Sync in order to save bandwidth. 143 // would be otherwise be coalesced by Sync in order to save bandwidth.
144 void PruneSyncChanges(const SyncDataMap* sync_data, 144 void PruneSyncChanges(const SyncDataMap* sync_data,
145 SyncChangeList* change_list) { 145 csync::SyncChangeList* change_list) {
146 for (size_t i = 0; i < change_list->size(); ) { 146 for (size_t i = 0; i < change_list->size(); ) {
147 if (ShouldRemoveSyncChange(i, change_list, sync_data)) 147 if (ShouldRemoveSyncChange(i, change_list, sync_data))
148 change_list->erase(change_list->begin() + i); 148 change_list->erase(change_list->begin() + i);
149 else 149 else
150 ++i; 150 ++i;
151 } 151 }
152 } 152 }
153 153
154 // Helper class that reports a specific string as the Google base URL. We use 154 // Helper class that reports a specific string as the Google base URL. We use
155 // this so that code can calculate a TemplateURL's previous search URL after a 155 // this so that code can calculate a TemplateURL's previous search URL after a
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 // flag to indicate that we waiting on the search engine entry to come 856 // flag to indicate that we waiting on the search engine entry to come
857 // in through Sync. 857 // in through Sync.
858 pending_synced_default_search_ = true; 858 pending_synced_default_search_ = true;
859 } 859 }
860 UpdateDefaultSearch(); 860 UpdateDefaultSearch();
861 } else { 861 } else {
862 NOTREACHED(); 862 NOTREACHED();
863 } 863 }
864 } 864 }
865 865
866 SyncDataList TemplateURLService::GetAllSyncData( 866 csync::SyncDataList TemplateURLService::GetAllSyncData(
867 syncable::ModelType type) const { 867 syncable::ModelType type) const {
868 DCHECK_EQ(syncable::SEARCH_ENGINES, type); 868 DCHECK_EQ(syncable::SEARCH_ENGINES, type);
869 869
870 SyncDataList current_data; 870 csync::SyncDataList current_data;
871 for (TemplateURLVector::const_iterator iter = template_urls_.begin(); 871 for (TemplateURLVector::const_iterator iter = template_urls_.begin();
872 iter != template_urls_.end(); ++iter) { 872 iter != template_urls_.end(); ++iter) {
873 // We don't sync extension keywords. 873 // We don't sync extension keywords.
874 // TODO(mpcomplete): If we allow editing extension keywords, then those 874 // TODO(mpcomplete): If we allow editing extension keywords, then those
875 // should be persisted to disk and synced. 875 // should be persisted to disk and synced.
876 if ((*iter)->IsExtensionKeyword()) 876 if ((*iter)->IsExtensionKeyword())
877 continue; 877 continue;
878 // We don't sync keywords managed by policy. 878 // We don't sync keywords managed by policy.
879 if ((*iter)->created_by_policy()) 879 if ((*iter)->created_by_policy())
880 continue; 880 continue;
881 current_data.push_back(CreateSyncDataFromTemplateURL(**iter)); 881 current_data.push_back(CreateSyncDataFromTemplateURL(**iter));
882 } 882 }
883 883
884 return current_data; 884 return current_data;
885 } 885 }
886 886
887 SyncError TemplateURLService::ProcessSyncChanges( 887 csync::SyncError TemplateURLService::ProcessSyncChanges(
888 const tracked_objects::Location& from_here, 888 const tracked_objects::Location& from_here,
889 const SyncChangeList& change_list) { 889 const csync::SyncChangeList& change_list) {
890 if (!models_associated_) { 890 if (!models_associated_) {
891 SyncError error(FROM_HERE, "Models not yet associated.", 891 csync::SyncError error(FROM_HERE, "Models not yet associated.",
892 syncable::SEARCH_ENGINES); 892 syncable::SEARCH_ENGINES);
893 return error; 893 return error;
894 } 894 }
895 DCHECK(loaded_); 895 DCHECK(loaded_);
896 896
897 AutoReset<bool> processing_changes(&processing_syncer_changes_, true); 897 AutoReset<bool> processing_changes(&processing_syncer_changes_, true);
898 898
899 // We've started syncing, so set our origin member to the base Sync value. 899 // We've started syncing, so set our origin member to the base Sync value.
900 // As we move through Sync Code, we may set this to increasingly specific 900 // As we move through Sync Code, we may set this to increasingly specific
901 // origins so we can tell what exactly caused a DSP change. 901 // origins so we can tell what exactly caused a DSP change.
902 AutoReset<DefaultSearchChangeOrigin> change_origin(&dsp_change_origin_, 902 AutoReset<DefaultSearchChangeOrigin> change_origin(&dsp_change_origin_,
903 DSP_CHANGE_SYNC_UNINTENTIONAL); 903 DSP_CHANGE_SYNC_UNINTENTIONAL);
904 904
905 SyncChangeList new_changes; 905 csync::SyncChangeList new_changes;
906 SyncError error; 906 csync::SyncError error;
907 for (SyncChangeList::const_iterator iter = change_list.begin(); 907 for (csync::SyncChangeList::const_iterator iter = change_list.begin();
908 iter != change_list.end(); ++iter) { 908 iter != change_list.end(); ++iter) {
909 DCHECK_EQ(syncable::SEARCH_ENGINES, iter->sync_data().GetDataType()); 909 DCHECK_EQ(syncable::SEARCH_ENGINES, iter->sync_data().GetDataType());
910 910
911 std::string guid = 911 std::string guid =
912 iter->sync_data().GetSpecifics().search_engine().sync_guid(); 912 iter->sync_data().GetSpecifics().search_engine().sync_guid();
913 TemplateURL* existing_turl = GetTemplateURLForGUID(guid); 913 TemplateURL* existing_turl = GetTemplateURLForGUID(guid);
914 scoped_ptr<TemplateURL> turl(CreateTemplateURLFromTemplateURLAndSyncData( 914 scoped_ptr<TemplateURL> turl(CreateTemplateURLFromTemplateURLAndSyncData(
915 profile_, existing_turl, iter->sync_data(), &new_changes)); 915 profile_, existing_turl, iter->sync_data(), &new_changes));
916 if (!turl.get()) 916 if (!turl.get())
917 continue; 917 continue;
918 918
919 // Explicitly don't check for conflicts against extension keywords; in this 919 // Explicitly don't check for conflicts against extension keywords; in this
920 // case the functions which modify the keyword map know how to handle the 920 // case the functions which modify the keyword map know how to handle the
921 // conflicts. 921 // conflicts.
922 // TODO(mpcomplete): If we allow editing extension keywords, then those will 922 // TODO(mpcomplete): If we allow editing extension keywords, then those will
923 // need to undergo conflict resolution. 923 // need to undergo conflict resolution.
924 TemplateURL* existing_keyword_turl = 924 TemplateURL* existing_keyword_turl =
925 FindNonExtensionTemplateURLForKeyword(turl->keyword()); 925 FindNonExtensionTemplateURLForKeyword(turl->keyword());
926 if (iter->change_type() == SyncChange::ACTION_DELETE) { 926 if (iter->change_type() == csync::SyncChange::ACTION_DELETE) {
927 if (!existing_turl) { 927 if (!existing_turl) {
928 NOTREACHED() << "Unexpected sync change state."; 928 NOTREACHED() << "Unexpected sync change state.";
929 error = sync_error_factory_->CreateAndUploadError( 929 error = sync_error_factory_->CreateAndUploadError(
930 FROM_HERE, 930 FROM_HERE,
931 "ProcessSyncChanges failed on ChangeType ACTION_DELETE"); 931 "ProcessSyncChanges failed on ChangeType ACTION_DELETE");
932 LOG(ERROR) << "Trying to delete a non-existent TemplateURL."; 932 LOG(ERROR) << "Trying to delete a non-existent TemplateURL.";
933 continue; 933 continue;
934 } 934 }
935 bool delete_default = (existing_turl == GetDefaultSearchProvider()); 935 bool delete_default = (existing_turl == GetDefaultSearchProvider());
936 936
937 if (delete_default && is_default_search_managed_) { 937 if (delete_default && is_default_search_managed_) {
938 NOTREACHED() << "Tried to delete managed default search provider"; 938 NOTREACHED() << "Tried to delete managed default search provider";
939 } else { 939 } else {
940 if (delete_default) 940 if (delete_default)
941 default_search_provider_ = NULL; 941 default_search_provider_ = NULL;
942 942
943 Remove(existing_turl); 943 Remove(existing_turl);
944 944
945 if (delete_default) { 945 if (delete_default) {
946 AutoReset<DefaultSearchChangeOrigin> change_origin( 946 AutoReset<DefaultSearchChangeOrigin> change_origin(
947 &dsp_change_origin_, DSP_CHANGE_SYNC_DELETE); 947 &dsp_change_origin_, DSP_CHANGE_SYNC_DELETE);
948 SetDefaultSearchProvider(FindNewDefaultSearchProvider()); 948 SetDefaultSearchProvider(FindNewDefaultSearchProvider());
949 } 949 }
950 } 950 }
951 } else if (iter->change_type() == SyncChange::ACTION_ADD) { 951 } else if (iter->change_type() == csync::SyncChange::ACTION_ADD) {
952 if (existing_turl) { 952 if (existing_turl) {
953 NOTREACHED() << "Unexpected sync change state."; 953 NOTREACHED() << "Unexpected sync change state.";
954 error = sync_error_factory_->CreateAndUploadError( 954 error = sync_error_factory_->CreateAndUploadError(
955 FROM_HERE, 955 FROM_HERE,
956 "ProcessSyncChanges failed on ChangeType ACTION_ADD"); 956 "ProcessSyncChanges failed on ChangeType ACTION_ADD");
957 LOG(ERROR) << "Trying to add an existing TemplateURL."; 957 LOG(ERROR) << "Trying to add an existing TemplateURL.";
958 continue; 958 continue;
959 } 959 }
960 std::string guid = turl->sync_guid(); 960 std::string guid = turl->sync_guid();
961 if (!existing_keyword_turl || ResolveSyncKeywordConflict(turl.get(), 961 if (!existing_keyword_turl || ResolveSyncKeywordConflict(turl.get(),
962 existing_keyword_turl, &new_changes)) { 962 existing_keyword_turl, &new_changes)) {
963 // Force the local ID to kInvalidTemplateURLID so we can add it. 963 // Force the local ID to kInvalidTemplateURLID so we can add it.
964 TemplateURLData data(turl->data()); 964 TemplateURLData data(turl->data());
965 data.id = kInvalidTemplateURLID; 965 data.id = kInvalidTemplateURLID;
966 Add(new TemplateURL(profile_, data)); 966 Add(new TemplateURL(profile_, data));
967 967
968 // Possibly set the newly added |turl| as the default search provider. 968 // Possibly set the newly added |turl| as the default search provider.
969 SetDefaultSearchProviderIfNewlySynced(guid); 969 SetDefaultSearchProviderIfNewlySynced(guid);
970 } 970 }
971 } else if (iter->change_type() == SyncChange::ACTION_UPDATE) { 971 } else if (iter->change_type() == csync::SyncChange::ACTION_UPDATE) {
972 if (!existing_turl) { 972 if (!existing_turl) {
973 NOTREACHED() << "Unexpected sync change state."; 973 NOTREACHED() << "Unexpected sync change state.";
974 error = sync_error_factory_->CreateAndUploadError( 974 error = sync_error_factory_->CreateAndUploadError(
975 FROM_HERE, 975 FROM_HERE,
976 "ProcessSyncChanges failed on ChangeType ACTION_UPDATE"); 976 "ProcessSyncChanges failed on ChangeType ACTION_UPDATE");
977 LOG(ERROR) << "Trying to update a non-existent TemplateURL."; 977 LOG(ERROR) << "Trying to update a non-existent TemplateURL.";
978 continue; 978 continue;
979 } 979 }
980 // Possibly resolve a keyword conflict if they have the same keywords but 980 // Possibly resolve a keyword conflict if they have the same keywords but
981 // are not the same entry. 981 // are not the same entry.
(...skipping 21 matching lines...) Expand all
1003 // If something went wrong, we want to prematurely exit to avoid pushing 1003 // If something went wrong, we want to prematurely exit to avoid pushing
1004 // inconsistent data to Sync. We return the last error we received. 1004 // inconsistent data to Sync. We return the last error we received.
1005 if (error.IsSet()) 1005 if (error.IsSet())
1006 return error; 1006 return error;
1007 1007
1008 error = sync_processor_->ProcessSyncChanges(from_here, new_changes); 1008 error = sync_processor_->ProcessSyncChanges(from_here, new_changes);
1009 1009
1010 return error; 1010 return error;
1011 } 1011 }
1012 1012
1013 SyncError TemplateURLService::MergeDataAndStartSyncing( 1013 csync::SyncError TemplateURLService::MergeDataAndStartSyncing(
1014 syncable::ModelType type, 1014 syncable::ModelType type,
1015 const SyncDataList& initial_sync_data, 1015 const csync::SyncDataList& initial_sync_data,
1016 scoped_ptr<SyncChangeProcessor> sync_processor, 1016 scoped_ptr<csync::SyncChangeProcessor> sync_processor,
1017 scoped_ptr<SyncErrorFactory> sync_error_factory) { 1017 scoped_ptr<csync::SyncErrorFactory> sync_error_factory) {
1018 DCHECK(loaded_); 1018 DCHECK(loaded_);
1019 DCHECK_EQ(type, syncable::SEARCH_ENGINES); 1019 DCHECK_EQ(type, syncable::SEARCH_ENGINES);
1020 DCHECK(!sync_processor_.get()); 1020 DCHECK(!sync_processor_.get());
1021 DCHECK(sync_processor.get()); 1021 DCHECK(sync_processor.get());
1022 DCHECK(sync_error_factory.get()); 1022 DCHECK(sync_error_factory.get());
1023 sync_processor_ = sync_processor.Pass(); 1023 sync_processor_ = sync_processor.Pass();
1024 sync_error_factory_ = sync_error_factory.Pass(); 1024 sync_error_factory_ = sync_error_factory.Pass();
1025 1025
1026 // We just started syncing, so set our wait-for-default flag if we are 1026 // We just started syncing, so set our wait-for-default flag if we are
1027 // expecting a default from Sync. 1027 // expecting a default from Sync.
(...skipping 10 matching lines...) Expand all
1038 // We do a lot of calls to Add/Remove/ResetTemplateURL here, so ensure we 1038 // We do a lot of calls to Add/Remove/ResetTemplateURL here, so ensure we
1039 // don't step on our own toes. 1039 // don't step on our own toes.
1040 AutoReset<bool> processing_changes(&processing_syncer_changes_, true); 1040 AutoReset<bool> processing_changes(&processing_syncer_changes_, true);
1041 1041
1042 // We've started syncing, so set our origin member to the base Sync value. 1042 // We've started syncing, so set our origin member to the base Sync value.
1043 // As we move through Sync Code, we may set this to increasingly specific 1043 // As we move through Sync Code, we may set this to increasingly specific
1044 // origins so we can tell what exactly caused a DSP change. 1044 // origins so we can tell what exactly caused a DSP change.
1045 AutoReset<DefaultSearchChangeOrigin> change_origin(&dsp_change_origin_, 1045 AutoReset<DefaultSearchChangeOrigin> change_origin(&dsp_change_origin_,
1046 DSP_CHANGE_SYNC_UNINTENTIONAL); 1046 DSP_CHANGE_SYNC_UNINTENTIONAL);
1047 1047
1048 SyncChangeList new_changes; 1048 csync::SyncChangeList new_changes;
1049 1049
1050 // Build maps of our sync GUIDs to SyncData. 1050 // Build maps of our sync GUIDs to csync::SyncData.
1051 SyncDataMap local_data_map = CreateGUIDToSyncDataMap( 1051 SyncDataMap local_data_map = CreateGUIDToSyncDataMap(
1052 GetAllSyncData(syncable::SEARCH_ENGINES)); 1052 GetAllSyncData(syncable::SEARCH_ENGINES));
1053 SyncDataMap sync_data_map = CreateGUIDToSyncDataMap(initial_sync_data); 1053 SyncDataMap sync_data_map = CreateGUIDToSyncDataMap(initial_sync_data);
1054 1054
1055 for (SyncDataMap::const_iterator iter = sync_data_map.begin(); 1055 for (SyncDataMap::const_iterator iter = sync_data_map.begin();
1056 iter != sync_data_map.end(); ++iter) { 1056 iter != sync_data_map.end(); ++iter) {
1057 TemplateURL* local_turl = GetTemplateURLForGUID(iter->first); 1057 TemplateURL* local_turl = GetTemplateURLForGUID(iter->first);
1058 scoped_ptr<TemplateURL> sync_turl( 1058 scoped_ptr<TemplateURL> sync_turl(
1059 CreateTemplateURLFromTemplateURLAndSyncData(profile_, local_turl, 1059 CreateTemplateURLFromTemplateURLAndSyncData(profile_, local_turl,
1060 iter->second, &new_changes)); 1060 iter->second, &new_changes));
1061 if (!sync_turl.get()) 1061 if (!sync_turl.get())
1062 continue; 1062 continue;
1063 1063
1064 if (pre_sync_deletes_.find(sync_turl->sync_guid()) != 1064 if (pre_sync_deletes_.find(sync_turl->sync_guid()) !=
1065 pre_sync_deletes_.end()) { 1065 pre_sync_deletes_.end()) {
1066 // This entry was deleted before the initial sync began (possibly through 1066 // This entry was deleted before the initial sync began (possibly through
1067 // preprocessing in TemplateURLService's loading code). Ignore it and send 1067 // preprocessing in TemplateURLService's loading code). Ignore it and send
1068 // an ACTION_DELETE up to the server. 1068 // an ACTION_DELETE up to the server.
1069 new_changes.push_back(SyncChange(SyncChange::ACTION_DELETE, 1069 new_changes.push_back(csync::SyncChange(csync::SyncChange::ACTION_DELETE,
1070 iter->second)); 1070 iter->second));
1071 continue; 1071 continue;
1072 } 1072 }
1073 1073
1074 if (local_turl) { 1074 if (local_turl) {
1075 // This local search engine is already synced. If the timestamp differs 1075 // This local search engine is already synced. If the timestamp differs
1076 // from Sync, we need to update locally or to the cloud. Note that if the 1076 // from Sync, we need to update locally or to the cloud. Note that if the
1077 // timestamps are equal, we touch neither. 1077 // timestamps are equal, we touch neither.
1078 if (sync_turl->last_modified() > local_turl->last_modified()) { 1078 if (sync_turl->last_modified() > local_turl->last_modified()) {
1079 // We've received an update from Sync. We should replace all synced 1079 // We've received an update from Sync. We should replace all synced
1080 // fields in the local TemplateURL. Note that this includes the 1080 // fields in the local TemplateURL. Note that this includes the
1081 // TemplateURLID and the TemplateURL may have to be reparsed. This 1081 // TemplateURLID and the TemplateURL may have to be reparsed. This
1082 // also makes the local data's last_modified timestamp equal to Sync's, 1082 // also makes the local data's last_modified timestamp equal to Sync's,
1083 // avoiding an Update on the next MergeData call. 1083 // avoiding an Update on the next MergeData call.
1084 UIThreadSearchTermsData search_terms_data(local_turl->profile()); 1084 UIThreadSearchTermsData search_terms_data(local_turl->profile());
1085 if (UpdateNoNotify(local_turl, *sync_turl, search_terms_data)) 1085 if (UpdateNoNotify(local_turl, *sync_turl, search_terms_data))
1086 NotifyObservers(); 1086 NotifyObservers();
1087 } else if (sync_turl->last_modified() < local_turl->last_modified()) { 1087 } else if (sync_turl->last_modified() < local_turl->last_modified()) {
1088 // Otherwise, we know we have newer data, so update Sync with our 1088 // Otherwise, we know we have newer data, so update Sync with our
1089 // data fields. 1089 // data fields.
1090 new_changes.push_back(SyncChange(SyncChange::ACTION_UPDATE, 1090 new_changes.push_back(
1091 csync::SyncChange(csync::SyncChange::ACTION_UPDATE,
1091 local_data_map[local_turl->sync_guid()])); 1092 local_data_map[local_turl->sync_guid()]));
1092 } 1093 }
1093 local_data_map.erase(iter->first); 1094 local_data_map.erase(iter->first);
1094 } else { 1095 } else {
1095 // The search engine from the cloud has not been synced locally, but there 1096 // The search engine from the cloud has not been synced locally, but there
1096 // might be a local search engine that is a duplicate that needs to be 1097 // might be a local search engine that is a duplicate that needs to be
1097 // merged. 1098 // merged.
1098 TemplateURL* dupe_turl = FindDuplicateOfSyncTemplateURL(*sync_turl); 1099 TemplateURL* dupe_turl = FindDuplicateOfSyncTemplateURL(*sync_turl);
1099 if (dupe_turl) { 1100 if (dupe_turl) {
1100 // Merge duplicates and remove the processed local TURL from the map. 1101 // Merge duplicates and remove the processed local TURL from the map.
(...skipping 21 matching lines...) Expand all
1122 SetDefaultSearchProviderIfNewlySynced(guid); 1123 SetDefaultSearchProviderIfNewlySynced(guid);
1123 } 1124 }
1124 } 1125 }
1125 } 1126 }
1126 } 1127 }
1127 1128
1128 // The remaining SyncData in local_data_map should be everything that needs to 1129 // The remaining SyncData in local_data_map should be everything that needs to
1129 // be pushed as ADDs to sync. 1130 // be pushed as ADDs to sync.
1130 for (SyncDataMap::const_iterator iter = local_data_map.begin(); 1131 for (SyncDataMap::const_iterator iter = local_data_map.begin();
1131 iter != local_data_map.end(); ++iter) { 1132 iter != local_data_map.end(); ++iter) {
1132 new_changes.push_back(SyncChange(SyncChange::ACTION_ADD, iter->second)); 1133 new_changes.push_back(
1134 csync::SyncChange(csync::SyncChange::ACTION_ADD, iter->second));
1133 } 1135 }
1134 1136
1135 // Do some post-processing on the change list to ensure that we are sending 1137 // Do some post-processing on the change list to ensure that we are sending
1136 // valid changes to sync_processor_. 1138 // valid changes to sync_processor_.
1137 PruneSyncChanges(&sync_data_map, &new_changes); 1139 PruneSyncChanges(&sync_data_map, &new_changes);
1138 1140
1139 SyncError error = sync_processor_->ProcessSyncChanges(FROM_HERE, new_changes); 1141 csync::SyncError error =
1142 sync_processor_->ProcessSyncChanges(FROM_HERE, new_changes);
1140 if (error.IsSet()) 1143 if (error.IsSet())
1141 return error; 1144 return error;
1142 1145
1143 // The ACTION_DELETEs from this set are processed. Empty it so we don't try to 1146 // The ACTION_DELETEs from this set are processed. Empty it so we don't try to
1144 // reuse them on the next call to MergeDataAndStartSyncing. 1147 // reuse them on the next call to MergeDataAndStartSyncing.
1145 pre_sync_deletes_.clear(); 1148 pre_sync_deletes_.clear();
1146 1149
1147 models_associated_ = true; 1150 models_associated_ = true;
1148 return SyncError(); 1151 return csync::SyncError();
1149 } 1152 }
1150 1153
1151 void TemplateURLService::StopSyncing(syncable::ModelType type) { 1154 void TemplateURLService::StopSyncing(syncable::ModelType type) {
1152 DCHECK_EQ(type, syncable::SEARCH_ENGINES); 1155 DCHECK_EQ(type, syncable::SEARCH_ENGINES);
1153 models_associated_ = false; 1156 models_associated_ = false;
1154 sync_processor_.reset(); 1157 sync_processor_.reset();
1155 sync_error_factory_.reset(); 1158 sync_error_factory_.reset();
1156 } 1159 }
1157 1160
1158 void TemplateURLService::ProcessTemplateURLChange( 1161 void TemplateURLService::ProcessTemplateURLChange(
1159 const TemplateURL* turl, 1162 const TemplateURL* turl,
1160 SyncChange::SyncChangeType type) { 1163 csync::SyncChange::SyncChangeType type) {
1161 DCHECK_NE(type, SyncChange::ACTION_INVALID); 1164 DCHECK_NE(type, csync::SyncChange::ACTION_INVALID);
1162 DCHECK(turl); 1165 DCHECK(turl);
1163 1166
1164 if (!models_associated_) 1167 if (!models_associated_)
1165 return; // Not syncing. 1168 return; // Not syncing.
1166 1169
1167 if (processing_syncer_changes_) 1170 if (processing_syncer_changes_)
1168 return; // These are changes originating from us. Ignore. 1171 return; // These are changes originating from us. Ignore.
1169 1172
1170 // Avoid syncing Extension keywords. 1173 // Avoid syncing Extension keywords.
1171 // TODO(mpcomplete): If we allow editing extension keywords, then those should 1174 // TODO(mpcomplete): If we allow editing extension keywords, then those should
1172 // be persisted to disk and synced. 1175 // be persisted to disk and synced.
1173 if (turl->IsExtensionKeyword()) 1176 if (turl->IsExtensionKeyword())
1174 return; 1177 return;
1175 1178
1176 // Avoid syncing keywords managed by policy. 1179 // Avoid syncing keywords managed by policy.
1177 if (turl->created_by_policy()) 1180 if (turl->created_by_policy())
1178 return; 1181 return;
1179 1182
1180 SyncChangeList changes; 1183 csync::SyncChangeList changes;
1181 1184
1182 SyncData sync_data = CreateSyncDataFromTemplateURL(*turl); 1185 csync::SyncData sync_data = CreateSyncDataFromTemplateURL(*turl);
1183 changes.push_back(SyncChange(type, sync_data)); 1186 changes.push_back(csync::SyncChange(type, sync_data));
1184 1187
1185 sync_processor_->ProcessSyncChanges(FROM_HERE, changes); 1188 sync_processor_->ProcessSyncChanges(FROM_HERE, changes);
1186 } 1189 }
1187 1190
1188 // static 1191 // static
1189 SyncData TemplateURLService::CreateSyncDataFromTemplateURL( 1192 csync::SyncData TemplateURLService::CreateSyncDataFromTemplateURL(
1190 const TemplateURL& turl) { 1193 const TemplateURL& turl) {
1191 sync_pb::EntitySpecifics specifics; 1194 sync_pb::EntitySpecifics specifics;
1192 sync_pb::SearchEngineSpecifics* se_specifics = 1195 sync_pb::SearchEngineSpecifics* se_specifics =
1193 specifics.mutable_search_engine(); 1196 specifics.mutable_search_engine();
1194 se_specifics->set_short_name(UTF16ToUTF8(turl.short_name())); 1197 se_specifics->set_short_name(UTF16ToUTF8(turl.short_name()));
1195 se_specifics->set_keyword(UTF16ToUTF8(turl.keyword())); 1198 se_specifics->set_keyword(UTF16ToUTF8(turl.keyword()));
1196 se_specifics->set_favicon_url(turl.favicon_url().spec()); 1199 se_specifics->set_favicon_url(turl.favicon_url().spec());
1197 se_specifics->set_url(turl.url()); 1200 se_specifics->set_url(turl.url());
1198 se_specifics->set_safe_for_autoreplace(turl.safe_for_autoreplace()); 1201 se_specifics->set_safe_for_autoreplace(turl.safe_for_autoreplace());
1199 se_specifics->set_originating_url(turl.originating_url().spec()); 1202 se_specifics->set_originating_url(turl.originating_url().spec());
1200 se_specifics->set_date_created(turl.date_created().ToInternalValue()); 1203 se_specifics->set_date_created(turl.date_created().ToInternalValue());
1201 se_specifics->set_input_encodings(JoinString(turl.input_encodings(), ';')); 1204 se_specifics->set_input_encodings(JoinString(turl.input_encodings(), ';'));
1202 se_specifics->set_show_in_default_list(turl.show_in_default_list()); 1205 se_specifics->set_show_in_default_list(turl.show_in_default_list());
1203 se_specifics->set_suggestions_url(turl.suggestions_url()); 1206 se_specifics->set_suggestions_url(turl.suggestions_url());
1204 se_specifics->set_prepopulate_id(turl.prepopulate_id()); 1207 se_specifics->set_prepopulate_id(turl.prepopulate_id());
1205 se_specifics->set_instant_url(turl.instant_url()); 1208 se_specifics->set_instant_url(turl.instant_url());
1206 se_specifics->set_last_modified(turl.last_modified().ToInternalValue()); 1209 se_specifics->set_last_modified(turl.last_modified().ToInternalValue());
1207 se_specifics->set_sync_guid(turl.sync_guid()); 1210 se_specifics->set_sync_guid(turl.sync_guid());
1208 return SyncData::CreateLocalData(se_specifics->sync_guid(), 1211 return csync::SyncData::CreateLocalData(se_specifics->sync_guid(),
1209 se_specifics->keyword(), 1212 se_specifics->keyword(),
1210 specifics); 1213 specifics);
1211 } 1214 }
1212 1215
1213 // static 1216 // static
1214 TemplateURL* TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData( 1217 TemplateURL* TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData(
1215 Profile* profile, 1218 Profile* profile,
1216 TemplateURL* existing_turl, 1219 TemplateURL* existing_turl,
1217 const SyncData& sync_data, 1220 const csync::SyncData& sync_data,
1218 SyncChangeList* change_list) { 1221 csync::SyncChangeList* change_list) {
1219 DCHECK(change_list); 1222 DCHECK(change_list);
1220 1223
1221 sync_pb::SearchEngineSpecifics specifics = 1224 sync_pb::SearchEngineSpecifics specifics =
1222 sync_data.GetSpecifics().search_engine(); 1225 sync_data.GetSpecifics().search_engine();
1223 1226
1224 // Past bugs might have caused either of these fields to be empty. Just 1227 // Past bugs might have caused either of these fields to be empty. Just
1225 // delete this data off the server. 1228 // delete this data off the server.
1226 if (specifics.url().empty() || specifics.sync_guid().empty()) { 1229 if (specifics.url().empty() || specifics.sync_guid().empty()) {
1227 change_list->push_back(SyncChange(SyncChange::ACTION_DELETE, sync_data)); 1230 change_list->push_back(
1231 csync::SyncChange(csync::SyncChange::ACTION_DELETE, sync_data));
1228 return NULL; 1232 return NULL;
1229 } 1233 }
1230 1234
1231 TemplateURLData data(existing_turl ? 1235 TemplateURLData data(existing_turl ?
1232 existing_turl->data() : TemplateURLData()); 1236 existing_turl->data() : TemplateURLData());
1233 data.short_name = UTF8ToUTF16(specifics.short_name()); 1237 data.short_name = UTF8ToUTF16(specifics.short_name());
1234 data.originating_url = GURL(specifics.originating_url()); 1238 data.originating_url = GURL(specifics.originating_url());
1235 string16 keyword(UTF8ToUTF16(specifics.keyword())); 1239 string16 keyword(UTF8ToUTF16(specifics.keyword()));
1236 // NOTE: Once this code has shipped in a couple of stable releases, we can 1240 // NOTE: Once this code has shipped in a couple of stable releases, we can
1237 // probably remove the migration portion, comment out the 1241 // probably remove the migration portion, comment out the
(...skipping 14 matching lines...) Expand all
1252 base::SplitString(specifics.input_encodings(), ';', &data.input_encodings); 1256 base::SplitString(specifics.input_encodings(), ';', &data.input_encodings);
1253 data.date_created = base::Time::FromInternalValue(specifics.date_created()); 1257 data.date_created = base::Time::FromInternalValue(specifics.date_created());
1254 data.last_modified = base::Time::FromInternalValue(specifics.last_modified()); 1258 data.last_modified = base::Time::FromInternalValue(specifics.last_modified());
1255 data.prepopulate_id = specifics.prepopulate_id(); 1259 data.prepopulate_id = specifics.prepopulate_id();
1256 data.sync_guid = specifics.sync_guid(); 1260 data.sync_guid = specifics.sync_guid();
1257 1261
1258 TemplateURL* turl = new TemplateURL(profile, data); 1262 TemplateURL* turl = new TemplateURL(profile, data);
1259 DCHECK(!turl->IsExtensionKeyword()); 1263 DCHECK(!turl->IsExtensionKeyword());
1260 if (reset_keyword) { 1264 if (reset_keyword) {
1261 turl->ResetKeywordIfNecessary(true); 1265 turl->ResetKeywordIfNecessary(true);
1262 SyncData sync_data = CreateSyncDataFromTemplateURL(*turl); 1266 csync::SyncData sync_data = CreateSyncDataFromTemplateURL(*turl);
1263 change_list->push_back(SyncChange(SyncChange::ACTION_UPDATE, sync_data)); 1267 change_list->push_back(
1268 csync::SyncChange(csync::SyncChange::ACTION_UPDATE, sync_data));
1264 } else if (turl->IsGoogleSearchURLWithReplaceableKeyword()) { 1269 } else if (turl->IsGoogleSearchURLWithReplaceableKeyword()) {
1265 if (!existing_turl) { 1270 if (!existing_turl) {
1266 // We're adding a new TemplateURL that uses the Google base URL, so set 1271 // We're adding a new TemplateURL that uses the Google base URL, so set
1267 // its keyword appropriately for the local environment. 1272 // its keyword appropriately for the local environment.
1268 turl->ResetKeywordIfNecessary(false); 1273 turl->ResetKeywordIfNecessary(false);
1269 } else if (existing_turl->IsGoogleSearchURLWithReplaceableKeyword()) { 1274 } else if (existing_turl->IsGoogleSearchURLWithReplaceableKeyword()) {
1270 // Ignore keyword changes triggered by the Google base URL changing on 1275 // Ignore keyword changes triggered by the Google base URL changing on
1271 // another client. If the base URL changes in this client as well, we'll 1276 // another client. If the base URL changes in this client as well, we'll
1272 // pick that up separately at the appropriate time. Otherwise, changing 1277 // pick that up separately at the appropriate time. Otherwise, changing
1273 // the keyword here could result in having the wrong keyword for the local 1278 // the keyword here could result in having the wrong keyword for the local
1274 // environment. 1279 // environment.
1275 turl->data_.SetKeyword(existing_turl->keyword()); 1280 turl->data_.SetKeyword(existing_turl->keyword());
1276 } 1281 }
1277 } 1282 }
1278 1283
1279 return turl; 1284 return turl;
1280 } 1285 }
1281 1286
1282 // static 1287 // static
1283 SyncDataMap TemplateURLService::CreateGUIDToSyncDataMap( 1288 SyncDataMap TemplateURLService::CreateGUIDToSyncDataMap(
1284 const SyncDataList& sync_data) { 1289 const csync::SyncDataList& sync_data) {
1285 SyncDataMap data_map; 1290 SyncDataMap data_map;
1286 for (SyncDataList::const_iterator i(sync_data.begin()); i != sync_data.end(); 1291 for (csync::SyncDataList::const_iterator i(sync_data.begin());
1292 i != sync_data.end();
1287 ++i) 1293 ++i)
1288 data_map[i->GetSpecifics().search_engine().sync_guid()] = *i; 1294 data_map[i->GetSpecifics().search_engine().sync_guid()] = *i;
1289 return data_map; 1295 return data_map;
1290 } 1296 }
1291 1297
1292 void TemplateURLService::SetKeywordSearchTermsForURL(const TemplateURL* t_url, 1298 void TemplateURLService::SetKeywordSearchTermsForURL(const TemplateURL* t_url,
1293 const GURL& url, 1299 const GURL& url,
1294 const string16& term) { 1300 const string16& term) {
1295 HistoryService* history = profile_ ? 1301 HistoryService* history = profile_ ?
1296 HistoryServiceFactory::GetForProfile(profile_, 1302 HistoryServiceFactory::GetForProfile(profile_,
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
1708 } 1714 }
1709 } 1715 }
1710 } 1716 }
1711 if (!existing_turl->sync_guid().empty()) 1717 if (!existing_turl->sync_guid().empty())
1712 guid_to_template_map_[existing_turl->sync_guid()] = existing_turl; 1718 guid_to_template_map_[existing_turl->sync_guid()] = existing_turl;
1713 1719
1714 if (service_.get()) 1720 if (service_.get())
1715 service_->UpdateKeyword(existing_turl->data()); 1721 service_->UpdateKeyword(existing_turl->data());
1716 1722
1717 // Inform sync of the update. 1723 // Inform sync of the update.
1718 ProcessTemplateURLChange(existing_turl, SyncChange::ACTION_UPDATE); 1724 ProcessTemplateURLChange(existing_turl, csync::SyncChange::ACTION_UPDATE);
1719 1725
1720 if (default_search_provider_ == existing_turl) { 1726 if (default_search_provider_ == existing_turl) {
1721 bool success = SetDefaultSearchProviderNoNotify(existing_turl); 1727 bool success = SetDefaultSearchProviderNoNotify(existing_turl);
1722 DCHECK(success); 1728 DCHECK(success);
1723 } 1729 }
1724 return true; 1730 return true;
1725 } 1731 }
1726 1732
1727 PrefService* TemplateURLService::GetPrefs() { 1733 PrefService* TemplateURLService::GetPrefs() {
1728 return profile_ ? profile_->GetPrefs() : NULL; 1734 return profile_ ? profile_->GetPrefs() : NULL;
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
2039 GetPrefs()->SetString(prefs::kSyncedDefaultSearchProviderGUID, 2045 GetPrefs()->SetString(prefs::kSyncedDefaultSearchProviderGUID,
2040 url->sync_guid()); 2046 url->sync_guid());
2041 } 2047 }
2042 } 2048 }
2043 2049
2044 if (service_.get()) 2050 if (service_.get())
2045 service_->SetDefaultSearchProvider(url); 2051 service_->SetDefaultSearchProvider(url);
2046 2052
2047 // Inform sync the change to the show_in_default_list flag. 2053 // Inform sync the change to the show_in_default_list flag.
2048 if (url) 2054 if (url)
2049 ProcessTemplateURLChange(url, SyncChange::ACTION_UPDATE); 2055 ProcessTemplateURLChange(url, csync::SyncChange::ACTION_UPDATE);
2050 return true; 2056 return true;
2051 } 2057 }
2052 2058
2053 bool TemplateURLService::AddNoNotify(TemplateURL* template_url, 2059 bool TemplateURLService::AddNoNotify(TemplateURL* template_url,
2054 bool newly_adding) { 2060 bool newly_adding) {
2055 DCHECK(template_url); 2061 DCHECK(template_url);
2056 2062
2057 if (newly_adding) { 2063 if (newly_adding) {
2058 DCHECK_EQ(kInvalidTemplateURLID, template_url->id()); 2064 DCHECK_EQ(kInvalidTemplateURLID, template_url->id());
2059 DCHECK(std::find(template_urls_.begin(), template_urls_.end(), 2065 DCHECK(std::find(template_urls_.begin(), template_urls_.end(),
(...skipping 28 matching lines...) Expand all
2088 if (newly_adding) { 2094 if (newly_adding) {
2089 // Don't persist extension keywords to disk. They'll get re-added on each 2095 // Don't persist extension keywords to disk. They'll get re-added on each
2090 // launch as the extensions are loaded. 2096 // launch as the extensions are loaded.
2091 // TODO(mpcomplete): If we allow editing extension keywords, then those 2097 // TODO(mpcomplete): If we allow editing extension keywords, then those
2092 // should be persisted to disk and synced. 2098 // should be persisted to disk and synced.
2093 if (service_.get() && !template_url->IsExtensionKeyword()) 2099 if (service_.get() && !template_url->IsExtensionKeyword())
2094 service_->AddKeyword(template_url->data()); 2100 service_->AddKeyword(template_url->data());
2095 2101
2096 // Inform sync of the addition. Note that this will assign a GUID to 2102 // Inform sync of the addition. Note that this will assign a GUID to
2097 // template_url and add it to the guid_to_template_map_. 2103 // template_url and add it to the guid_to_template_map_.
2098 ProcessTemplateURLChange(template_url, SyncChange::ACTION_ADD); 2104 ProcessTemplateURLChange(template_url, csync::SyncChange::ACTION_ADD);
2099 } 2105 }
2100 2106
2101 return true; 2107 return true;
2102 } 2108 }
2103 2109
2104 void TemplateURLService::RemoveNoNotify(TemplateURL* template_url) { 2110 void TemplateURLService::RemoveNoNotify(TemplateURL* template_url) {
2105 TemplateURLVector::iterator i = 2111 TemplateURLVector::iterator i =
2106 std::find(template_urls_.begin(), template_urls_.end(), template_url); 2112 std::find(template_urls_.begin(), template_urls_.end(), template_url);
2107 if (i == template_urls_.end()) 2113 if (i == template_urls_.end())
2108 return; 2114 return;
2109 2115
2110 if (template_url == default_search_provider_) { 2116 if (template_url == default_search_provider_) {
2111 // Should never delete the default search provider. 2117 // Should never delete the default search provider.
2112 NOTREACHED(); 2118 NOTREACHED();
2113 return; 2119 return;
2114 } 2120 }
2115 2121
2116 RemoveFromMaps(template_url); 2122 RemoveFromMaps(template_url);
2117 2123
2118 // Remove it from the vector containing all TemplateURLs. 2124 // Remove it from the vector containing all TemplateURLs.
2119 template_urls_.erase(i); 2125 template_urls_.erase(i);
2120 2126
2121 // Extension keywords are not persisted. 2127 // Extension keywords are not persisted.
2122 // TODO(mpcomplete): If we allow editing extension keywords, then those should 2128 // TODO(mpcomplete): If we allow editing extension keywords, then those should
2123 // be persisted to disk and synced. 2129 // be persisted to disk and synced.
2124 if (service_.get() && !template_url->IsExtensionKeyword()) 2130 if (service_.get() && !template_url->IsExtensionKeyword())
2125 service_->RemoveKeyword(template_url->id()); 2131 service_->RemoveKeyword(template_url->id());
2126 2132
2127 // Inform sync of the deletion. 2133 // Inform sync of the deletion.
2128 ProcessTemplateURLChange(template_url, SyncChange::ACTION_DELETE); 2134 ProcessTemplateURLChange(template_url, csync::SyncChange::ACTION_DELETE);
2129 2135
2130 if (profile_) { 2136 if (profile_) {
2131 content::Source<Profile> source(profile_); 2137 content::Source<Profile> source(profile_);
2132 TemplateURLID id = template_url->id(); 2138 TemplateURLID id = template_url->id();
2133 content::NotificationService::current()->Notify( 2139 content::NotificationService::current()->Notify(
2134 chrome::NOTIFICATION_TEMPLATE_URL_REMOVED, 2140 chrome::NOTIFICATION_TEMPLATE_URL_REMOVED,
2135 source, 2141 source,
2136 content::Details<TemplateURLID>(&id)); 2142 content::Details<TemplateURLID>(&id));
2137 } 2143 }
2138 2144
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
2230 do { 2236 do {
2231 keyword_candidate.append(ASCIIToUTF16("_")); 2237 keyword_candidate.append(ASCIIToUTF16("_"));
2232 } while (GetTemplateURLForKeyword(keyword_candidate)); 2238 } while (GetTemplateURLForKeyword(keyword_candidate));
2233 2239
2234 return keyword_candidate; 2240 return keyword_candidate;
2235 } 2241 }
2236 2242
2237 bool TemplateURLService::ResolveSyncKeywordConflict( 2243 bool TemplateURLService::ResolveSyncKeywordConflict(
2238 TemplateURL* sync_turl, 2244 TemplateURL* sync_turl,
2239 TemplateURL* local_turl, 2245 TemplateURL* local_turl,
2240 SyncChangeList* change_list) { 2246 csync::SyncChangeList* change_list) {
2241 DCHECK(loaded_); 2247 DCHECK(loaded_);
2242 DCHECK(sync_turl); 2248 DCHECK(sync_turl);
2243 DCHECK(local_turl); 2249 DCHECK(local_turl);
2244 DCHECK(sync_turl->sync_guid() != local_turl->sync_guid()); 2250 DCHECK(sync_turl->sync_guid() != local_turl->sync_guid());
2245 DCHECK(!local_turl->IsExtensionKeyword()); 2251 DCHECK(!local_turl->IsExtensionKeyword());
2246 DCHECK(change_list); 2252 DCHECK(change_list);
2247 2253
2248 const bool local_is_better = 2254 const bool local_is_better =
2249 (local_turl->last_modified() > sync_turl->last_modified()) || 2255 (local_turl->last_modified() > sync_turl->last_modified()) ||
2250 local_turl->created_by_policy() || 2256 local_turl->created_by_policy() ||
2251 (local_turl == GetDefaultSearchProvider()); 2257 (local_turl == GetDefaultSearchProvider());
2252 const bool can_replace_local = CanReplace(local_turl); 2258 const bool can_replace_local = CanReplace(local_turl);
2253 if (CanReplace(sync_turl) && (local_is_better || !can_replace_local)) { 2259 if (CanReplace(sync_turl) && (local_is_better || !can_replace_local)) {
2254 SyncData sync_data = CreateSyncDataFromTemplateURL(*sync_turl); 2260 csync::SyncData sync_data = CreateSyncDataFromTemplateURL(*sync_turl);
2255 change_list->push_back(SyncChange(SyncChange::ACTION_DELETE, sync_data)); 2261 change_list->push_back(
2262 csync::SyncChange(csync::SyncChange::ACTION_DELETE, sync_data));
2256 return false; 2263 return false;
2257 } 2264 }
2258 if (can_replace_local) { 2265 if (can_replace_local) {
2259 // Since we're processing sync changes, the upcoming Remove() won't generate 2266 // Since we're processing sync changes, the upcoming Remove() won't generate
2260 // an ACTION_DELETE. We need to do it manually to keep the server in sync 2267 // an ACTION_DELETE. We need to do it manually to keep the server in sync
2261 // with us. Note that if we're being called from 2268 // with us. Note that if we're being called from
2262 // MergeDataAndStartSyncing(), and this TemplateURL was pre-existing rather 2269 // MergeDataAndStartSyncing(), and this TemplateURL was pre-existing rather
2263 // than having just been brought down, then this is wrong, because the 2270 // than having just been brought down, then this is wrong, because the
2264 // server doesn't yet know about this entity; but in this case, 2271 // server doesn't yet know about this entity; but in this case,
2265 // PruneSyncChanges() will prune out the ACTION_DELETE we create here. 2272 // PruneSyncChanges() will prune out the ACTION_DELETE we create here.
2266 SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); 2273 csync::SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl);
2267 change_list->push_back(SyncChange(SyncChange::ACTION_DELETE, sync_data)); 2274 change_list->push_back(
2275 csync::SyncChange(csync::SyncChange::ACTION_DELETE, sync_data));
2268 Remove(local_turl); 2276 Remove(local_turl);
2269 } else if (local_is_better) { 2277 } else if (local_is_better) {
2270 string16 new_keyword = UniquifyKeyword(*sync_turl); 2278 string16 new_keyword = UniquifyKeyword(*sync_turl);
2271 DCHECK(!GetTemplateURLForKeyword(new_keyword)); 2279 DCHECK(!GetTemplateURLForKeyword(new_keyword));
2272 sync_turl->data_.SetKeyword(new_keyword); 2280 sync_turl->data_.SetKeyword(new_keyword);
2273 // If we update the cloud TURL, we need to push an update back to sync 2281 // If we update the cloud TURL, we need to push an update back to sync
2274 // informing it that something has changed. 2282 // informing it that something has changed.
2275 SyncData sync_data = CreateSyncDataFromTemplateURL(*sync_turl); 2283 csync::SyncData sync_data = CreateSyncDataFromTemplateURL(*sync_turl);
2276 change_list->push_back(SyncChange(SyncChange::ACTION_UPDATE, sync_data)); 2284 change_list->push_back(
2285 csync::SyncChange(csync::SyncChange::ACTION_UPDATE, sync_data));
2277 } else { 2286 } else {
2278 string16 new_keyword = UniquifyKeyword(*local_turl); 2287 string16 new_keyword = UniquifyKeyword(*local_turl);
2279 TemplateURLData data(local_turl->data()); 2288 TemplateURLData data(local_turl->data());
2280 data.SetKeyword(new_keyword); 2289 data.SetKeyword(new_keyword);
2281 TemplateURL new_turl(local_turl->profile(), data); 2290 TemplateURL new_turl(local_turl->profile(), data);
2282 UIThreadSearchTermsData search_terms_data(local_turl->profile()); 2291 UIThreadSearchTermsData search_terms_data(local_turl->profile());
2283 if (UpdateNoNotify(local_turl, new_turl, search_terms_data)) 2292 if (UpdateNoNotify(local_turl, new_turl, search_terms_data))
2284 NotifyObservers(); 2293 NotifyObservers();
2285 // Since we're processing sync changes, the UpdateNoNotify() above didn't 2294 // Since we're processing sync changes, the UpdateNoNotify() above didn't
2286 // generate an ACTION_UPDATE. We need to do it manually to keep the server 2295 // generate an ACTION_UPDATE. We need to do it manually to keep the server
2287 // in sync with us. Note that if we're being called from 2296 // in sync with us. Note that if we're being called from
2288 // MergeDataAndStartSyncing(), and this TemplateURL was pre-existing rather 2297 // MergeDataAndStartSyncing(), and this TemplateURL was pre-existing rather
2289 // than having just been brought down, then this is wrong, because the 2298 // than having just been brought down, then this is wrong, because the
2290 // server won't know about this entity until it processes the ACTION_ADD our 2299 // server won't know about this entity until it processes the ACTION_ADD our
2291 // caller will later generate; but in this case, PruneSyncChanges() will 2300 // caller will later generate; but in this case, PruneSyncChanges() will
2292 // prune out the ACTION_UPDATE we create here. 2301 // prune out the ACTION_UPDATE we create here.
2293 SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); 2302 csync::SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl);
2294 change_list->push_back(SyncChange(SyncChange::ACTION_UPDATE, sync_data)); 2303 change_list->push_back(
2304 csync::SyncChange(csync::SyncChange::ACTION_UPDATE, sync_data));
2295 } 2305 }
2296 return true; 2306 return true;
2297 } 2307 }
2298 2308
2299 TemplateURL* TemplateURLService::FindDuplicateOfSyncTemplateURL( 2309 TemplateURL* TemplateURLService::FindDuplicateOfSyncTemplateURL(
2300 const TemplateURL& sync_turl) { 2310 const TemplateURL& sync_turl) {
2301 TemplateURL* existing_turl = GetTemplateURLForKeyword(sync_turl.keyword()); 2311 TemplateURL* existing_turl = GetTemplateURLForKeyword(sync_turl.keyword());
2302 return existing_turl && (existing_turl->url() == sync_turl.url()) ? 2312 return existing_turl && (existing_turl->url() == sync_turl.url()) ?
2303 existing_turl : NULL; 2313 existing_turl : NULL;
2304 } 2314 }
2305 2315
2306 void TemplateURLService::MergeSyncAndLocalURLDuplicates( 2316 void TemplateURLService::MergeSyncAndLocalURLDuplicates(
2307 TemplateURL* sync_turl, 2317 TemplateURL* sync_turl,
2308 TemplateURL* local_turl, 2318 TemplateURL* local_turl,
2309 SyncChangeList* change_list) { 2319 csync::SyncChangeList* change_list) {
2310 DCHECK(loaded_); 2320 DCHECK(loaded_);
2311 DCHECK(sync_turl); 2321 DCHECK(sync_turl);
2312 DCHECK(local_turl); 2322 DCHECK(local_turl);
2313 DCHECK(change_list); 2323 DCHECK(change_list);
2314 scoped_ptr<TemplateURL> scoped_sync_turl(sync_turl); 2324 scoped_ptr<TemplateURL> scoped_sync_turl(sync_turl);
2315 if (sync_turl->last_modified() > local_turl->last_modified()) { 2325 if (sync_turl->last_modified() > local_turl->last_modified()) {
2316 // Fully replace local_url with Sync's copy. Note that because use Add 2326 // Fully replace local_url with Sync's copy. Note that because use Add
2317 // rather than ResetTemplateURL, |sync_url| is added with a fresh 2327 // rather than ResetTemplateURL, |sync_url| is added with a fresh
2318 // TemplateURLID. We don't need to sync the new ID back to the server since 2328 // TemplateURLID. We don't need to sync the new ID back to the server since
2319 // it's only relevant locally. 2329 // it's only relevant locally.
2320 bool delete_default = (local_turl == GetDefaultSearchProvider()); 2330 bool delete_default = (local_turl == GetDefaultSearchProvider());
2321 DCHECK(!delete_default || !is_default_search_managed_); 2331 DCHECK(!delete_default || !is_default_search_managed_);
2322 if (delete_default) 2332 if (delete_default)
2323 default_search_provider_ = NULL; 2333 default_search_provider_ = NULL;
2324 2334
2325 // See comments in ResolveSyncKeywordConflict() regarding generating an 2335 // See comments in ResolveSyncKeywordConflict() regarding generating an
2326 // ACTION_DELETE manually since Remove() won't do it. 2336 // ACTION_DELETE manually since Remove() won't do it.
2327 SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); 2337 csync::SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl);
2328 change_list->push_back(SyncChange(SyncChange::ACTION_DELETE, sync_data)); 2338 change_list->push_back(
2339 csync::SyncChange(csync::SyncChange::ACTION_DELETE, sync_data));
2329 Remove(local_turl); 2340 Remove(local_turl);
2330 2341
2331 // Force the local ID to kInvalidTemplateURLID so we can add it. 2342 // Force the local ID to kInvalidTemplateURLID so we can add it.
2332 sync_turl->data_.id = kInvalidTemplateURLID; 2343 sync_turl->data_.id = kInvalidTemplateURLID;
2333 Add(scoped_sync_turl.release()); 2344 Add(scoped_sync_turl.release());
2334 if (delete_default) 2345 if (delete_default)
2335 SetDefaultSearchProvider(sync_turl); 2346 SetDefaultSearchProvider(sync_turl);
2336 } else { 2347 } else {
2337 // Change the local TURL's GUID to the server's GUID and push an update to 2348 // Change the local TURL's GUID to the server's GUID and push an update to
2338 // Sync. This ensures that the rest of local_url's fields are sync'd up to 2349 // Sync. This ensures that the rest of local_url's fields are sync'd up to
2339 // the server, and the next time local_url is synced, it is recognized by 2350 // the server, and the next time local_url is synced, it is recognized by
2340 // having the same GUID. 2351 // having the same GUID.
2341 ResetTemplateURLGUID(local_turl, sync_turl->sync_guid()); 2352 ResetTemplateURLGUID(local_turl, sync_turl->sync_guid());
2342 SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); 2353 csync::SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl);
2343 change_list->push_back(SyncChange(SyncChange::ACTION_UPDATE, sync_data)); 2354 change_list->push_back(
2355 csync::SyncChange(csync::SyncChange::ACTION_UPDATE, sync_data));
2344 } 2356 }
2345 } 2357 }
2346 2358
2347 void TemplateURLService::SetDefaultSearchProviderIfNewlySynced( 2359 void TemplateURLService::SetDefaultSearchProviderIfNewlySynced(
2348 const std::string& guid) { 2360 const std::string& guid) {
2349 // If we're not syncing or if default search is managed by policy, ignore. 2361 // If we're not syncing or if default search is managed by policy, ignore.
2350 if (!sync_processor_.get() || is_default_search_managed_) 2362 if (!sync_processor_.get() || is_default_search_managed_)
2351 return; 2363 return;
2352 2364
2353 PrefService* prefs = GetPrefs(); 2365 PrefService* prefs = GetPrefs();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2386 // TODO(mpcomplete): If we allow editing extension keywords, then those 2398 // TODO(mpcomplete): If we allow editing extension keywords, then those
2387 // should be persisted to disk and synced. 2399 // should be persisted to disk and synced.
2388 if (template_url->sync_guid().empty() && 2400 if (template_url->sync_guid().empty() &&
2389 !template_url->IsExtensionKeyword()) { 2401 !template_url->IsExtensionKeyword()) {
2390 template_url->data_.sync_guid = base::GenerateGUID(); 2402 template_url->data_.sync_guid = base::GenerateGUID();
2391 if (service_.get()) 2403 if (service_.get())
2392 service_->UpdateKeyword(template_url->data()); 2404 service_->UpdateKeyword(template_url->data());
2393 } 2405 }
2394 } 2406 }
2395 } 2407 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698