diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-18 09:57:04 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-18 09:57:04 +0000 |
commit | ab58e4277a2d8fc430303719ba369289761d017d (patch) | |
tree | 44feba503e915ad23374de6281aab54bd117d590 /chrome/browser/sync | |
parent | d26ee5f08c3f3491c85845391b075205cdb911db (diff) | |
download | chromium_src-ab58e4277a2d8fc430303719ba369289761d017d.zip chromium_src-ab58e4277a2d8fc430303719ba369289761d017d.tar.gz chromium_src-ab58e4277a2d8fc430303719ba369289761d017d.tar.bz2 |
[Sync] Fix bug in JsSyncManagerObserver leading to erroneous change info.
The bug is that the changes in an onChangesApplied() event is set to
n copies of the first change.
Fix similar bug in test code (which is why this bug wasn't caught).
BUG=69500
TEST=
Review URL: http://codereview.chromium.org/6546009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75373 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sync')
-rw-r--r-- | chrome/browser/sync/js_sync_manager_observer.cc | 2 | ||||
-rw-r--r-- | chrome/browser/sync/js_sync_manager_observer_unittest.cc | 24 |
2 files changed, 15 insertions, 11 deletions
diff --git a/chrome/browser/sync/js_sync_manager_observer.cc b/chrome/browser/sync/js_sync_manager_observer.cc index 407ce98..ef6eb06 100644 --- a/chrome/browser/sync/js_sync_manager_observer.cc +++ b/chrome/browser/sync/js_sync_manager_observer.cc @@ -34,7 +34,7 @@ void JsSyncManagerObserver::OnChangesApplied( ListValue* change_values = new ListValue(); return_args.Append(change_values); for (int i = 0; i < change_count; ++i) { - change_values->Append(changes->ToValue(trans)); + change_values->Append(changes[i].ToValue(trans)); } parent_router_->RouteJsEvent("onChangesApplied", JsArgList(return_args), NULL); diff --git a/chrome/browser/sync/js_sync_manager_observer_unittest.cc b/chrome/browser/sync/js_sync_manager_observer_unittest.cc index 11df4d5..8039add 100644 --- a/chrome/browser/sync/js_sync_manager_observer_unittest.cc +++ b/chrome/browser/sync/js_sync_manager_observer_unittest.cc @@ -179,9 +179,9 @@ TEST_F(JsSyncManagerObserverTest, OnChangesApplied) { // We don't test with passwords as that requires additional setup. // Build a list of example ChangeRecords. - sync_api::SyncManager::ChangeRecord changes[syncable::PASSWORDS]; - for (int i = syncable::FIRST_REAL_MODEL_TYPE; - i < syncable::PASSWORDS; ++i) { + sync_api::SyncManager::ChangeRecord changes[syncable::MODEL_TYPE_COUNT]; + for (int i = syncable::AUTOFILL_PROFILE; + i < syncable::MODEL_TYPE_COUNT; ++i) { changes[i].id = MakeNode(&share, syncable::ModelTypeFromInt(i)); switch (i % 3) { case 0: @@ -205,18 +205,22 @@ TEST_F(JsSyncManagerObserverTest, OnChangesApplied) { } } + // For each i, we call OnChangesApplied() with the first arg equal + // to i cast to ModelType and the second argument with the changes + // starting from changes[i]. + // Set expectations for each data type. - for (int i = syncable::FIRST_REAL_MODEL_TYPE; - i < syncable::PASSWORDS; ++i) { + for (int i = syncable::AUTOFILL_PROFILE; + i < syncable::MODEL_TYPE_COUNT; ++i) { const std::string& model_type_str = syncable::ModelTypeToString(syncable::ModelTypeFromInt(i)); ListValue expected_args; expected_args.Append(Value::CreateStringValue(model_type_str)); ListValue* expected_changes = new ListValue(); expected_args.Append(expected_changes); - for (int j = i; j < syncable::PASSWORDS; ++j) { + for (int j = i; j < syncable::MODEL_TYPE_COUNT; ++j) { sync_api::ReadTransaction trans(&share); - expected_changes->Append(changes[i].ToValue(&trans)); + expected_changes->Append(changes[j].ToValue(&trans)); } EXPECT_CALL(mock_router_, RouteJsEvent("onChangesApplied", @@ -224,12 +228,12 @@ TEST_F(JsSyncManagerObserverTest, OnChangesApplied) { } // Fire OnChangesApplied() for each data type. - for (int i = syncable::FIRST_REAL_MODEL_TYPE; - i < syncable::PASSWORDS; ++i) { + for (int i = syncable::AUTOFILL_PROFILE; + i < syncable::MODEL_TYPE_COUNT; ++i) { sync_api::ReadTransaction trans(&share); sync_manager_observer_.OnChangesApplied(syncable::ModelTypeFromInt(i), &trans, &changes[i], - syncable::PASSWORDS - i); + syncable::MODEL_TYPE_COUNT - i); } // |share.dir_manager| does not actually own its value. |