summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzea@chromium.org <zea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-10 23:46:45 +0000
committerzea@chromium.org <zea@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-10 23:46:45 +0000
commit786009d47328ac4672c86e5a3964d56fc36b3d74 (patch)
treee4994d54c0fac1f093200f08edeea4d1f4fc4170
parent99800f2ad6f7518143b15092f711670253fbcfc8 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/extensions/app_notification_manager.cc13
-rw-r--r--chrome/browser/extensions/app_notification_manager_sync_unittest.cc4
-rw-r--r--chrome/browser/extensions/app_sync_bundle.cc8
-rw-r--r--chrome/browser/extensions/app_sync_data.cc2
-rw-r--r--chrome/browser/extensions/extension_service_unittest.cc56
-rw-r--r--chrome/browser/extensions/extension_sync_bundle.cc8
-rw-r--r--chrome/browser/extensions/extension_sync_data.cc2
-rw-r--r--chrome/browser/extensions/settings/settings_sync_util.cc3
-rw-r--r--chrome/browser/prefs/pref_model_associator.cc12
-rw-r--r--chrome/browser/search_engines/template_url_service.cc70
-rw-r--r--chrome/browser/search_engines/template_url_service.h3
-rw-r--r--chrome/browser/search_engines/template_url_service_sync_unittest.cc4
-rw-r--r--chrome/browser/sync/glue/generic_change_processor.cc9
-rw-r--r--chrome/browser/webdata/autocomplete_syncable_service.cc15
-rw-r--r--chrome/browser/webdata/autofill_profile_syncable_service.cc23
-rw-r--r--chrome/browser/webdata/autofill_profile_syncable_service_unittest.cc18
-rw-r--r--sync/api/sync_change.cc13
-rw-r--r--sync/api/sync_change.h8
-rw-r--r--sync/api/sync_change_unittest.cc12
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)));