| Index: media/filters/ffmpeg_demuxer_unittest.cc
 | 
| diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
 | 
| index 3189e080c69eaedffedd81401e1a21346f93c1d5..520b59bf1bd349fc1520613998e7b58f0efb9ea3 100644
 | 
| --- a/media/filters/ffmpeg_demuxer_unittest.cc
 | 
| +++ b/media/filters/ffmpeg_demuxer_unittest.cc
 | 
| @@ -41,19 +41,7 @@ MATCHER(IsEndOfStreamBuffer,
 | 
|  class FFmpegDemuxerTest : public testing::Test {
 | 
|   protected:
 | 
|  
 | 
| -  FFmpegDemuxerTest() {
 | 
| -    // Create an FFmpegDemuxer with local data source.
 | 
| -    demuxer_ = new FFmpegDemuxer(&message_loop_, true);
 | 
| -    demuxer_->disable_first_seek_hack_for_testing();
 | 
| -
 | 
| -    // Inject a filter host and message loop and prepare a data source.
 | 
| -    demuxer_->set_host(&host_);
 | 
| -
 | 
| -    EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber());
 | 
| -    EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber());
 | 
| -    EXPECT_CALL(host_, SetCurrentReadPosition(_))
 | 
| -        .WillRepeatedly(SaveArg<0>(¤t_read_position_));
 | 
| -  }
 | 
| +  FFmpegDemuxerTest() {}
 | 
|  
 | 
|    virtual ~FFmpegDemuxerTest() {
 | 
|      if (demuxer_) {
 | 
| @@ -67,34 +55,33 @@ class FFmpegDemuxerTest : public testing::Test {
 | 
|      demuxer_ = NULL;
 | 
|    }
 | 
|  
 | 
| -  scoped_refptr<FileDataSource> CreateDataSource(const std::string& name) {
 | 
| -    return CreateDataSource(name, false);
 | 
| +  void CreateDemuxer(const std::string& name) {
 | 
| +    CreateDemuxer(name, false);
 | 
|    }
 | 
|  
 | 
| -  scoped_refptr<FileDataSource> CreateDataSource(const std::string& name,
 | 
| -                                                 bool disable_file_size) {
 | 
| -    FilePath file_path;
 | 
| -    EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &file_path));
 | 
| +  void CreateDemuxer(const std::string& name, bool disable_file_size) {
 | 
| +    CHECK(!demuxer_);
 | 
|  
 | 
| -    file_path = file_path.Append(FILE_PATH_LITERAL("media"))
 | 
| -        .Append(FILE_PATH_LITERAL("test"))
 | 
| -        .Append(FILE_PATH_LITERAL("data"))
 | 
| -        .AppendASCII(name);
 | 
| +    EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber());
 | 
| +    EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber());
 | 
| +    EXPECT_CALL(host_, SetCurrentReadPosition(_))
 | 
| +        .WillRepeatedly(SaveArg<0>(¤t_read_position_));
 | 
|  
 | 
| -    scoped_refptr<FileDataSource> data_source = new FileDataSource(
 | 
| -        disable_file_size);
 | 
| +    CreateDataSource(name, disable_file_size);
 | 
|  
 | 
| -    EXPECT_EQ(PIPELINE_OK, data_source->Initialize(file_path.MaybeAsASCII()));
 | 
| +    // Create an FFmpegDemuxer with local data source.
 | 
| +    demuxer_ = new FFmpegDemuxer(&message_loop_, data_source_, true);
 | 
| +    demuxer_->disable_first_seek_hack_for_testing();
 | 
|  
 | 
| -    return data_source.get();
 | 
| +    // Inject a filter host and message loop and prepare a data source.
 | 
| +    demuxer_->set_host(&host_);
 | 
|    }
 | 
|  
 | 
|    MOCK_METHOD1(CheckPoint, void(int v));
 | 
|  
 | 
| -  // Initializes FFmpegDemuxer.
 | 
