| Index: chrome/browser/sync/engine/syncapi.cc
 | 
| diff --git a/chrome/browser/sync/engine/syncapi.cc b/chrome/browser/sync/engine/syncapi.cc
 | 
| index e769892b3576b423175f78c0a00bd05e0a717c27..690905d1eb46f26aca63b4dd0f5113d9e2acf3cb 100644
 | 
| --- a/chrome/browser/sync/engine/syncapi.cc
 | 
| +++ b/chrome/browser/sync/engine/syncapi.cc
 | 
| @@ -28,6 +28,7 @@
 | 
|  #include "base/string_util.h"
 | 
|  #include "base/task.h"
 | 
|  #include "base/time.h"
 | 
| +#include "base/tracked.h"
 | 
|  #include "base/utf_string_conversions.h"
 | 
|  #include "base/values.h"
 | 
|  #include "chrome/browser/sync/engine/all_status.h"
 | 
| @@ -41,7 +42,7 @@
 | 
|  #include "chrome/browser/sync/engine/http_post_provider_factory.h"
 | 
|  #include "chrome/browser/sync/js_arg_list.h"
 | 
|  #include "chrome/browser/sync/js_backend.h"
 | 
| -#include "chrome/browser/sync/js_directory_change_listener.h"
 | 
| +#include "chrome/browser/sync/js_transaction_observer.h"
 | 
|  #include "chrome/browser/sync/js_event_details.h"
 | 
|  #include "chrome/browser/sync/js_event_router.h"
 | 
|  #include "chrome/browser/sync/notifier/sync_notifier.h"
 | 
| @@ -61,7 +62,7 @@
 | 
|  #include "chrome/browser/sync/sessions/sync_session.h"
 | 
|  #include "chrome/browser/sync/sessions/sync_session_context.h"
 | 
|  #include "chrome/browser/sync/syncable/autofill_migration.h"
 | 
| -#include "chrome/browser/sync/syncable/directory_change_listener.h"
 | 
| +#include "chrome/browser/sync/syncable/directory_change_delegate.h"
 | 
|  #include "chrome/browser/sync/syncable/directory_manager.h"
 | 
|  #include "chrome/browser/sync/syncable/model_type_payload_map.h"
 | 
|  #include "chrome/browser/sync/syncable/model_type.h"
 | 
| @@ -70,7 +71,6 @@
 | 
|  #include "chrome/common/chrome_switches.h"
 | 
|  #include "chrome/common/deprecated/event_sys.h"
 | 
|  #include "chrome/common/net/gaia/gaia_authenticator.h"
 | 
| -#include "content/browser/browser_thread.h"
 | 
|  #include "net/base/network_change_notifier.h"
 | 
|  
 | 
|  using base::TimeDelta;
 | 
| @@ -968,7 +968,7 @@ ReadTransaction::ReadTransaction(UserShare* share)
 | 
|      : BaseTransaction(share),
 | 
|        transaction_(NULL),
 | 
|        close_transaction_(true) {
 | 
| -  transaction_ = new syncable::ReadTransaction(GetLookup(), __FILE__, __LINE__);
 | 
| +  transaction_ = new syncable::ReadTransaction(GetLookup(), FROM_HERE);
 | 
|  }
 | 
|  
 | 
|  ReadTransaction::ReadTransaction(UserShare* share,
 | 
| @@ -993,7 +993,7 @@ WriteTransaction::WriteTransaction(UserShare* share)
 | 
|      : BaseTransaction(share),
 | 
|        transaction_(NULL) {
 | 
|    transaction_ = new syncable::WriteTransaction(GetLookup(), syncable::SYNCAPI,
 | 
| -                                                __FILE__, __LINE__);
 | 
| +                                                FROM_HERE);
 | 
|  }
 | 
|  
 | 
