| Index: media/base/pipeline_unittest.cc
 | 
| diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
 | 
| index 1d839963e97ae92180adfd54d9c725048075d6f2..14d39d9f9e9f5028fc9f5ca45c46336825fdf7a5 100644
 | 
| --- a/media/base/pipeline_unittest.cc
 | 
| +++ b/media/base/pipeline_unittest.cc
 | 
| @@ -55,11 +55,6 @@ class CallbackHelper {
 | 
|    DISALLOW_COPY_AND_ASSIGN(CallbackHelper);
 | 
|  };
 | 
|  
 | 
| -// Run |cb| w/ OK status.
 | 
| -static void RunPipelineStatusOKCB(const PipelineStatusCB& cb) {
 | 
| -  cb.Run(PIPELINE_OK);
 | 
| -}
 | 
| -
 | 
|  // TODO(scherkus): even though some filters are initialized on separate
 | 
|  // threads these test aren't flaky... why?  It's because filters' Initialize()
 | 
|  // is executed on |message_loop_| and the mock filters instantly call
 | 
| @@ -93,6 +88,7 @@ class PipelineTest : public ::testing::Test {
 | 
|                                 base::Unretained(&callbacks_)));
 | 
|      message_loop_.RunAllPending();
 | 
|  
 | 
| +    pipeline_ = NULL;
 | 
|      mocks_.reset();
 | 
|    }
 | 
|  
 | 
| @@ -101,12 +97,13 @@ class PipelineTest : public ::testing::Test {
 | 
|    typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector;
 | 
|    void InitializeDemuxer(MockDemuxerStreamVector* streams,
 | 
|                           const base::TimeDelta& duration) {
 | 
| +    EXPECT_CALL(*mocks_->demuxer(), Initialize(_))
 | 
| +        .WillOnce(Invoke(&RunPipelineStatusCB));
 | 
|      mocks_->demuxer()->SetTotalAndBufferedBytesAndDuration(
 | 
|          kTotalBytes, kBufferedBytes, duration);
 | 
|      EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
 | 
| -    EXPECT_CALL(*mocks_->demuxer(), SetPreload(AUTO));
 | 
|      EXPECT_CALL(*mocks_->demuxer(), Seek(mocks_->demuxer()->GetStartTime(), _))
 | 
| -        .WillOnce(Invoke(&RunPipelineStatusCB));
 | 
| +        .WillOnce(Invoke(&RunPipelineStatusCB2));
 | 
|      EXPECT_CALL(*mocks_->demuxer(), Stop(_))
 | 
|          .WillOnce(Invoke(&RunStopFilterCallback));
 | 
|  
 | 
| @@ -130,7 +127,7 @@ class PipelineTest : public ::testing::Test {
 | 
|    void InitializeVideoDecoder(MockDemuxerStream* stream) {
 | 
|      EXPECT_CALL(*mocks_->video_decoder(),
 | 
|                  Initialize(stream, _, _))
 | 
| -        .WillOnce(WithArg<1>(Invoke(&RunPipelineStatusOKCB)));
 | 
| +        .WillOnce(Invoke(&RunPipelineStatusCB3));
 | 
|    }
 | 
|  
 | 
|    // Sets up expectations to allow the audio decoder to initialize.
 | 
| @@ -147,7 +144,7 @@ class PipelineTest : public ::testing::Test {
 | 
|      EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f));
 | 
|      EXPECT_CALL(*mocks_->video_renderer(),
 | 
|                  Seek(mocks_->demuxer()->GetStartTime(), _))
 | 
| -        .WillOnce(Invoke(&RunPipelineStatusCB));
 | 
| +        .WillOnce(Invoke(&RunPipelineStatusCB2));
 | 
|      EXPECT_CALL(*mocks_->video_renderer(), Stop(_))
 | 
|          .WillOnce(Invoke(&RunStopFilterCallback));
 | 
|    }
 | 
| @@ -167,35 +164,22 @@ class PipelineTest : public ::testing::Test {
 | 
|      EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f));
 | 
