summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-23 00:54:56 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-23 00:54:56 +0000
commit0a075d63f82146768aac85366fa28ae8dcb5cfa9 (patch)
treedf4ebc4d3f6c11083c18adad180dfdcdff8867d0
parent93cd46d26354635fed115f9b9f2524bf11ff34d1 (diff)
downloadchromium_src-0a075d63f82146768aac85366fa28ae8dcb5cfa9.zip
chromium_src-0a075d63f82146768aac85366fa28ae8dcb5cfa9.tar.gz
chromium_src-0a075d63f82146768aac85366fa28ae8dcb5cfa9.tar.bz2
[Sync] Move some code into new class JsMutationEventObserver
Move JsTransactionObserver code into JsMutationEventObserver. Move ChangeObserver methods of JsSyncManagerObserver to JsMutationEventObserver. BUG= TEST= Review URL: http://codereview.chromium.org/7982049 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@102414 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/resources/sync_internals/chrome_sync.js2
-rw-r--r--chrome/browser/sync/internal_api/sync_manager.cc16
-rw-r--r--chrome/browser/sync/js/js_mutation_event_observer.cc (renamed from chrome/browser/sync/js/js_transaction_observer.cc)64
-rw-r--r--chrome/browser/sync/js/js_mutation_event_observer.h (renamed from chrome/browser/sync/js/js_transaction_observer.h)27
-rw-r--r--chrome/browser/sync/js/js_mutation_event_observer_unittest.cc127
-rw-r--r--chrome/browser/sync/js/js_sync_manager_observer.cc48
-rw-r--r--chrome/browser/sync/js/js_sync_manager_observer.h11
-rw-r--r--chrome/browser/sync/js/js_sync_manager_observer_unittest.cc83
-rw-r--r--chrome/browser/sync/syncable/syncable.h3
-rw-r--r--chrome/chrome.gyp4
-rw-r--r--chrome/chrome_tests.gypi1
11 files changed, 213 insertions, 173 deletions
diff --git a/chrome/browser/resources/sync_internals/chrome_sync.js b/chrome/browser/resources/sync_internals/chrome_sync.js
index 62b2f6a..aeef59f 100644
--- a/chrome/browser/resources/sync_internals/chrome_sync.js
+++ b/chrome/browser/resources/sync_internals/chrome_sync.js
@@ -91,7 +91,7 @@ chrome.sync.events = {
'transaction': [
'onTransactionStart',
- 'onTransactionMutate',
+ 'onTransactionWrite',
'onTransactionEnd'
]
};
diff --git a/chrome/browser/sync/internal_api/sync_manager.cc b/chrome/browser/sync/internal_api/sync_manager.cc
index e2f1c2f..5e1c537 100644
--- a/chrome/browser/sync/internal_api/sync_manager.cc
+++ b/chrome/browser/sync/internal_api/sync_manager.cc
@@ -34,9 +34,9 @@
#include "chrome/browser/sync/js/js_backend.h"
#include "chrome/browser/sync/js/js_event_details.h"
#include "chrome/browser/sync/js/js_event_handler.h"
+#include "chrome/browser/sync/js/js_mutation_event_observer.h"
#include "chrome/browser/sync/js/js_reply_handler.h"
#include "chrome/browser/sync/js/js_sync_manager_observer.h"
-#include "chrome/browser/sync/js/js_transaction_observer.h"
#include "chrome/browser/sync/notifier/sync_notifier.h"
#include "chrome/browser/sync/notifier/sync_notifier_observer.h"
#include "chrome/browser/sync/protocol/proto_value_conversions.h"
@@ -61,8 +61,8 @@ using browser_sync::JsEventDetails;
using browser_sync::JsEventHandler;
using browser_sync::JsEventHandler;
using browser_sync::JsReplyHandler;
+using browser_sync::JsMutationEventObserver;
using browser_sync::JsSyncManagerObserver;
-using browser_sync::JsTransactionObserver;
using browser_sync::ModelSafeWorkerRegistrar;
using browser_sync::kNigoriTag;
using browser_sync::KeyParams;
@@ -549,7 +549,7 @@ class SyncManager::SyncInternal
JsMessageHandlerMap js_message_handlers_;
WeakHandle<JsEventHandler> js_event_handler_;
JsSyncManagerObserver js_sync_manager_observer_;
- JsTransactionObserver js_transaction_observer_;
+ JsMutationEventObserver js_mutation_event_observer_;
};
const int SyncManager::SyncInternal::kDefaultNudgeDelayMilliseconds = 200;
const int SyncManager::SyncInternal::kPreferencesNudgeDelayMilliseconds = 2000;
@@ -756,7 +756,6 @@ bool SyncManager::SyncInternal::Init(
sync_notifier_.reset(sync_notifier);
- AddChangeObserver(&js_sync_manager_observer_);
AddObserver(&js_sync_manager_observer_);
SetJsEventHandler(event_handler);
@@ -897,7 +896,8 @@ bool SyncManager::SyncInternal::OpenDirectory() {
}
connection_manager()->set_client_id(lookup->cache_guid());
- lookup->AddTransactionObserver(&js_transaction_observer_);
+ lookup->AddTransactionObserver(&js_mutation_event_observer_);
+ AddChangeObserver(&js_mutation_event_observer_);
return true;
}
@@ -1262,7 +1262,6 @@ void SyncManager::SyncInternal::Shutdown() {
scheduler_.reset();
SetJsEventHandler(WeakHandle<JsEventHandler>());
- RemoveChangeObserver(&js_sync_manager_observer_);
RemoveObserver(&js_sync_manager_observer_);
if (sync_notifier_.get()) {
@@ -1281,7 +1280,8 @@ void SyncManager::SyncInternal::Shutdown() {
if (dir_manager()) {
syncable::ScopedDirLookup lookup(dir_manager(), username_for_share());
if (lookup.good()) {
- lookup->RemoveTransactionObserver(&js_transaction_observer_);
+ lookup->RemoveTransactionObserver(&js_mutation_event_observer_);
+ RemoveChangeObserver(&js_mutation_event_observer_);
} else {
NOTREACHED();
}
@@ -1680,7 +1680,7 @@ void SyncManager::SyncInternal::SetJsEventHandler(
const WeakHandle<JsEventHandler>& event_handler) {
js_event_handler_ = event_handler;
js_sync_manager_observer_.SetJsEventHandler(js_event_handler_);
- js_transaction_observer_.SetJsEventHandler(js_event_handler_);
+ js_mutation_event_observer_.SetJsEventHandler(js_event_handler_);
}
void SyncManager::SyncInternal::ProcessJsMessage(
diff --git a/chrome/browser/sync/js/js_transaction_observer.cc b/chrome/browser/sync/js/js_mutation_event_observer.cc
index e271336..5087a23 100644
--- a/chrome/browser/sync/js/js_transaction_observer.cc
+++ b/chrome/browser/sync/js/js_mutation_event_observer.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/sync/js/js_transaction_observer.h"
+#include "chrome/browser/sync/js/js_mutation_event_observer.h"
#include <string>
@@ -15,18 +15,18 @@
namespace browser_sync {
-JsTransactionObserver::JsTransactionObserver() {}
+JsMutationEventObserver::JsMutationEventObserver() {}
-JsTransactionObserver::~JsTransactionObserver() {
+JsMutationEventObserver::~JsMutationEventObserver() {
DCHECK(non_thread_safe_.CalledOnValidThread());
}
-void JsTransactionObserver::SetJsEventHandler(
+void JsMutationEventObserver::SetJsEventHandler(
const WeakHandle<JsEventHandler>& event_handler) {
event_handler_ = event_handler;
}
-void JsTransactionObserver::OnTransactionStart(
+void JsMutationEventObserver::OnTransactionStart(
const tracked_objects::Location& location,
const syncable::WriterTag& writer) {
DCHECK(non_thread_safe_.CalledOnValidThread());
@@ -41,13 +41,53 @@ void JsTransactionObserver::OnTransactionStart(
namespace {
-// Max number of mutations we attempt to convert to values (to avoid
+// Max number of changes we attempt to convert to values (to avoid
// running out of memory).
-const size_t kMutationLimit = 300;
+const size_t kChangeLimit = 100;
} // namespace
-void JsTransactionObserver::OnTransactionWrite(
+void JsMutationEventObserver::OnChangesApplied(
+ syncable::ModelType model_type,
+ int64 write_transaction_id,
+ const sync_api::ImmutableChangeRecordList& changes) {
+ if (!event_handler_.IsInitialized()) {
+ return;
+ }
+ DictionaryValue details;
+ details.SetString("modelType", syncable::ModelTypeToString(model_type));
+ details.SetString("writeTransactionId",
+ base::Int64ToString(write_transaction_id));
+ base::Value* changes_value = NULL;
+ const size_t changes_size = changes.Get().size();
+ if (changes_size <= kChangeLimit) {
+ ListValue* changes_list = new ListValue();
+ for (sync_api::ChangeRecordList::const_iterator it =
+ changes.Get().begin(); it != changes.Get().end(); ++it) {
+ changes_list->Append(it->ToValue());
+ }
+ changes_value = changes_list;
+ } else {
+ changes_value =
+ Value::CreateStringValue(
+ base::Uint64ToString(static_cast<uint64>(changes_size)) +
+ " changes");
+ }
+ details.Set("changes", changes_value);
+ HandleJsEvent(FROM_HERE, "onChangesApplied", JsEventDetails(&details));
+}
+
+void JsMutationEventObserver::OnChangesComplete(
+ syncable::ModelType model_type) {
+ if (!event_handler_.IsInitialized()) {
+ return;
+ }
+ DictionaryValue details;
+ details.SetString("modelType", syncable::ModelTypeToString(model_type));
+ HandleJsEvent(FROM_HERE, "onChangesComplete", JsEventDetails(&details));
+}
+
+void JsMutationEventObserver::OnTransactionWrite(
const syncable::ImmutableWriteTransactionInfo& write_transaction_info,
const syncable::ModelTypeBitSet& models_with_changes) {
DCHECK(non_thread_safe_.CalledOnValidThread());
@@ -56,13 +96,13 @@ void JsTransactionObserver::OnTransactionWrite(
}
DictionaryValue details;
details.Set("writeTransactionInfo",
- write_transaction_info.Get().ToValue(kMutationLimit));
+ write_transaction_info.Get().ToValue(kChangeLimit));
details.Set("modelsWithChanges",
syncable::ModelTypeBitSetToValue(models_with_changes));
- HandleJsEvent(FROM_HERE, "onTransactionMutate", JsEventDetails(&details));
+ HandleJsEvent(FROM_HERE, "onTransactionWrite", JsEventDetails(&details));
}
-void JsTransactionObserver::OnTransactionEnd(
+void JsMutationEventObserver::OnTransactionEnd(
const tracked_objects::Location& location,
const syncable::WriterTag& writer) {
DCHECK(non_thread_safe_.CalledOnValidThread());
@@ -75,7 +115,7 @@ void JsTransactionObserver::OnTransactionEnd(
HandleJsEvent(FROM_HERE, "onTransactionEnd", JsEventDetails(&details));
}
-void JsTransactionObserver::HandleJsEvent(
+void JsMutationEventObserver::HandleJsEvent(
const tracked_objects::Location& from_here,
const std::string& name, const JsEventDetails& details) {
if (!event_handler_.IsInitialized()) {
diff --git a/chrome/browser/sync/js/js_transaction_observer.h b/chrome/browser/sync/js/js_mutation_event_observer.h
index e9ae228..ced1d91 100644
--- a/chrome/browser/sync/js/js_transaction_observer.h
+++ b/chrome/browser/sync/js/js_mutation_event_observer.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_SYNC_JS_JS_TRANSACTION_OBSERVER_H_
-#define CHROME_BROWSER_SYNC_JS_JS_TRANSACTION_OBSERVER_H_
+#ifndef CHROME_BROWSER_SYNC_JS_JS_MUTATION_EVENT_OBSERVER_H_
+#define CHROME_BROWSER_SYNC_JS_JS_MUTATION_EVENT_OBSERVER_H_
#pragma once
#include <string>
@@ -11,6 +11,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/threading/non_thread_safe.h"
+#include "chrome/browser/sync/internal_api/sync_manager.h"
#include "chrome/browser/sync/syncable/transaction_observer.h"
#include "chrome/browser/sync/util/weak_handle.h"
@@ -23,15 +24,25 @@ namespace browser_sync {
class JsEventDetails;
class JsEventHandler;
-// Routes SyncManager events to a JsEventHandler.
-class JsTransactionObserver : public syncable::TransactionObserver {
+// Observes all change- and transaction-related events and routes a
+// summarized version to a JsEventHandler.
+class JsMutationEventObserver
+ : public sync_api::SyncManager::ChangeObserver,
+ public syncable::TransactionObserver {
public:
- JsTransactionObserver();
+ JsMutationEventObserver();
- virtual ~JsTransactionObserver();
+ virtual ~JsMutationEventObserver();
void SetJsEventHandler(const WeakHandle<JsEventHandler>& event_handler);
+ // sync_api::SyncManager::ChangeObserver implementation.
+ virtual void OnChangesApplied(
+ syncable::ModelType model_type,
+ int64 write_transaction_id,
+ const sync_api::ImmutableChangeRecordList& changes) OVERRIDE;
+ virtual void OnChangesComplete(syncable::ModelType model_type) OVERRIDE;
+
// syncable::TransactionObserver implementation.
virtual void OnTransactionStart(
const tracked_objects::Location& location,
@@ -51,9 +62,9 @@ class JsTransactionObserver : public syncable::TransactionObserver {
const tracked_objects::Location& from_here,
const std::string& name, const JsEventDetails& details);
- DISALLOW_COPY_AND_ASSIGN(JsTransactionObserver);
+ DISALLOW_COPY_AND_ASSIGN(JsMutationEventObserver);
};
} // namespace browser_sync
-#endif // CHROME_BROWSER_SYNC_JS_JS_TRANSACTION_OBSERVER_H_
+#endif // CHROME_BROWSER_SYNC_JS_JS_MUTATION_EVENT_OBSERVER_H_
diff --git a/chrome/browser/sync/js/js_mutation_event_observer_unittest.cc b/chrome/browser/sync/js/js_mutation_event_observer_unittest.cc
new file mode 100644
index 0000000..4a211f3
--- /dev/null
+++ b/chrome/browser/sync/js/js_mutation_event_observer_unittest.cc
@@ -0,0 +1,127 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/sync/js/js_mutation_event_observer.h"
+
+#include "base/basictypes.h"
+#include "base/message_loop.h"
+#include "base/values.h"
+#include "chrome/browser/sync/js/js_event_details.h"
+#include "chrome/browser/sync/js/js_test_util.h"
+#include "chrome/browser/sync/syncable/model_type.h"
+#include "chrome/browser/sync/util/weak_handle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace browser_sync {
+namespace {
+
+using ::testing::InSequence;
+using ::testing::StrictMock;
+
+class JsMutationEventObserverTest : public testing::Test {
+ protected:
+ JsMutationEventObserverTest() {
+ js_mutation_event_observer_.SetJsEventHandler(
+ mock_js_event_handler_.AsWeakHandle());
+ }
+
+ private:
+ // This must be destroyed after the member variables below in order
+ // for WeakHandles to be destroyed properly.
+ MessageLoop message_loop_;
+
+ protected:
+ StrictMock<MockJsEventHandler> mock_js_event_handler_;
+ JsMutationEventObserver js_mutation_event_observer_;
+
+ void PumpLoop() {
+ message_loop_.RunAllPending();
+ }
+};
+
+TEST_F(JsMutationEventObserverTest, OnChangesApplied) {
+ InSequence dummy;
+
+ // We don't test with passwords as that requires additional setup.
+
+ // Build a list of example ChangeRecords.
+ sync_api::ChangeRecord changes[syncable::MODEL_TYPE_COUNT];
+ for (int i = syncable::AUTOFILL_PROFILE;
+ i < syncable::MODEL_TYPE_COUNT; ++i) {
+ changes[i].id = i;
+ switch (i % 3) {
+ case 0:
+ changes[i].action =
+ sync_api::ChangeRecord::ACTION_ADD;
+ break;
+ case 1:
+ changes[i].action =
+ sync_api::ChangeRecord::ACTION_UPDATE;
+ break;
+ default:
+ changes[i].action =
+ sync_api::ChangeRecord::ACTION_DELETE;
+ break;
+ }
+ }
+
+ // 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::AUTOFILL_PROFILE;
+ i < syncable::MODEL_TYPE_COUNT; ++i) {
+ const std::string& model_type_str =
+ syncable::ModelTypeToString(syncable::ModelTypeFromInt(i));
+ DictionaryValue expected_details;
+ expected_details.SetString("modelType", model_type_str);
+ expected_details.SetString("writeTransactionId", "0");
+ ListValue* expected_changes = new ListValue();
+ expected_details.Set("changes", expected_changes);
+ for (int j = i; j < syncable::MODEL_TYPE_COUNT; ++j) {
+ expected_changes->Append(changes[j].ToValue());
+ }
+ EXPECT_CALL(mock_js_event_handler_,
+ HandleJsEvent("onChangesApplied",
+ HasDetailsAsDictionary(expected_details)));
+ }
+
+ // Fire OnChangesApplied() for each data type.
+ for (int i = syncable::AUTOFILL_PROFILE;
+ i < syncable::MODEL_TYPE_COUNT; ++i) {
+ sync_api::ChangeRecordList
+ local_changes(changes + i, changes + arraysize(changes));
+ js_mutation_event_observer_.OnChangesApplied(
+ syncable::ModelTypeFromInt(i),
+ 0, sync_api::ImmutableChangeRecordList(&local_changes));
+ }
+
+ PumpLoop();
+}
+
+TEST_F(JsMutationEventObserverTest, OnChangesComplete) {
+ InSequence dummy;
+
+ for (int i = syncable::FIRST_REAL_MODEL_TYPE;
+ i < syncable::MODEL_TYPE_COUNT; ++i) {
+ DictionaryValue expected_details;
+ expected_details.SetString(
+ "modelType",
+ syncable::ModelTypeToString(syncable::ModelTypeFromInt(i)));
+ EXPECT_CALL(mock_js_event_handler_,
+ HandleJsEvent("onChangesComplete",
+ HasDetailsAsDictionary(expected_details)));
+ }
+
+ for (int i = syncable::FIRST_REAL_MODEL_TYPE;
+ i < syncable::MODEL_TYPE_COUNT; ++i) {
+ js_mutation_event_observer_.OnChangesComplete(
+ syncable::ModelTypeFromInt(i));
+ }
+ PumpLoop();
+}
+
+} // namespace
+} // namespace browser_sync
diff --git a/chrome/browser/sync/js/js_sync_manager_observer.cc b/chrome/browser/sync/js/js_sync_manager_observer.cc
index 7f4a85e..7714f27 100644
--- a/chrome/browser/sync/js/js_sync_manager_observer.cc
+++ b/chrome/browser/sync/js/js_sync_manager_observer.cc
@@ -30,54 +30,6 @@ void JsSyncManagerObserver::SetJsEventHandler(
event_handler_ = event_handler;
}
-namespace {
-
-// Max number of changes we attempt to convert to values (to avoid
-// running out of memory).
-const size_t kChangeLimit = 300;
-
-} // namespace
-
-void JsSyncManagerObserver::OnChangesApplied(
- syncable::ModelType model_type,
- int64 write_transaction_id,
- const sync_api::ImmutableChangeRecordList& changes) {
- if (!event_handler_.IsInitialized()) {
- return;
- }
- DictionaryValue details;
- details.SetString("modelType", syncable::ModelTypeToString(model_type));
- details.SetString("writeTransactionId",
- base::Int64ToString(write_transaction_id));
- Value* changes_value = NULL;
- const size_t changes_size = changes.Get().size();
- if (changes_size <= kChangeLimit) {
- ListValue* changes_list = new ListValue();
- for (sync_api::ChangeRecordList::const_iterator it =
- changes.Get().begin(); it != changes.Get().end(); ++it) {
- changes_list->Append(it->ToValue());
- }
- changes_value = changes_list;
- } else {
- changes_value =
- Value::CreateStringValue(
- base::Uint64ToString(static_cast<uint64>(changes_size)) +
- " changes");
- }
- details.Set("changes", changes_value);
- HandleJsEvent(FROM_HERE, "onChangesApplied", JsEventDetails(&details));
-}
-
-void JsSyncManagerObserver::OnChangesComplete(
- syncable::ModelType model_type) {
- if (!event_handler_.IsInitialized()) {
- return;
- }
- DictionaryValue details;
- details.SetString("modelType", syncable::ModelTypeToString(model_type));
- HandleJsEvent(FROM_HERE, "onChangesComplete", JsEventDetails(&details));
-}
-
void JsSyncManagerObserver::OnSyncCycleCompleted(
const sessions::SyncSessionSnapshot* snapshot) {
if (!event_handler_.IsInitialized()) {
diff --git a/chrome/browser/sync/js/js_sync_manager_observer.h b/chrome/browser/sync/js/js_sync_manager_observer.h
index d48e8f2..0fa1db3 100644
--- a/chrome/browser/sync/js/js_sync_manager_observer.h
+++ b/chrome/browser/sync/js/js_sync_manager_observer.h
@@ -24,22 +24,13 @@ class JsEventDetails;
class JsEventHandler;
// Routes SyncManager events to a JsEventHandler.
-class JsSyncManagerObserver
- : public sync_api::SyncManager::ChangeObserver,
- public sync_api::SyncManager::Observer {
+class JsSyncManagerObserver : public sync_api::SyncManager::Observer {
public:
JsSyncManagerObserver();
virtual ~JsSyncManagerObserver();
void SetJsEventHandler(const WeakHandle<JsEventHandler>& event_handler);
- // sync_api::SyncManager::ChangeObserver implementation.
- virtual void OnChangesApplied(
- syncable::ModelType model_type,
- int64 write_transaction_id,
- const sync_api::ImmutableChangeRecordList& changes) OVERRIDE;
- virtual void OnChangesComplete(syncable::ModelType model_type) OVERRIDE;
-
// sync_api::SyncManager::Observer implementation.
virtual void OnSyncCycleCompleted(
const sessions::SyncSessionSnapshot* snapshot) OVERRIDE;
diff --git a/chrome/browser/sync/js/js_sync_manager_observer_unittest.cc b/chrome/browser/sync/js/js_sync_manager_observer_unittest.cc
index 776e426..aa1f0f1 100644
--- a/chrome/browser/sync/js/js_sync_manager_observer_unittest.cc
+++ b/chrome/browser/sync/js/js_sync_manager_observer_unittest.cc
@@ -8,7 +8,6 @@
#include "base/location.h"
#include "base/message_loop.h"
#include "base/values.h"
-#include "chrome/browser/sync/js/js_arg_list.h"
#include "chrome/browser/sync/js/js_event_details.h"
#include "chrome/browser/sync/js/js_test_util.h"
#include "chrome/browser/sync/protocol/sync_protocol_error.h"
@@ -68,27 +67,6 @@ TEST_F(JsSyncManagerObserverTest, NoArgNotifiations) {
PumpLoop();
}
-TEST_F(JsSyncManagerObserverTest, OnChangesComplete) {
- InSequence dummy;
-
- for (int i = syncable::FIRST_REAL_MODEL_TYPE;
- i < syncable::MODEL_TYPE_COUNT; ++i) {
- DictionaryValue expected_details;
- expected_details.SetString(
- "modelType",
- syncable::ModelTypeToString(syncable::ModelTypeFromInt(i)));
- EXPECT_CALL(mock_js_event_handler_,
- HandleJsEvent("onChangesComplete",
- HasDetailsAsDictionary(expected_details)));
- }
-
- for (int i = syncable::FIRST_REAL_MODEL_TYPE;
- i < syncable::MODEL_TYPE_COUNT; ++i) {
- js_sync_manager_observer_.OnChangesComplete(syncable::ModelTypeFromInt(i));
- }
- PumpLoop();
-}
-
TEST_F(JsSyncManagerObserverTest, OnSyncCycleCompleted) {
std::string download_progress_markers[syncable::MODEL_TYPE_COUNT];
sessions::SyncSessionSnapshot snapshot(sessions::SyncerStatus(),
@@ -234,66 +212,5 @@ TEST_F(JsSyncManagerObserverTest, OnEncryptionComplete) {
PumpLoop();
}
-TEST_F(JsSyncManagerObserverTest, OnChangesApplied) {
- InSequence dummy;
-
- // We don't test with passwords as that requires additional setup.
-
- // Build a list of example ChangeRecords.
- sync_api::ChangeRecord changes[syncable::MODEL_TYPE_COUNT];
- for (int i = syncable::AUTOFILL_PROFILE;
- i < syncable::MODEL_TYPE_COUNT; ++i) {
- changes[i].id = i;
- switch (i % 3) {
- case 0:
- changes[i].action =
- sync_api::ChangeRecord::ACTION_ADD;
- break;
- case 1:
- changes[i].action =
- sync_api::ChangeRecord::ACTION_UPDATE;
- break;
- default:
- changes[i].action =
- sync_api::ChangeRecord::ACTION_DELETE;
- break;
- }
- }
-
- // 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::AUTOFILL_PROFILE;
- i < syncable::MODEL_TYPE_COUNT; ++i) {
- const std::string& model_type_str =
- syncable::ModelTypeToString(syncable::ModelTypeFromInt(i));
- DictionaryValue expected_details;
- expected_details.SetString("modelType", model_type_str);
- expected_details.SetString("writeTransactionId", "0");
- ListValue* expected_changes = new ListValue();
- expected_details.Set("changes", expected_changes);
- for (int j = i; j < syncable::MODEL_TYPE_COUNT; ++j) {
- expected_changes->Append(changes[j].ToValue());
- }
- EXPECT_CALL(mock_js_event_handler_,
- HandleJsEvent("onChangesApplied",
- HasDetailsAsDictionary(expected_details)));
- }
-
- // Fire OnChangesApplied() for each data type.
- for (int i = syncable::AUTOFILL_PROFILE;
- i < syncable::MODEL_TYPE_COUNT; ++i) {
- sync_api::ChangeRecordList
- local_changes(changes + i, changes + arraysize(changes));
- js_sync_manager_observer_.OnChangesApplied(
- syncable::ModelTypeFromInt(i),
- 0, sync_api::ImmutableChangeRecordList(&local_changes));
- }
-
- PumpLoop();
-}
-
} // namespace
} // namespace browser_sync
diff --git a/chrome/browser/sync/syncable/syncable.h b/chrome/browser/sync/syncable/syncable.h
index a3b3bcd..4f8875f 100644
--- a/chrome/browser/sync/syncable/syncable.h
+++ b/chrome/browser/sync/syncable/syncable.h
@@ -627,7 +627,8 @@ struct WriteTransactionInfo {
base::DictionaryValue* ToValue(size_t max_mutations_size) const;
int64 id;
- // TODO(akalin): Use Location when it becomes assignable.
+ // If tracked_objects::Location becomes assignable, we can use that
+ // instead.
std::string location_string;
WriterTag writer;
ImmutableEntryKernelMutationMap mutations;
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index d293039..646ff7e 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -642,10 +642,10 @@
'browser/sync/js/js_event_details.h',
'browser/sync/js/js_event_handler.h',
'browser/sync/js/js_reply_handler.h',
+ 'browser/sync/js/js_mutation_event_observer.cc',
+ 'browser/sync/js/js_mutation_event_observer.h',
'browser/sync/js/js_sync_manager_observer.cc',
'browser/sync/js/js_sync_manager_observer.h',
- 'browser/sync/js/js_transaction_observer.cc',
- 'browser/sync/js/js_transaction_observer.h',
'browser/sync/protocol/proto_enum_conversions.cc',
'browser/sync/protocol/proto_enum_conversions.h',
'browser/sync/protocol/proto_value_conversions.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 9ecb3a8..029adc9 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -2931,6 +2931,7 @@
'browser/sync/internal_api/syncapi_unittest.cc',
'browser/sync/js/js_arg_list_unittest.cc',
'browser/sync/js/js_event_details_unittest.cc',
+ 'browser/sync/js/js_mutation_event_observer_unittest.cc',
'browser/sync/js/js_sync_manager_observer_unittest.cc',
'browser/sync/notifier/cache_invalidation_packet_handler_unittest.cc',
'browser/sync/notifier/chrome_invalidation_client_unittest.cc',