| -  void InitializeDemuxer(const scoped_refptr<DataSource>& data_source) {
 | 
| +  void InitializeDemuxer() {
 | 
|      EXPECT_CALL(host_, SetDuration(_));
 | 
| -    demuxer_->Initialize(data_source, NewExpectedStatusCB(PIPELINE_OK));
 | 
| +    demuxer_->Initialize(NewExpectedStatusCB(PIPELINE_OK));
 | 
|      message_loop_.RunAllPending();
 | 
|    }
 | 
|  
 | 
| @@ -120,9 +107,8 @@ class FFmpegDemuxerTest : public testing::Test {
 | 
|    // returns true if the bitrate is valid, false otherwise.
 | 
|    bool VideoHasValidBitrate(
 | 
|        const std::string& file_name, bool disable_file_size) {
 | 
| -    scoped_refptr<FileDataSource> data_source =
 | 
| -        CreateDataSource(file_name, disable_file_size);
 | 
| -    InitializeDemuxer(data_source);
 | 
| +    CreateDemuxer(file_name, disable_file_size);
 | 
| +    InitializeDemuxer();
 | 
|      return demuxer_->GetBitrate() > 0;
 | 
|    }
 | 
|  
 | 
| @@ -133,6 +119,7 @@ class FFmpegDemuxerTest : public testing::Test {
 | 
|    }
 | 
|  
 | 
|    // Fixture members.
 | 
| +  scoped_refptr<FileDataSource> data_source_;
 | 
|    scoped_refptr<FFmpegDemuxer> demuxer_;
 | 
|    StrictMock<MockDemuxerHost> host_;
 | 
|    MessageLoop message_loop_;
 | 
| @@ -140,14 +127,29 @@ class FFmpegDemuxerTest : public testing::Test {
 | 
|    int64 current_read_position_;
 | 
|  
 | 
|   private:
 | 
| +  void CreateDataSource(const std::string& name, bool disable_file_size) {
 | 
| +    CHECK(!data_source_);
 | 
| +
 | 
| +    FilePath file_path;
 | 
| +    EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &file_path));
 | 
| +
 | 
| +    file_path = file_path.Append(FILE_PATH_LITERAL("media"))
 | 
| +        .Append(FILE_PATH_LITERAL("test"))
 | 
| +        .Append(FILE_PATH_LITERAL("data"))
 | 
| +        .AppendASCII(name);
 | 
| +
 | 
| +    data_source_ = new FileDataSource(disable_file_size);
 | 
| +    EXPECT_EQ(PIPELINE_OK, data_source_->Initialize(file_path.MaybeAsASCII()));
 | 
| +  }
 | 
| +
 | 
|    DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerTest);
 | 
|  };
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) {
 | 
|    // Simulate avformat_open_input() failing.
 | 
| +  CreateDemuxer("ten_byte_file"),
 | 
|    EXPECT_CALL(host_, SetCurrentReadPosition(_));
 | 
| -  demuxer_->Initialize(CreateDataSource("ten_byte_file"),
 | 
| -                       NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN));
 | 
| +  demuxer_->Initialize(NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN));
 | 
|  
 | 
|    message_loop_.RunAllPending();
 | 
|  }
 | 
| @@ -156,31 +158,32 @@ TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) {
 | 
|  // avformat_open_input(), but has avformat_find_stream_info() fail.
 | 
|  //
 | 
|  //TEST_F(FFmpegDemuxerTest, Initialize_ParseFails) {
 | 
| +//  CreateDemuxer("find_stream_info_fail.webm");
 | 
|  //  demuxer_->Initialize(
 | 
| -//      CreateDataSource("find_stream_info_fail.webm"),
 | 
|  //      NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_PARSE));
 | 
|  //  message_loop_.RunAllPending();
 | 
|  //}
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) {
 | 
|    // Open a file with no streams whatsoever.
 | 
| +  CreateDemuxer("no_streams.webm");
 | 
|    EXPECT_CALL(host_, SetCurrentReadPosition(_));
 | 
|    demuxer_->Initialize(
 | 
| -      CreateDataSource("no_streams.webm"),
 | 
|        NewExpectedStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS));
 | 
|    message_loop_.RunAllPending();
 | 
