| Index: chrome/browser/sync/engine/syncer_thread.cc
 | 
| diff --git a/chrome/browser/sync/engine/syncer_thread.cc b/chrome/browser/sync/engine/syncer_thread.cc
 | 
| index ed8b023c141ffa615963561055edf2127503a08b..9fc69d4f2ffba583054024b78e8771b856159482 100644
 | 
| --- a/chrome/browser/sync/engine/syncer_thread.cc
 | 
| +++ b/chrome/browser/sync/engine/syncer_thread.cc
 | 
| @@ -74,8 +74,7 @@ SyncerThread::SyncerThread(sessions::SyncSessionContext* context,
 | 
|        session_context_(context),
 | 
|        disable_idle_detection_(false) {
 | 
|    DCHECK(context);
 | 
| -  syncer_event_relay_channel_.reset(new SyncerEventChannel(SyncerEvent(
 | 
| -      SyncerEvent::SHUTDOWN_USE_WITH_CARE)));
 | 
| +  syncer_event_relay_channel_.reset(new SyncerEventChannel());
 | 
|  
 | 
|    if (context->directory_manager()) {
 | 
|      directory_manager_hookup_.reset(NewEventListenerHookup(
 | 
| @@ -90,6 +89,8 @@ SyncerThread::SyncerThread(sessions::SyncSessionContext* context,
 | 
|  
 | 
|  SyncerThread::~SyncerThread() {
 | 
|    conn_mgr_hookup_.reset();
 | 
| +  syncer_event_relay_channel_->Notify(SyncerEvent(
 | 
| +      SyncerEvent::SHUTDOWN_USE_WITH_CARE));
 | 
|    syncer_event_relay_channel_.reset();
 | 
|    directory_manager_hookup_.reset();
 | 
|    syncer_events_.reset();
 | 
| @@ -305,7 +306,7 @@ void SyncerThread::ThreadMainLoop() {
 | 
|  void SyncerThread::PauseUntilResumedOrQuit() {
 | 
|    LOG(INFO) << "Syncer thread entering pause.";
 | 
|    SyncerEvent event(SyncerEvent::PAUSED);
 | 
| -  relay_channel()->NotifyListeners(event);
 | 
| +  relay_channel()->Notify(event);
 | 
|  
 | 
|    // Thread will get stuck here until either a resume is requested
 | 
|    // or shutdown is started.
 | 
| @@ -315,7 +316,7 @@ void SyncerThread::PauseUntilResumedOrQuit() {
 | 
|    // Notify that we have resumed if we are not shutting down.
 | 
|    if (!vault_.stop_syncer_thread_) {
 | 
|      SyncerEvent event(SyncerEvent::RESUMED);
 | 
| -    relay_channel()->NotifyListeners(event);
 | 
| +    relay_channel()->Notify(event);
 | 
|    }
 | 
|    LOG(INFO) << "Syncer thread exiting pause.";
 | 
|  }
 | 
| @@ -479,9 +480,9 @@ void SyncerThread::SetUpdatesSource(bool nudged, NudgeSource nudge_source,
 | 
|    vault_.syncer_->set_updates_source(updates_source);
 | 
|  }
 | 
|  
 | 
| -void SyncerThread::HandleSyncerEvent(const SyncerEvent& event) {
 | 
| +void SyncerThread::HandleChannelEvent(const SyncerEvent& event) {
 | 
|    AutoLock lock(lock_);
 | 
| -  relay_channel()->NotifyListeners(event);
 | 
| +  relay_channel()->Notify(event);
 | 
|    if (SyncerEvent::REQUEST_SYNC_NUDGE != event.what_happened) {
 | 
|      return;
 | 
|    }
 | 
| @@ -500,9 +501,8 @@ void SyncerThread::HandleDirectoryManagerEvent(
 | 
|      session_context_->set_account_name(event.dirname);
 | 
|      vault_.syncer_ = new Syncer(session_context_.get());
 | 
|  
 | 
| -    syncer_events_.reset(NewEventListenerHookup(
 | 
| -        session_context_->syncer_event_channel(), this,
 | 
| -        &SyncerThread::HandleSyncerEvent));
 | 
| +    syncer_events_.reset(
 | 
| +        session_context_->syncer_event_channel()->AddObserver(this));
 | 
|      vault_field_changed_.Broadcast();
 | 
|    }
 | 
|  }
 | 
| 
 |