diff options
author | zea@chromium.org <zea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-10 23:46:45 +0000 |
---|---|---|
committer | zea@chromium.org <zea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-10 23:46:45 +0000 |
commit | 786009d47328ac4672c86e5a3964d56fc36b3d74 (patch) | |
tree | e4994d54c0fac1f093200f08edeea4d1f4fc4170 | |
parent | 99800f2ad6f7518143b15092f711670253fbcfc8 (diff) | |
download | chromium_src-786009d47328ac4672c86e5a3964d56fc36b3d74.zip chromium_src-786009d47328ac4672c86e5a3964d56fc36b3d74.tar.gz chromium_src-786009d47328ac4672c86e5a3964d56fc36b3d74.tar.bz2 |
[Sync] Add location parameter to SyncChange in Sync API.
SyncChanges now require the location they were created as a parameter. This
is then used in the case that the change violates and invariant. We display
the location and type of erroneous change in about:sync, in addition to
disabling the offending datatype.
TBR=kalman@chromium.org, mnissler@chromium.org, isherman@chromium.org
BUG=135108
TEST=unit_tests
Review URL: https://chromiumcodereview.appspot.com/10766016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@145993 0039d316-1c4b-4281-b951-d872f2087c98
19 files changed, 193 insertions, 90 deletions
diff --git a/chrome/browser/extensions/app_notification_manager.cc b/chrome/browser/extensions/app_notification_manager.cc index 6b1566a..fd40bda 100644 --- a/chrome/browser/extensions/app_notification_manager.cc +++ b/chrome/browser/extensions/app_notification_manager.cc @@ -338,7 +338,9 @@ syncer::SyncError AppNotificationManager::MergeDataAndStartSyncing( for (SyncDataMap::const_iterator iter = local_data_map.begin(); iter != local_data_map.end(); ++iter) { new_changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_ADD, iter->second)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + iter->second)); } syncer::SyncError error; @@ -494,7 +496,9 @@ void AppNotificationManager::SyncAddChange(const AppNotification& notif) { syncer::SyncChangeList changes; syncer::SyncData sync_data = CreateSyncDataFromNotification(notif); changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_ADD, sync_data)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + sync_data)); sync_processor_->ProcessSyncChanges(FROM_HERE, changes); } @@ -509,7 +513,9 @@ void AppNotificationManager::SyncRemoveChange(const AppNotification& notif) { syncer::SyncChangeList changes; syncer::SyncData sync_data = CreateSyncDataFromNotification(notif); changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, sync_data)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + sync_data)); sync_processor_->ProcessSyncChanges(FROM_HERE, changes); } @@ -529,6 +535,7 @@ void AppNotificationManager::SyncClearAllChange( if (notif.is_local()) continue; changes.push_back(syncer::SyncChange( + FROM_HERE, syncer::SyncChange::ACTION_DELETE, CreateSyncDataFromNotification(notif))); } diff --git a/chrome/browser/extensions/app_notification_manager_sync_unittest.cc b/chrome/browser/extensions/app_notification_manager_sync_unittest.cc index f032b82..9b58a9a 100644 --- a/chrome/browser/extensions/app_notification_manager_sync_unittest.cc +++ b/chrome/browser/extensions/app_notification_manager_sync_unittest.cc @@ -206,7 +206,9 @@ class AppNotificationManagerSyncTest : public testing::Test { // Take control of notif to clean it up after we create data out of it. scoped_ptr<AppNotification> scoped_notif(notif); return syncer::SyncChange( - type, AppNotificationManager::CreateSyncDataFromNotification(*notif)); + FROM_HERE, + type, + AppNotificationManager::CreateSyncDataFromNotification(*notif)); } void AssertSyncChange(const syncer::SyncChange& change, diff --git a/chrome/browser/extensions/app_sync_bundle.cc b/chrome/browser/extensions/app_sync_bundle.cc index af26282..e5cc6a1 100644 --- a/chrome/browser/extensions/app_sync_bundle.cc +++ b/chrome/browser/extensions/app_sync_bundle.cc @@ -60,10 +60,14 @@ void AppSyncBundle::ProcessDeletion(std::string extension_id, syncer::SyncChange AppSyncBundle::CreateSyncChange( const syncer::SyncData& sync_data) { if (HasExtensionId(sync_data.GetTag())) { - return syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, sync_data); + return syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); } else { AddApp(sync_data.GetTag()); - return syncer::SyncChange(syncer::SyncChange::ACTION_ADD, sync_data); + return syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + sync_data); } } diff --git a/chrome/browser/extensions/app_sync_data.cc b/chrome/browser/extensions/app_sync_data.cc index babdedc..d4d24b5 100644 --- a/chrome/browser/extensions/app_sync_data.cc +++ b/chrome/browser/extensions/app_sync_data.cc @@ -52,7 +52,7 @@ syncer::SyncData AppSyncData::GetSyncData() const { syncer::SyncChange AppSyncData::GetSyncChange( syncer::SyncChange::SyncChangeType change_type) const { - return syncer::SyncChange(change_type, GetSyncData()); + return syncer::SyncChange(FROM_HERE, change_type, GetSyncData()); } void AppSyncData::PopulateAppSpecifics(sync_pb::AppSpecifics* specifics) const { diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index 219e011..5d51fbf 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc @@ -4360,7 +4360,9 @@ TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) { syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change(syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; @@ -4493,7 +4495,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataUninstall) { ext_specifics->set_version("1.0"); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change(syncer::SyncChange::ACTION_DELETE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; @@ -4535,8 +4539,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) { extension_specifics->set_enabled(true); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change( - syncer::SyncChange::ACTION_DELETE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; @@ -4549,8 +4554,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataWrongType) { extension_specifics->set_enabled(false); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change( - syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; @@ -4583,8 +4589,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { { syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change( - syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; service_->ProcessSyncChanges(FROM_HERE, list); @@ -4597,8 +4604,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { ext_specifics->set_incognito_enabled(true); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change( - syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; service_->ProcessSyncChanges(FROM_HERE, list); @@ -4611,8 +4619,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { ext_specifics->set_incognito_enabled(true); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change( - syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; service_->ProcessSyncChanges(FROM_HERE, list); @@ -4645,7 +4654,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataTerminatedExtension) { ext_specifics->set_incognito_enabled(true); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change(syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; @@ -4679,8 +4690,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) { service_->GetInstalledExtension(good_crx)->version()->GetString()); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change( - syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; @@ -4695,8 +4707,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) { ext_specifics->set_version("0.0.0.0"); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change( - syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; @@ -4709,8 +4722,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) { ext_specifics->set_version("9.9.9.9"); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change( - syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; @@ -4739,7 +4753,9 @@ TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) { ext_specifics->set_version("1.2.3.4"); syncer::SyncData sync_data = syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); - syncer::SyncChange sync_change(syncer::SyncChange::ACTION_UPDATE, sync_data); + syncer::SyncChange sync_change(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); syncer::SyncChangeList list(1); list[0] = sync_change; diff --git a/chrome/browser/extensions/extension_sync_bundle.cc b/chrome/browser/extensions/extension_sync_bundle.cc index 91c71bb..a9db2be 100644 --- a/chrome/browser/extensions/extension_sync_bundle.cc +++ b/chrome/browser/extensions/extension_sync_bundle.cc @@ -59,10 +59,14 @@ void ExtensionSyncBundle::ProcessDeletion( syncer::SyncChange ExtensionSyncBundle::CreateSyncChange( const syncer::SyncData& sync_data) { if (HasExtensionId(sync_data.GetTag())) { - return syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, sync_data); + return syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data); } else { AddExtension(sync_data.GetTag()); - return syncer::SyncChange(syncer::SyncChange::ACTION_ADD, sync_data); + return syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + sync_data); } } diff --git a/chrome/browser/extensions/extension_sync_data.cc b/chrome/browser/extensions/extension_sync_data.cc index d395b19..f9982ab 100644 --- a/chrome/browser/extensions/extension_sync_data.cc +++ b/chrome/browser/extensions/extension_sync_data.cc @@ -58,7 +58,7 @@ syncer::SyncData ExtensionSyncData::GetSyncData() const { syncer::SyncChange ExtensionSyncData::GetSyncChange( syncer::SyncChange::SyncChangeType change_type) const { - return syncer::SyncChange(change_type, GetSyncData()); + return syncer::SyncChange(FROM_HERE, change_type, GetSyncData()); } void ExtensionSyncData::PopulateExtensionSpecifics( diff --git a/chrome/browser/extensions/settings/settings_sync_util.cc b/chrome/browser/extensions/settings/settings_sync_util.cc index c3e46b7..5c6c28a 100644 --- a/chrome/browser/extensions/settings/settings_sync_util.cc +++ b/chrome/browser/extensions/settings/settings_sync_util.cc @@ -78,6 +78,7 @@ syncer::SyncChange CreateAdd( const Value& value, syncer::ModelType type) { return syncer::SyncChange( + FROM_HERE, syncer::SyncChange::ACTION_ADD, CreateData(extension_id, key, value, type)); } @@ -88,6 +89,7 @@ syncer::SyncChange CreateUpdate( const Value& value, syncer::ModelType type) { return syncer::SyncChange( + FROM_HERE, syncer::SyncChange::ACTION_UPDATE, CreateData(extension_id, key, value, type)); } @@ -98,6 +100,7 @@ syncer::SyncChange CreateDelete( syncer::ModelType type) { DictionaryValue no_value; return syncer::SyncChange( + FROM_HERE, syncer::SyncChange::ACTION_DELETE, CreateData(extension_id, key, no_value, type)); } diff --git a/chrome/browser/prefs/pref_model_associator.cc b/chrome/browser/prefs/pref_model_associator.cc index 0ed80e1..5edab25 100644 --- a/chrome/browser/prefs/pref_model_associator.cc +++ b/chrome/browser/prefs/pref_model_associator.cc @@ -80,7 +80,9 @@ void PrefModelAssociator::InitPrefAndAssociate( return; } sync_changes->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, sync_data)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data)); } } else if (pref->IsUserControlled()) { // The server does not know about this preference and should be added @@ -91,7 +93,9 @@ void PrefModelAssociator::InitPrefAndAssociate( return; } sync_changes->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_ADD, sync_data)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + sync_data)); } else { // This pref does not have a sync value but also does not have a user // controlled value (either it's a default value or it's policy controlled, @@ -428,7 +432,9 @@ void PrefModelAssociator::ProcessPrefChange(const std::string& name) { return; } changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, sync_data)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data)); } syncer::SyncError error = diff --git a/chrome/browser/search_engines/template_url_service.cc b/chrome/browser/search_engines/template_url_service.cc index 9b691252..10e0c70 100644 --- a/chrome/browser/search_engines/template_url_service.cc +++ b/chrome/browser/search_engines/template_url_service.cc @@ -1106,7 +1106,8 @@ syncer::SyncError TemplateURLService::MergeDataAndStartSyncing( // preprocessing in TemplateURLService's loading code). Ignore it and send // an ACTION_DELETE up to the server. new_changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, iter->second)); continue; } @@ -1128,8 +1129,9 @@ syncer::SyncError TemplateURLService::MergeDataAndStartSyncing( // Otherwise, we know we have newer data, so update Sync with our // data fields. new_changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, - local_data_map[local_turl->sync_guid()])); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + local_data_map[local_turl->sync_guid()])); } local_data_map.erase(iter->first); } else { @@ -1171,7 +1173,9 @@ syncer::SyncError TemplateURLService::MergeDataAndStartSyncing( for (SyncDataMap::const_iterator iter = local_data_map.begin(); iter != local_data_map.end(); ++iter) { new_changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_ADD, iter->second)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + iter->second)); } // Do some post-processing on the change list to ensure that we are sending @@ -1199,6 +1203,7 @@ void TemplateURLService::StopSyncing(syncer::ModelType type) { } void TemplateURLService::ProcessTemplateURLChange( + const tracked_objects::Location& from_here, const TemplateURL* turl, syncer::SyncChange::SyncChangeType type) { DCHECK_NE(type, syncer::SyncChange::ACTION_INVALID); @@ -1223,7 +1228,9 @@ void TemplateURLService::ProcessTemplateURLChange( syncer::SyncChangeList changes; syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*turl); - changes.push_back(syncer::SyncChange(type, sync_data)); + changes.push_back(syncer::SyncChange(from_here, + type, + sync_data)); sync_processor_->ProcessSyncChanges(FROM_HERE, changes); } @@ -1268,7 +1275,9 @@ TemplateURL* TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData( // delete this data off the server. if (specifics.url().empty() || specifics.sync_guid().empty()) { change_list->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, sync_data)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + sync_data)); return NULL; } @@ -1311,7 +1320,9 @@ TemplateURL* TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData( turl->ResetKeywordIfNecessary(true); syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*turl); change_list->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, sync_data)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data)); } else if (turl->IsGoogleSearchURLWithReplaceableKeyword()) { if (!existing_turl) { // We're adding a new TemplateURL that uses the Google base URL, so set @@ -1767,7 +1778,9 @@ bool TemplateURLService::UpdateNoNotify( service_->UpdateKeyword(existing_turl->data()); // Inform sync of the update. - ProcessTemplateURLChange(existing_turl, syncer::SyncChange::ACTION_UPDATE); + ProcessTemplateURLChange(FROM_HERE, + existing_turl, + syncer::SyncChange::ACTION_UPDATE); if (default_search_provider_ == existing_turl) { bool success = SetDefaultSearchProviderNoNotify(existing_turl); @@ -2098,7 +2111,9 @@ bool TemplateURLService::SetDefaultSearchProviderNoNotify(TemplateURL* url) { // Inform sync the change to the show_in_default_list flag. if (url) - ProcessTemplateURLChange(url, syncer::SyncChange::ACTION_UPDATE); + ProcessTemplateURLChange(FROM_HERE, + url, + syncer::SyncChange::ACTION_UPDATE); return true; } @@ -2147,7 +2162,9 @@ bool TemplateURLService::AddNoNotify(TemplateURL* template_url, // Inform sync of the addition. Note that this will assign a GUID to // template_url and add it to the guid_to_template_map_. - ProcessTemplateURLChange(template_url, syncer::SyncChange::ACTION_ADD); + ProcessTemplateURLChange(FROM_HERE, + template_url, + syncer::SyncChange::ACTION_ADD); } return true; @@ -2177,7 +2194,9 @@ void TemplateURLService::RemoveNoNotify(TemplateURL* template_url) { service_->RemoveKeyword(template_url->id()); // Inform sync of the deletion. - ProcessTemplateURLChange(template_url, syncer::SyncChange::ACTION_DELETE); + ProcessTemplateURLChange(FROM_HERE, + template_url, + syncer::SyncChange::ACTION_DELETE); if (profile_) { content::Source<Profile> source(profile_); @@ -2307,8 +2326,9 @@ bool TemplateURLService::ResolveSyncKeywordConflict( const bool can_replace_local = CanReplace(local_turl); if (CanReplace(sync_turl) && (local_is_better || !can_replace_local)) { syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*sync_turl); - change_list->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, sync_data)); + change_list->push_back(syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + sync_data)); return false; } if (can_replace_local) { @@ -2321,7 +2341,9 @@ bool TemplateURLService::ResolveSyncKeywordConflict( // PruneSyncChanges() will prune out the ACTION_DELETE we create here. syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); change_list->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, sync_data)); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + sync_data)); Remove(local_turl); } else if (local_is_better) { string16 new_keyword = UniquifyKeyword(*sync_turl, false); @@ -2330,8 +2352,9 @@ bool TemplateURLService::ResolveSyncKeywordConflict( // If we update the cloud TURL, we need to push an update back to sync // informing it that something has changed. syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*sync_turl); - change_list->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, sync_data)); + change_list->push_back(syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data)); } else { string16 new_keyword = UniquifyKeyword(*local_turl, false); TemplateURLData data(local_turl->data()); @@ -2349,8 +2372,9 @@ bool TemplateURLService::ResolveSyncKeywordConflict( // caller will later generate; but in this case, PruneSyncChanges() will // prune out the ACTION_UPDATE we create here. syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); - change_list->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, sync_data)); + change_list->push_back(syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data)); } return true; } @@ -2384,8 +2408,9 @@ void TemplateURLService::MergeSyncAndLocalURLDuplicates( // See comments in ResolveSyncKeywordConflict() regarding generating an // ACTION_DELETE manually since Remove() won't do it. syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); - change_list->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, sync_data)); + change_list->push_back(syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + sync_data)); Remove(local_turl); // Force the local ID to kInvalidTemplateURLID so we can add it. @@ -2400,8 +2425,9 @@ void TemplateURLService::MergeSyncAndLocalURLDuplicates( // having the same GUID. ResetTemplateURLGUID(local_turl, sync_turl->sync_guid()); syncer::SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); - change_list->push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, sync_data)); + change_list->push_back(syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + sync_data)); } } diff --git a/chrome/browser/search_engines/template_url_service.h b/chrome/browser/search_engines/template_url_service.h index 5976224..e7472d1 100644 --- a/chrome/browser/search_engines/template_url_service.h +++ b/chrome/browser/search_engines/template_url_service.h @@ -292,7 +292,8 @@ class TemplateURLService : public WebDataServiceConsumer, // This may send a new SyncChange to the cloud. If our model has not yet been // associated with Sync, or if this is triggered by a Sync change, then this // does nothing. - void ProcessTemplateURLChange(const TemplateURL* turl, + void ProcessTemplateURLChange(const tracked_objects::Location& from_here, + const TemplateURL* turl, syncer::SyncChange::SyncChangeType type); Profile* profile() const { return profile_; } diff --git a/chrome/browser/search_engines/template_url_service_sync_unittest.cc b/chrome/browser/search_engines/template_url_service_sync_unittest.cc index 7a09956..fd034ee 100644 --- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc +++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc @@ -331,7 +331,9 @@ syncer::SyncChange TemplateURLServiceSyncTest::CreateTestSyncChange( // We take control of the TemplateURL so make sure it's cleaned up after // we create data out of it. scoped_ptr<TemplateURL> scoped_turl(turl); - return syncer::SyncChange(type, + return syncer::SyncChange( + FROM_HERE, + type, TemplateURLService::CreateSyncDataFromTemplateURL(*scoped_turl)); } diff --git a/chrome/browser/sync/glue/generic_change_processor.cc b/chrome/browser/sync/glue/generic_change_processor.cc index 006db90..6f8c7aab 100644 --- a/chrome/browser/sync/glue/generic_change_processor.cc +++ b/chrome/browser/sync/glue/generic_change_processor.cc @@ -49,6 +49,7 @@ void GenericChangeProcessor::ApplyChangesFromSyncModel( if (it->action == syncer::ChangeRecord::ACTION_DELETE) { syncer_changes_.push_back( syncer::SyncChange( + FROM_HERE, syncer::SyncChange::ACTION_DELETE, syncer::SyncData::CreateRemoteData(it->id, it->specifics))); } else { @@ -65,9 +66,11 @@ void GenericChangeProcessor::ApplyChangesFromSyncModel( return; } syncer_changes_.push_back( - syncer::SyncChange(action, - syncer::SyncData::CreateRemoteData( - it->id, read_node.GetEntitySpecifics()))); + syncer::SyncChange( + FROM_HERE, + action, + syncer::SyncData::CreateRemoteData( + it->id, read_node.GetEntitySpecifics()))); } } } diff --git a/chrome/browser/webdata/autocomplete_syncable_service.cc b/chrome/browser/webdata/autocomplete_syncable_service.cc index 9992ba7..a28668a 100644 --- a/chrome/browser/webdata/autocomplete_syncable_service.cc +++ b/chrome/browser/webdata/autocomplete_syncable_service.cc @@ -157,8 +157,9 @@ syncer::SyncError AutocompleteSyncableService::MergeDataAndStartSyncing( for (AutocompleteEntryMap::iterator i = new_db_entries.begin(); i != new_db_entries.end(); ++i) { new_changes.push_back( - syncer::SyncChange( - i->second.first, CreateSyncData(*(i->second.second)))); + syncer::SyncChange(FROM_HERE, + i->second.first, + CreateSyncData(*(i->second.second)))); } if (ShouldCullSyncedData()) { @@ -415,16 +416,18 @@ void AutocompleteSyncableService::ActOnChanges( (change->type() == AutofillChange::ADD) ? syncer::SyncChange::ACTION_ADD : syncer::SyncChange::ACTION_UPDATE; - new_changes.push_back(syncer::SyncChange(change_type, - CreateSyncData(entry))); + new_changes.push_back(syncer::SyncChange(FROM_HERE, + change_type, + CreateSyncData(entry))); break; } case AutofillChange::REMOVE: { std::vector<base::Time> timestamps; AutofillEntry entry(change->key(), timestamps); new_changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, - CreateSyncData(entry))); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + CreateSyncData(entry))); break; } default: diff --git a/chrome/browser/webdata/autofill_profile_syncable_service.cc b/chrome/browser/webdata/autofill_profile_syncable_service.cc index 1eed62e..48291f5 100644 --- a/chrome/browser/webdata/autofill_profile_syncable_service.cc +++ b/chrome/browser/webdata/autofill_profile_syncable_service.cc @@ -140,15 +140,17 @@ syncer::SyncError AutofillProfileSyncableService::MergeDataAndStartSyncing( for (GUIDToProfileMap::iterator i = remaining_profiles.begin(); i != remaining_profiles.end(); ++i) { new_changes.push_back( - syncer::SyncChange( - syncer::SyncChange::ACTION_ADD, CreateData(*(i->second)))); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + CreateData(*(i->second)))); profiles_map_[i->first] = i->second; } for (size_t i = 0; i < bundle.profiles_to_sync_back.size(); ++i) { new_changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, - CreateData(*(bundle.profiles_to_sync_back[i])))); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + CreateData(*(bundle.profiles_to_sync_back[i])))); } syncer::SyncError error; @@ -434,8 +436,9 @@ void AutofillProfileSyncableService::ActOnChange( switch (change.type()) { case AutofillProfileChange::ADD: new_changes.push_back( - syncer::SyncChange( - syncer::SyncChange::ACTION_ADD, CreateData(*(change.profile())))); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + CreateData(*(change.profile())))); DCHECK(profiles_map_.find(change.profile()->guid()) == profiles_map_.end()); profiles_.push_back(new AutofillProfile(*(change.profile()))); @@ -447,14 +450,16 @@ void AutofillProfileSyncableService::ActOnChange( DCHECK(it != profiles_map_.end()); *(it->second) = *(change.profile()); new_changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_UPDATE, - CreateData(*(change.profile())))); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_UPDATE, + CreateData(*(change.profile())))); break; } case AutofillProfileChange::REMOVE: { AutofillProfile empty_profile(change.key()); new_changes.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_DELETE, CreateData(empty_profile))); profiles_map_.erase(change.key()); break; diff --git a/chrome/browser/webdata/autofill_profile_syncable_service_unittest.cc b/chrome/browser/webdata/autofill_profile_syncable_service_unittest.cc index 09088e7..5ffa190 100644 --- a/chrome/browser/webdata/autofill_profile_syncable_service_unittest.cc +++ b/chrome/browser/webdata/autofill_profile_syncable_service_unittest.cc @@ -145,9 +145,10 @@ TEST_F(AutofillProfileSyncableServiceTest, MergeDataAndStartSyncing) { syncer::SyncChangeList expected_change_list; expected_change_list.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_ADD, - AutofillProfileSyncableService::CreateData( - (*profiles_from_web_db.front())))); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + AutofillProfileSyncableService::CreateData( + (*profiles_from_web_db.front())))); AutofillProfileSyncableService::DataBundle expected_bundle; expected_bundle.profiles_to_add.push_back(&profile1); @@ -227,12 +228,15 @@ TEST_F(AutofillProfileSyncableServiceTest, ProcessSyncChanges) { AutofillProfile profile(guid_synced); profile.SetInfo(NAME_FIRST, UTF8ToUTF16("Jane")); change_list.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_ADD, - AutofillProfileSyncableService::CreateData(profile))); + syncer::SyncChange(FROM_HERE, + syncer::SyncChange::ACTION_ADD, + AutofillProfileSyncableService::CreateData(profile))); AutofillProfile empty_profile(guid_present); change_list.push_back( - syncer::SyncChange(syncer::SyncChange::ACTION_DELETE, - AutofillProfileSyncableService::CreateData(empty_profile))); + syncer::SyncChange( + FROM_HERE, + syncer::SyncChange::ACTION_DELETE, + AutofillProfileSyncableService::CreateData(empty_profile))); AutofillProfileSyncableService::DataBundle expected_bundle; expected_bundle.profiles_to_delete.push_back(guid_present); diff --git a/sync/api/sync_change.cc b/sync/api/sync_change.cc index 64da5b7..ee1cdea 100644 --- a/sync/api/sync_change.cc +++ b/sync/api/sync_change.cc @@ -11,8 +11,12 @@ namespace syncer { SyncChange::SyncChange() : change_type_(ACTION_INVALID) { } -SyncChange::SyncChange(SyncChangeType change_type, const SyncData& sync_data) - : change_type_(change_type), +SyncChange::SyncChange( + const tracked_objects::Location& from_here, + SyncChangeType change_type, + const SyncData& sync_data) + : location_(from_here), + change_type_(change_type), sync_data_(sync_data) { DCHECK(IsValid()); } @@ -66,8 +70,9 @@ std::string SyncChange::ChangeTypeToString(SyncChangeType change_type) { } std::string SyncChange::ToString() const { - return "{ changeType: " + ChangeTypeToString(change_type_) + - ", syncData: " + sync_data_.ToString() + "}"; + return "{ " + location_.ToString() + ", changeType: " + + ChangeTypeToString(change_type_) + ", syncData: " + + sync_data_.ToString() + "}"; } void PrintTo(const SyncChange& sync_change, std::ostream* os) { diff --git a/sync/api/sync_change.h b/sync/api/sync_change.h index 63a03d9..3cfb1d5 100644 --- a/sync/api/sync_change.h +++ b/sync/api/sync_change.h @@ -10,6 +10,7 @@ #include <string> #include <vector> +#include "base/location.h" #include "sync/api/sync_data.h" namespace syncer { @@ -31,7 +32,10 @@ class SyncChange { // Default constructor creates an invalid change. SyncChange(); // Create a new change with the specified sync data. - SyncChange(SyncChangeType change_type, const SyncData& sync_data); + SyncChange( + const tracked_objects::Location& from_here, + SyncChangeType change_type, + const SyncData& sync_data); ~SyncChange(); // Copy constructor and assignment operator welcome. @@ -56,6 +60,8 @@ class SyncChange { std::string ToString() const; private: + tracked_objects::Location location_; + SyncChangeType change_type_; // An immutable container for the data of this SyncChange. Whenever diff --git a/sync/api/sync_change_unittest.cc b/sync/api/sync_change_unittest.cc index 765bcdf..f5aab08 100644 --- a/sync/api/sync_change_unittest.cc +++ b/sync/api/sync_change_unittest.cc @@ -25,7 +25,8 @@ typedef testing::Test SyncChangeTest; TEST_F(SyncChangeTest, LocalDelete) { SyncChange::SyncChangeType change_type = SyncChange::ACTION_DELETE; std::string tag = "client_tag"; - SyncChange e(change_type, + SyncChange e(FROM_HERE, + change_type, SyncData::CreateLocalDelete(tag, syncer::PREFERENCES)); EXPECT_EQ(change_type, e.change_type()); EXPECT_EQ(tag, e.sync_data().GetTag()); @@ -39,7 +40,8 @@ TEST_F(SyncChangeTest, LocalUpdate) { pref_specifics->set_name("test"); std::string tag = "client_tag"; std::string title = "client_title"; - SyncChange e(change_type, + SyncChange e(FROM_HERE, + change_type, SyncData::CreateLocalData(tag, title, specifics)); EXPECT_EQ(change_type, e.change_type()); EXPECT_EQ(tag, e.sync_data().GetTag()); @@ -58,7 +60,8 @@ TEST_F(SyncChangeTest, LocalAdd) { pref_specifics->set_name("test"); std::string tag = "client_tag"; std::string title = "client_title"; - SyncChange e(change_type, + SyncChange e(FROM_HERE, + change_type, SyncData::CreateLocalData(tag, title, specifics)); EXPECT_EQ(change_type, e.change_type()); EXPECT_EQ(tag, e.sync_data().GetTag()); @@ -79,6 +82,7 @@ TEST_F(SyncChangeTest, SyncerChanges) { update_specifics.mutable_preference(); pref_specifics->set_name("update"); change_list.push_back(SyncChange( + FROM_HERE, SyncChange::ACTION_UPDATE, SyncData::CreateRemoteData(1, update_specifics))); @@ -87,6 +91,7 @@ TEST_F(SyncChangeTest, SyncerChanges) { pref_specifics = add_specifics.mutable_preference(); pref_specifics->set_name("add"); change_list.push_back(SyncChange( + FROM_HERE, SyncChange::ACTION_ADD, SyncData::CreateRemoteData(2, add_specifics))); @@ -95,6 +100,7 @@ TEST_F(SyncChangeTest, SyncerChanges) { pref_specifics = delete_specifics.mutable_preference(); pref_specifics->set_name("add"); change_list.push_back(SyncChange( + FROM_HERE, SyncChange::ACTION_DELETE, SyncData::CreateRemoteData(3, delete_specifics))); |