|  }
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, Initialize_NoAudioVideo) {
 | 
|    // Open a file containing streams but none of which are audio/video streams.
 | 
| +  CreateDemuxer("no_audio_video.webm");
 | 
|    demuxer_->Initialize(
 | 
| -      CreateDataSource("no_audio_video.webm"),
 | 
|        NewExpectedStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS));
 | 
|    message_loop_.RunAllPending();
 | 
|  }
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, Initialize_Successful) {
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Video stream should be present.
 | 
|    scoped_refptr<DemuxerStream> stream =
 | 
| @@ -230,7 +233,8 @@ TEST_F(FFmpegDemuxerTest, Initialize_Multitrack) {
 | 
|    //   Stream #4: Audio (16-bit signed little endian PCM)
 | 
|    //
 | 
|    // We should only pick the first audio/video streams we come across.
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240-multitrack.webm"));
 | 
| +  CreateDemuxer("bear-320x240-multitrack.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Video stream should be VP8.
 | 
|    scoped_refptr<DemuxerStream> stream =
 | 
| @@ -251,7 +255,8 @@ TEST_F(FFmpegDemuxerTest, Initialize_Multitrack) {
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, Read_Audio) {
 | 
|    // We test that on a successful audio packet read.
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Attempt a read from the audio stream and run the message loop until done.
 | 
|    scoped_refptr<DemuxerStream> audio =
 | 
| @@ -271,7 +276,8 @@ TEST_F(FFmpegDemuxerTest, Read_Audio) {
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, Read_Video) {
 | 
|    // We test that on a successful video packet read.
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Attempt a read from the video stream and run the message loop until done.
 | 
|    scoped_refptr<DemuxerStream> video =
 | 
| @@ -292,7 +298,8 @@ TEST_F(FFmpegDemuxerTest, Read_Video) {
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, Read_VideoNonZeroStart) {
 | 
|    // Test the start time is the first timestamp of the video and audio stream.
 | 
| -  InitializeDemuxer(CreateDataSource("nonzero-start-time.webm"));
 | 
| +  CreateDemuxer("nonzero-start-time.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Attempt a read from the video stream and run the message loop until done.
 | 
|    scoped_refptr<DemuxerStream> video =
 | 
| @@ -323,7 +330,8 @@ TEST_F(FFmpegDemuxerTest, Read_VideoNonZeroStart) {
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, Read_EndOfStream) {
 | 
|    // Verify that end of stream buffers are created.
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // We should now expect an end of stream buffer.
 | 
|    scoped_refptr<DemuxerStream> audio =
 | 
| @@ -356,7 +364,8 @@ TEST_F(FFmpegDemuxerTest, Read_EndOfStream) {
 | 
|  TEST_F(FFmpegDemuxerTest, Seek) {
 | 
|    // We're testing that the demuxer frees all queued packets when it receives
 | 
|    // a Seek().
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Get our streams.
 | 
|    scoped_refptr<DemuxerStream> video =
 | 
| @@ -434,7 +443,8 @@ class MockReadCB : public base::RefCountedThreadSafe<MockReadCB> {
 | 
|  TEST_F(FFmpegDemuxerTest, Stop) {
 | 
|    // Tests that calling Read() on a stopped demuxer stream immediately deletes
 | 
|    // the callback.
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Get our stream.
 | 
|    scoped_refptr<DemuxerStream> audio =
 | 
| @@ -470,7 +480,8 @@ TEST_F(FFmpegDemuxerTest, Stop) {
 | 
|  // This test verifies that DemuxerStream::Read() does not use an invalid demuxer
 | 
|  // pointer (no crash occurs) and calls the callback with an EndOfStream buffer.
 | 
|  TEST_F(FFmpegDemuxerTest, StreamReadAfterStopAndDemuxerDestruction) {
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Get our stream.
 | 
|    scoped_refptr<DemuxerStream> audio =
 | 
| @@ -513,7 +524,8 @@ TEST_F(FFmpegDemuxerTest, DisableAudioStream) {
 | 
|    // 1. Initialize the demuxer with audio and video stream.
 | 
|    // 2. Send a "disable audio stream" message to the demuxer.
 | 
|    // 3. Demuxer will free audio packets even if audio stream was initialized.
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Submit a "disable audio stream" message to the demuxer.
 | 
|    demuxer_->OnAudioRendererDisabled();
 | 
| @@ -548,8 +560,9 @@ TEST_F(FFmpegDemuxerTest, DisableAudioStream) {
 | 
|  
 | 
|  class MockFFmpegDemuxer : public FFmpegDemuxer {
 | 
|   public:
 | 
| -  explicit MockFFmpegDemuxer(MessageLoop* message_loop)
 | 
| -      : FFmpegDemuxer(message_loop, true) {
 | 
| +  MockFFmpegDemuxer(MessageLoop* message_loop,
 | 
| +                    const scoped_refptr<DataSource>& data_source)
 | 
| +      : FFmpegDemuxer(message_loop, data_source, true) {
 | 
|    }
 | 
|    virtual ~MockFFmpegDemuxer() {}
 | 
|  
 | 
| @@ -575,10 +588,8 @@ TEST_F(FFmpegDemuxerTest, ProtocolRead) {
 | 
|  
 | 
|    // Creates a demuxer.
 | 
|    scoped_refptr<MockFFmpegDemuxer> demuxer(
 | 
| -      new MockFFmpegDemuxer(&message_loop_));
 | 
| -  ASSERT_TRUE(demuxer);
 | 
| +      new MockFFmpegDemuxer(&message_loop_, data_source));
 | 
|    demuxer->set_host(&host_);
 | 
| -  demuxer->data_source_ = data_source;
 | 
|  
 | 
|    uint8 kBuffer[1];
 | 
|    InSequence s;
 | 
| @@ -643,8 +654,8 @@ TEST_F(FFmpegDemuxerTest, GetBitrate_UnsetInContainer_NoFileSize) {
 | 
|  }
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, ProtocolGetSetPosition) {
 | 
| -  scoped_refptr<DataSource> data_source = CreateDataSource("bear-320x240.webm");
 | 
| -  InitializeDemuxer(data_source);
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    InSequence s;
 | 
|  
 | 
| @@ -663,29 +674,30 @@ TEST_F(FFmpegDemuxerTest, ProtocolGetSetPosition) {
 | 
|  }
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, ProtocolGetSize) {
 | 
| -  scoped_refptr<DataSource> data_source = CreateDataSource("bear-320x240.webm");
 | 
| -  InitializeDemuxer(data_source);
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    int64 data_source_size = 0;
 | 
|    int64 demuxer_size = 0;
 | 
| -  EXPECT_TRUE(data_source->GetSize(&data_source_size));
 | 
| +  EXPECT_TRUE(data_source_->GetSize(&data_source_size));
 | 
|    EXPECT_TRUE(demuxer_->GetSize(&demuxer_size));
 | 
|    EXPECT_NE(0, data_source_size);
 | 
|    EXPECT_EQ(data_source_size, demuxer_size);
 | 
|  }
 | 
|  
 | 
|  TEST_F(FFmpegDemuxerTest, ProtocolIsStreaming) {
 | 
| -  scoped_refptr<DataSource> data_source = CreateDataSource("bear-320x240.webm");
 | 
| -  InitializeDemuxer(data_source);
 | 
| +  CreateDemuxer("bear-320x240.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
| -  EXPECT_FALSE(data_source->IsStreaming());
 | 
| +  EXPECT_FALSE(data_source_->IsStreaming());
 | 
|    EXPECT_FALSE(demuxer_->IsStreaming());
 | 
|  }
 | 
|  
 | 
|  // Verify that seek works properly when the WebM cues data is at the start of
 | 
|  // the file instead of at the end.
 | 
|  TEST_F(FFmpegDemuxerTest, SeekWithCuesBeforeFirstCluster) {
 | 
| -  InitializeDemuxer(CreateDataSource("bear-320x240-cues-in-front.webm"));
 | 
| +  CreateDemuxer("bear-320x240-cues-in-front.webm");
 | 
| +  InitializeDemuxer();
 | 
|  
 | 
|    // Get our streams.
 | 
|    scoped_refptr<DemuxerStream> video =
 | 
| 
 |