diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-23 00:54:56 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-23 00:54:56 +0000 |
commit | 0a075d63f82146768aac85366fa28ae8dcb5cfa9 (patch) | |
tree | df4ebc4d3f6c11083c18adad180dfdcdff8867d0 | |
parent | 93cd46d26354635fed115f9b9f2524bf11ff34d1 (diff) | |
download | chromium_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.js | 2 | ||||
-rw-r--r-- | chrome/browser/sync/internal_api/sync_manager.cc | 16 | ||||
-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.cc | 127 | ||||
-rw-r--r-- | chrome/browser/sync/js/js_sync_manager_observer.cc | 48 | ||||
-rw-r--r-- | chrome/browser/sync/js/js_sync_manager_observer.h | 11 | ||||
-rw-r--r-- | chrome/browser/sync/js/js_sync_manager_observer_unittest.cc | 83 | ||||
-rw-r--r-- | chrome/browser/sync/syncable/syncable.h | 3 | ||||
-rw-r--r-- | chrome/chrome.gyp | 4 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 1 |
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', |