|      EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f));
 | 
|      EXPECT_CALL(*mocks_->audio_renderer(), Seek(base::TimeDelta(), _))
 | 
| -        .WillOnce(Invoke(&RunPipelineStatusCB));
 | 
| +        .WillOnce(Invoke(&RunPipelineStatusCB2));
 | 
|      EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
 | 
|          .WillOnce(Invoke(&RunStopFilterCallback));
 | 
|    }
 | 
|  
 | 
|    // Sets up expectations on the callback and initializes the pipeline.  Called
 | 
|    // after tests have set expectations any filters they wish to use.
 | 
| -  void InitializePipeline() {
 | 
| -    InitializePipeline(PIPELINE_OK);
 | 
| -  }
 | 
| -  // Most tests can expect the |filter_collection|'s |build_status| to get
 | 
| -  // reflected in |Start()|'s argument.
 | 
|    void InitializePipeline(PipelineStatus start_status) {
 | 
| -    InitializePipeline(start_status, start_status);
 | 
| -  }
 | 
| -  // But some tests require different statuses in build & Start.
 | 
| -  void InitializePipeline(PipelineStatus build_status,
 | 
| -                          PipelineStatus start_status) {
 | 
| -    // Expect an initialization callback.
 | 
|      EXPECT_CALL(callbacks_, OnStart(start_status));
 | 
|  
 | 
|      pipeline_->Start(
 | 
| -        mocks_->filter_collection(true, true, true, build_status).Pass(),
 | 
| -        "",
 | 
| +        mocks_->Create().Pass(),
 | 
|          base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
 | 
|          base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
 | 
|          NetworkEventCB(),
 | 
|          base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
 | 
| -
 | 
|      message_loop_.RunAllPending();
 | 
|    }
 | 
|  
 | 
| @@ -218,16 +202,16 @@ class PipelineTest : public ::testing::Test {
 | 
|    void ExpectSeek(const base::TimeDelta& seek_time) {
 | 
|      // Every filter should receive a call to Seek().
 | 
|      EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _))
 | 
| -        .WillOnce(Invoke(&RunPipelineStatusCB));
 | 
| +        .WillOnce(Invoke(&RunPipelineStatusCB2));
 | 
|  
 | 
|      if (audio_stream_) {
 | 
|        EXPECT_CALL(*mocks_->audio_renderer(), Seek(seek_time, _))
 | 
| -          .WillOnce(Invoke(&RunPipelineStatusCB));
 | 
| +          .WillOnce(Invoke(&RunPipelineStatusCB2));
 | 
|      }
 | 
|  
 | 
|      if (video_stream_) {
 | 
|        EXPECT_CALL(*mocks_->video_renderer(), Seek(seek_time, _))
 | 
| -          .WillOnce(Invoke(&RunPipelineStatusCB));
 | 
| +          .WillOnce(Invoke(&RunPipelineStatusCB2));
 | 
|      }
 | 
|  
 | 
|      // We expect a successful seek callback.
 | 
| @@ -296,12 +280,16 @@ TEST_F(PipelineTest, NotStarted) {
 | 
|  }
 | 
|  
 | 
|  TEST_F(PipelineTest, NeverInitializes) {
 | 
| +  // Don't execute the callback passed into Initialize().
 | 
| +  EXPECT_CALL(*mocks_->demuxer(), Initialize(_));
 | 
| +  EXPECT_CALL(*mocks_->demuxer(), Stop(_))
 | 
| +      .WillOnce(Invoke(&RunStopFilterCallback));
 | 
| +
 | 
|    // This test hangs during initialization by never calling
 | 
|    // InitializationComplete().  StrictMock<> will ensure that the callback is
 | 
|    // never executed.
 | 
|    pipeline_->Start(
 | 
| -        mocks_->filter_collection(false, false, true, PIPELINE_OK).Pass(),
 | 
| -        "",
 | 
| +        mocks_->Create().Pass(),
 | 
|          base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
 | 
|          base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
 | 
|          NetworkEventCB(),
 | 
| @@ -318,37 +306,39 @@ TEST_F(PipelineTest, NeverInitializes) {
 | 
|  }
 | 
|  
 | 
|  TEST_F(PipelineTest, RequiredFilterMissing) {
 | 
| -  // Sets up expectations on the callback and initializes the pipeline.  Called
 | 
| -  // after tests have set expectations any filters they wish to use.
 | 
| -  // Expect an initialization callback.
 | 
| -  EXPECT_CALL(callbacks_, OnStart(PIPELINE_ERROR_REQUIRED_FILTER_MISSING));
 | 
| -
 | 
|    // Create a filter collection with missing filter.
 | 
| -  scoped_ptr<FilterCollection> collection(mocks_->filter_collection(
 | 
| -      false, true, true, PIPELINE_ERROR_REQUIRED_FILTER_MISSING));
 | 
| +  scoped_ptr<FilterCollection> collection(mocks_->Create());
 | 
| +  collection->SetDemuxer(NULL);
 | 
| +
 | 
| +  EXPECT_CALL(callbacks_, OnStart(PIPELINE_ERROR_REQUIRED_FILTER_MISSING));
 | 
|    pipeline_->Start(
 | 
| -        collection.Pass(),
 | 
| -        "",
 | 
| -        base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
 | 
| -        base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
 | 
| -        NetworkEventCB(),
 | 
| -        base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
 | 
| +      collection.Pass(),
 | 
| +      base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
 | 
| +      base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
 | 
| +      NetworkEventCB(),
 | 
| +      base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
 | 
|    message_loop_.RunAllPending();
 | 
| -
 | 
|    EXPECT_FALSE(pipeline_->IsInitialized());
 | 
|  }
 | 
|  
 | 
|  TEST_F(PipelineTest, URLNotFound) {
 | 
| +  EXPECT_CALL(*mocks_->demuxer(), Initialize(_))
 | 
| +      .WillOnce(RunPipelineStatusCBWithError(
 | 
| +          PIPELINE_ERROR_URL_NOT_FOUND));
 | 
| +  EXPECT_CALL(*mocks_->demuxer(), Stop(_))
 | 
| +      .WillOnce(Invoke(&RunStopFilterCallback));
 | 
| +
 | 
|    InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND);
 | 
|    EXPECT_FALSE(pipeline_->IsInitialized());
 | 
|  }
 | 
|  
 | 
|  TEST_F(PipelineTest, NoStreams) {
 | 
| -  // Manually set these expectations because SetPlaybackRate() is not called if
 | 
| -  // we cannot fully initialize the pipeline.
 | 
| +  EXPECT_CALL(*mocks_->demuxer(), Initialize(_))
 | 
| +      .WillOnce(Invoke(&RunPipelineStatusCB));
 | 
|    EXPECT_CALL(*mocks_->demuxer(), Stop(_))
 | 
|        .WillOnce(Invoke(&RunStopFilterCallback));
 | 
| -  InitializePipeline(PIPELINE_OK, PIPELINE_ERROR_COULD_NOT_RENDER);
 | 
| +
 | 
| +  InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER);
 | 
|    EXPECT_FALSE(pipeline_->IsInitialized());
 | 
|  }
 | 
|  
 | 
| @@ -749,7 +739,6 @@ static void TestNoCallsAfterError(
 | 
|    // Make calls on pipeline after error has occurred.
 | 
|    pipeline->SetPlaybackRate(0.5f);
 | 
|    pipeline->SetVolume(0.5f);
 | 
| -  pipeline->SetPreload(AUTO);
 | 
|  
 | 
|    // No additional tasks should be queued as a result of these calls.
 | 
|    message_loop->AssertIdle();
 | 
| 
 |