Chromium Code Reviews| Index: media/filters/pipeline_integration_test.cc |
| diff --git a/media/filters/pipeline_integration_test.cc b/media/filters/pipeline_integration_test.cc |
| index 2945db2ca2dbb7c4320584d5c9be906878b3fc77..16456764a50407aa3bd272f00a9289b735ce3b00 100644 |
| --- a/media/filters/pipeline_integration_test.cc |
| +++ b/media/filters/pipeline_integration_test.cc |
| @@ -230,11 +230,14 @@ class MockMediaSource { |
| : file_path_(GetTestDataFilePath(filename)), |
| current_position_(0), |
| initial_append_size_(initial_append_size), |
| - mimetype_(mimetype) { |
| - chunk_demuxer_ = new ChunkDemuxer( |
| - base::Bind(&MockMediaSource::DemuxerOpened, base::Unretained(this)), |
| - base::Bind(&MockMediaSource::DemuxerNeedKey, base::Unretained(this)), |
| - LogCB()); |
| + mimetype_(mimetype), |
| + chunk_demuxer_(new ChunkDemuxer( |
| + base::Bind(&MockMediaSource::DemuxerOpened, |
| + base::Unretained(this)), |
| + base::Bind(&MockMediaSource::DemuxerNeedKey, |
| + base::Unretained(this)), |
| + LogCB())), |
| + owned_chunk_demuxer_(chunk_demuxer_) { |
| file_data_ = ReadTestDataFile(filename); |
| @@ -247,7 +250,7 @@ class MockMediaSource { |
| virtual ~MockMediaSource() {} |
| - const scoped_refptr<ChunkDemuxer>& demuxer() const { return chunk_demuxer_; } |
| + scoped_ptr<Demuxer> GetDemuxer() { return owned_chunk_demuxer_.Pass(); } |
| void set_need_key_cb(const NeedKeyCB& need_key_cb) { |
| need_key_cb_ = need_key_cb; |
| @@ -266,7 +269,7 @@ class MockMediaSource { |
| } |
| void AppendData(int size) { |
| - DCHECK(chunk_demuxer_.get()); |
| + DCHECK(chunk_demuxer_); |
| DCHECK_LT(current_position_, file_data_->GetDataSize()); |
| DCHECK_LE(current_position_ + size, file_data_->GetDataSize()); |
| chunk_demuxer_->AppendData( |
| @@ -286,7 +289,7 @@ class MockMediaSource { |
| } |
| void Abort() { |
| - if (!chunk_demuxer_.get()) |
| + if (!chunk_demuxer_) |
| return; |
| chunk_demuxer_->Shutdown(); |
| chunk_demuxer_ = NULL; |
| @@ -326,7 +329,8 @@ class MockMediaSource { |
| int current_position_; |
| int initial_append_size_; |
| std::string mimetype_; |
| - scoped_refptr<ChunkDemuxer> chunk_demuxer_; |
| + ChunkDemuxer* chunk_demuxer_; |
| + scoped_ptr<Demuxer> owned_chunk_demuxer_; |
| NeedKeyCB need_key_cb_; |
| }; |
| @@ -340,7 +344,7 @@ class PipelineIntegrationTest |
| EXPECT_CALL(*this, OnBufferingState(Pipeline::kPrerollCompleted)) |
| .Times(AtMost(1)); |
| pipeline_->Start( |
| - CreateFilterCollection(source->demuxer(), NULL), |
| + CreateFilterCollection(source->GetDemuxer(), NULL), |
| base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)), |
| base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)), |
| QuitOnStatusCB(PIPELINE_OK), |
| @@ -359,7 +363,8 @@ class PipelineIntegrationTest |
| EXPECT_CALL(*this, OnBufferingState(Pipeline::kPrerollCompleted)) |
| .Times(AtMost(1)); |
| pipeline_->Start( |
| - CreateFilterCollection(source->demuxer(), encrypted_media->decryptor()), |
| + CreateFilterCollection(source->GetDemuxer(), |
| + encrypted_media->decryptor()), |
| base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)), |
| base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)), |
| QuitOnStatusCB(PIPELINE_OK), |
| @@ -559,7 +564,8 @@ TEST_F(PipelineIntegrationTest, |
| Play(); |
| EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); |
| - source.Abort(); |
| + // XXX this is use after free because pipeline destroys demuxers on error |
|
scherkus (not reviewing)
2013/04/17 17:21:59
FYI
|
| + // source.Abort(); |
| } |
| // Config changes from clear to encrypted are not currently supported. |
| @@ -587,7 +593,8 @@ TEST_F(PipelineIntegrationTest, |
| Play(); |
| EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); |
| - source.Abort(); |
| + // XXX this is use after free because pipeline destroys demuxers on error |
|
scherkus (not reviewing)
2013/04/17 17:21:59
FYI
|
| + // source.Abort(); |
| } |
| #if defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS) |
| @@ -671,7 +678,8 @@ TEST_F(PipelineIntegrationTest, |
| Play(); |
| EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); |
| - source.Abort(); |
| + // XXX this is use after free because pipeline destroys demuxers on error |
|
scherkus (not reviewing)
2013/04/17 17:21:59
FYI
|
| + // source.Abort(); |
| } |
| // Config changes from encrypted to clear are not currently supported. |
| @@ -699,7 +707,8 @@ TEST_F(PipelineIntegrationTest, |
| Play(); |
| EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); |
| - source.Abort(); |
| + // XXX this is use after free because pipeline destroys demuxers on error |
|
scherkus (not reviewing)
2013/04/17 17:21:59
FYI
|
| + // source.Abort(); |
| } |
| // Verify files which change configuration midstream fail gracefully. |