| Index: chrome/browser/sync/engine/syncer_thread_unittest.cc
 | 
| diff --git a/chrome/browser/sync/engine/syncer_thread_unittest.cc b/chrome/browser/sync/engine/syncer_thread_unittest.cc
 | 
| index 946978b60b9eec144b78e958e851d3836b35a994..14f4e02af657ca45b99a43c48fd330d1233de1ef 100644
 | 
| --- a/chrome/browser/sync/engine/syncer_thread_unittest.cc
 | 
| +++ b/chrome/browser/sync/engine/syncer_thread_unittest.cc
 | 
| @@ -13,6 +13,7 @@
 | 
|  #include "chrome/browser/sync/engine/syncer_thread.h"
 | 
|  #include "chrome/browser/sync/engine/syncer_types.h"
 | 
|  #include "chrome/browser/sync/sessions/sync_session_context.h"
 | 
| +#include "chrome/browser/sync/util/channel.h"
 | 
|  #include "chrome/test/sync/engine/mock_server_connection.h"
 | 
|  #include "chrome/test/sync/engine/test_directory_setter_upper.h"
 | 
|  #include "testing/gmock/include/gmock/gmock.h"
 | 
| @@ -32,7 +33,8 @@ typedef testing::Test SyncerThreadTest;
 | 
|  typedef SyncerThread::WaitInterval WaitInterval;
 | 
|  
 | 
|  class SyncerThreadWithSyncerTest : public testing::Test,
 | 
| -                                   public ModelSafeWorkerRegistrar {
 | 
| +                                   public ModelSafeWorkerRegistrar,
 | 
| +                                   public ChannelEventHandler<SyncerEvent> {
 | 
|   public:
 | 
|    SyncerThreadWithSyncerTest() : sync_cycle_ended_event_(false, false) {}
 | 
|    virtual void SetUp() {
 | 
| @@ -45,8 +47,7 @@ class SyncerThreadWithSyncerTest : public testing::Test,
 | 
|          NULL, metadb_.manager(), this);
 | 
|      syncer_thread_ = new SyncerThread(context, allstatus_.get());
 | 
|      syncer_event_hookup_.reset(
 | 
| -        NewEventListenerHookup(syncer_thread_->relay_channel(), this,
 | 
| -            &SyncerThreadWithSyncerTest::HandleSyncerEvent));
 | 
| +        syncer_thread_->relay_channel()->AddObserver(this));
 | 
|      allstatus_->WatchSyncerThread(syncer_thread_);
 | 
|      syncer_thread_->SetConnected(true);
 | 
|      syncable::ModelTypeBitSet expected_types;
 | 
| @@ -54,8 +55,9 @@ class SyncerThreadWithSyncerTest : public testing::Test,
 | 
|      connection_->ExpectGetUpdatesRequestTypes(expected_types);
 | 
|    }
 | 
|    virtual void TearDown() {
 | 
| -    syncer_thread_ = NULL;
 | 
| +    syncer_event_hookup_.reset();
 | 
|      allstatus_.reset();
 | 
| +    syncer_thread_ = NULL;
 | 
|      connection_.reset();
 | 
|      metadb_.TearDown();
 | 
|    }
 | 
| @@ -98,7 +100,7 @@ class SyncerThreadWithSyncerTest : public testing::Test,
 | 
|  
 | 
|   private:
 | 
|  
 | 
| -  void HandleSyncerEvent(const SyncerEvent& event) {
 | 
| +  void HandleChannelEvent(const SyncerEvent& event) {
 | 
|      if (event.what_happened == SyncerEvent::SYNC_CYCLE_ENDED)
 | 
|        sync_cycle_ended_event_.Signal();
 | 
|    }
 | 
| @@ -108,7 +110,7 @@ class SyncerThreadWithSyncerTest : public testing::Test,
 | 
|    scoped_ptr<AllStatus> allstatus_;
 | 
|    scoped_refptr<SyncerThread> syncer_thread_;
 | 
|    scoped_refptr<ModelSafeWorker> worker_;
 | 
| -  scoped_ptr<EventListenerHookup> syncer_event_hookup_;
 | 
| +  scoped_ptr<ChannelHookup<SyncerEvent> > syncer_event_hookup_;
 | 
|    base::WaitableEvent sync_cycle_ended_event_;
 | 
|    DISALLOW_COPY_AND_ASSIGN(SyncerThreadWithSyncerTest);
 | 
|  };
 | 
| @@ -715,9 +717,9 @@ ACTION_P(SignalEvent, event) {
 | 
|    event->Signal();
 | 
|  }
 | 
|  
 | 