|  WriteTransaction::~WriteTransaction() {
 | 
| @@ -1124,7 +1124,7 @@ class SyncManager::SyncInternal
 | 
|        public browser_sync::JsEventRouter,
 | 
|        public SyncEngineEventListener,
 | 
|        public ServerConnectionEventListener,
 | 
| -      public syncable::DirectoryChangeListener {
 | 
| +      public syncable::DirectoryChangeDelegate {
 | 
|    static const int kDefaultNudgeDelayMilliseconds;
 | 
|    static const int kPreferencesNudgeDelayMilliseconds;
 | 
|   public:
 | 
| @@ -1136,8 +1136,7 @@ class SyncManager::SyncInternal
 | 
|          registrar_(NULL),
 | 
|          initialized_(false),
 | 
|          method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
 | 
| -        js_directory_change_listener_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
 | 
| -    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
| +        js_transaction_observer_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
 | 
|      // Pre-fill |notification_info_map_|.
 | 
|      for (int i = syncable::FIRST_REAL_MODEL_TYPE;
 | 
|           i < syncable::MODEL_TYPE_COUNT; ++i) {
 | 
| @@ -1171,7 +1170,6 @@ class SyncManager::SyncInternal
 | 
|  
 | 
|    virtual ~SyncInternal() {
 | 
|      CHECK(!sync_loop_);
 | 
| -    DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 | 
|    }
 | 
|  
 | 
|    bool Init(const FilePath& database_location,
 | 
| @@ -1224,7 +1222,7 @@ class SyncManager::SyncInternal
 | 
|    // to the syncapi model.
 | 
|    void SaveChanges();
 | 
|  
 | 
| -  // DirectoryChangeListener implementation.
 | 
| +  // DirectoryChangeDelegate implementation.
 | 
|    // This listener is called upon completion of a syncable transaction, and
 | 
|    // builds the list of sync-engine initiated changes that will be forwarded to
 | 
|    // the SyncManager's Observers.
 | 
| @@ -1234,11 +1232,9 @@ class SyncManager::SyncInternal
 | 
|        syncable::BaseTransaction* trans);
 | 
|    virtual void HandleCalculateChangesChangeEventFromSyncApi(
 | 
|        const OriginalEntries& originals,
 | 
| -      const WriterTag& writer,
 | 
|        syncable::BaseTransaction* trans);
 | 
|    virtual void HandleCalculateChangesChangeEventFromSyncer(
 | 
|        const OriginalEntries& originals,
 | 
| -      const WriterTag& writer,
 | 
|        syncable::BaseTransaction* trans);
 | 
|  
 | 
|    // Listens for notifications from the ServerConnectionManager
 | 
| @@ -1593,7 +1589,7 @@ class SyncManager::SyncInternal
 | 
|    // about:sync page.
 | 
|    NotificationInfoMap notification_info_map_;
 | 
|  
 | 
| -  browser_sync::JsDirectoryChangeListener js_directory_change_listener_;
 | 
| +  browser_sync::JsTransactionObserver js_transaction_observer_;
 | 
|  
 | 
|    JsMessageHandlerMap js_message_handlers_;
 | 
|  };
 | 
| @@ -1851,7 +1847,7 @@ void SyncManager::SyncInternal::StartSyncingNormally() {
 | 
|  bool SyncManager::SyncInternal::OpenDirectory() {
 | 
|    DCHECK(!initialized_) << "Should only happen once";
 | 
|  
 | 
| -  bool share_opened = dir_manager()->Open(username_for_share());
 | 
| +  bool share_opened = dir_manager()->Open(username_for_share(), this);
 | 
|    DCHECK(share_opened);
 | 
|    if (!share_opened) {
 | 
|      ObserverList<SyncManager::Observer> temp_obs_list;
 | 
| @@ -1872,14 +1868,10 @@ bool SyncManager::SyncInternal::OpenDirectory() {
 | 
|  
 | 
|    connection_manager()->set_client_id(lookup->cache_guid());
 | 
|  
 | 
| -  // Since we own |share_|, it's okay that we don't ever remove
 | 
| -  // ourselves as a listener.
 | 
| -  lookup->AddChangeListener(this);
 | 
| -
 | 
|    if (parent_router_) {
 | 
| -    // Make sure we add the listener at most once.
 | 
| -    lookup->RemoveChangeListener(&js_directory_change_listener_);
 | 
| -    lookup->AddChangeListener(&js_directory_change_listener_);
 | 
| +    // Make sure we add the observer at most once.
 | 
| +    lookup->RemoveTransactionObserver(&js_transaction_observer_);
 | 
| +    lookup->AddTransactionObserver(&js_transaction_observer_);
 | 
|    }
 | 
|    return true;
 | 
|  }
 | 
| @@ -2330,11 +2322,8 @@ ModelTypeBitSet SyncManager::SyncInternal::HandleTransactionEndingChangeEvent(
 | 
|  
 | 
|  void SyncManager::SyncInternal::HandleCalculateChangesChangeEventFromSyncApi(
 | 
|      const OriginalEntries& originals,
 | 
| -    const WriterTag& writer,
 | 
|      syncable::BaseTransaction* trans) {
 | 
|    // We have been notified about a user action changing a sync model.
 | 
| -  DCHECK(writer == syncable::SYNCAPI ||
 | 
| -         writer == syncable::UNITTEST);
 | 
|    LOG_IF(WARNING, !ChangeBuffersAreEmpty()) <<
 | 
|        "CALCULATE_CHANGES called with unapplied old changes.";
 | 
|  
 | 
| @@ -2408,12 +2397,9 @@ void SyncManager::SyncInternal::SetExtraChangeRecordData(int64 id,
 | 
|  
 | 
|  void SyncManager::SyncInternal::HandleCalculateChangesChangeEventFromSyncer(
 | 
|      const OriginalEntries& originals,
 | 
| -    const WriterTag& writer,
 | 
|      syncable::BaseTransaction* trans) {
 | 
|    // We only expect one notification per sync step, so change_buffers_ should
 | 
|    // contain no pending entries.
 | 
| -  DCHECK(writer == syncable::SYNCER ||
 | 
| -         writer == syncable::UNITTEST);
 | 
|    LOG_IF(WARNING, !ChangeBuffersAreEmpty()) <<
 | 
|        "CALCULATE_CHANGES called with unapplied old changes.";
 | 
|  
 | 
| @@ -2613,9 +2599,9 @@ void SyncManager::SyncInternal::SetParentJsEventRouter(
 | 
|      return;
 | 
|    }
 | 
|  
 | 
| -  // Make sure we add the listener at most once.
 | 
| -  lookup->RemoveChangeListener(&js_directory_change_listener_);
 | 
| -  lookup->AddChangeListener(&js_directory_change_listener_);
 | 
| +  // Make sure we add the observer at most once.
 | 
| +  lookup->RemoveTransactionObserver(&js_transaction_observer_);
 | 
| +  lookup->AddTransactionObserver(&js_transaction_observer_);
 | 
|  }
 | 
|  
 | 
|  void SyncManager::SyncInternal::RemoveParentJsEventRouter() {
 | 
| @@ -2630,7 +2616,7 @@ void SyncManager::SyncInternal::RemoveParentJsEventRouter() {
 | 
|      return;
 | 
|    }
 | 
|  
 | 
| -  lookup->RemoveChangeListener(&js_directory_change_listener_);
 | 
| +  lookup->RemoveTransactionObserver(&js_transaction_observer_);
 | 
|  }
 | 
|  
 | 
|  const browser_sync::JsEventRouter*
 | 
| 
 |