| -class ListenerMock {
 | 
| +class ListenerMock : public ChannelEventHandler<SyncerEvent> {
 | 
|   public:
 | 
| -  MOCK_METHOD1(HandleEvent, void(const SyncerEvent&));
 | 
| +  MOCK_METHOD1(HandleChannelEvent, void(const SyncerEvent&));
 | 
|  };
 | 
|  
 | 
|  // TODO(skrul): Bug 39070.
 | 
| @@ -730,13 +732,10 @@ TEST_F(SyncerThreadWithSyncerTest, DISABLED_Pause) {
 | 
|    syncer_thread()->SetSyncerShortPollInterval(poll_interval);
 | 
|  
 | 
|    ListenerMock listener;
 | 
| -  scoped_ptr<EventListenerHookup> hookup;
 | 
| -  hookup.reset(
 | 
| -      NewEventListenerHookup(syncer_thread()->relay_channel(),
 | 
| -                             &listener,
 | 
| -                             &ListenerMock::HandleEvent));
 | 
| +  scoped_ptr<ChannelHookup<SyncerEvent> > hookup;
 | 
| +  hookup.reset(syncer_thread()->relay_channel()->AddObserver(&listener));
 | 
|  
 | 
| -  EXPECT_CALL(listener, HandleEvent(
 | 
| +  EXPECT_CALL(listener, HandleChannelEvent(
 | 
|        Field(&SyncerEvent::what_happened, SyncerEvent::STATUS_CHANGED))).
 | 
|        Times(AnyNumber());
 | 
|  
 | 
| @@ -745,7 +744,7 @@ TEST_F(SyncerThreadWithSyncerTest, DISABLED_Pause) {
 | 
|    EXPECT_FALSE(syncer_thread()->RequestResume());
 | 
|  
 | 
|    // Wait for the initial sync to complete.
 | 
| -  EXPECT_CALL(listener, HandleEvent(
 | 
| +  EXPECT_CALL(listener, HandleChannelEvent(
 | 
|        Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))).
 | 
|        WillOnce(SignalEvent(&sync_cycle_ended_event));
 | 
|    ASSERT_TRUE(syncer_thread()->Start());
 | 
| @@ -753,14 +752,14 @@ TEST_F(SyncerThreadWithSyncerTest, DISABLED_Pause) {
 | 
|    sync_cycle_ended_event.Wait();
 | 
|  
 | 
|    // Request a pause.
 | 
| -  EXPECT_CALL(listener, HandleEvent(
 | 
| +  EXPECT_CALL(listener, HandleChannelEvent(
 | 
|        Field(&SyncerEvent::what_happened, SyncerEvent::PAUSED))).
 | 
|        WillOnce(SignalEvent(&paused_event));
 | 
|    ASSERT_TRUE(syncer_thread()->RequestPause());
 | 
|    paused_event.Wait();
 | 
|  
 | 
|    // Resuming the pause.
 | 
| -  EXPECT_CALL(listener, HandleEvent(
 | 
| +  EXPECT_CALL(listener, HandleChannelEvent(
 | 
|        Field(&SyncerEvent::what_happened, SyncerEvent::RESUMED))).
 | 
|        WillOnce(SignalEvent(&resumed_event));
 | 
|    ASSERT_TRUE(syncer_thread()->RequestResume());
 | 
| @@ -770,7 +769,7 @@ TEST_F(SyncerThreadWithSyncerTest, DISABLED_Pause) {
 | 
|    EXPECT_FALSE(syncer_thread()->RequestResume());
 | 
|  
 | 
|    // Request a pause.
 | 
| -  EXPECT_CALL(listener, HandleEvent(
 | 
| +  EXPECT_CALL(listener, HandleChannelEvent(
 | 
|        Field(&SyncerEvent::what_happened, SyncerEvent::PAUSED))).
 | 
|        WillOnce(SignalEvent(&paused_event));
 | 
|    ASSERT_TRUE(syncer_thread()->RequestPause());
 | 
| @@ -780,11 +779,11 @@ TEST_F(SyncerThreadWithSyncerTest, DISABLED_Pause) {
 | 
|    syncer_thread()->NudgeSyncer(0, SyncerThread::kUnknown);
 | 
|  
 | 
|    // Resuming will cause the nudge to be processed and a sync cycle to run.
 | 
| -  EXPECT_CALL(listener, HandleEvent(
 | 
| +  EXPECT_CALL(listener, HandleChannelEvent(
 | 
|        Field(&SyncerEvent::what_happened, SyncerEvent::RESUMED))).
 | 
|        WillOnce(SignalEvent(&resumed_event));
 | 
|    // Wait for the sync cycle to run.
 | 
| -  EXPECT_CALL(listener, HandleEvent(
 | 
| +  EXPECT_CALL(listener, HandleChannelEvent(
 | 
|        Field(&SyncerEvent::what_happened, SyncerEvent::SYNC_CYCLE_ENDED))).
 | 
|        WillOnce(SignalEvent(&sync_cycle_ended_event));
 | 
|    ASSERT_TRUE(syncer_thread()->RequestResume());
 | 
| 
 |