Chromium Code Reviews| Index: media/filters/decrypting_video_decoder_unittest.cc |
| diff --git a/media/filters/decrypting_video_decoder_unittest.cc b/media/filters/decrypting_video_decoder_unittest.cc |
| index 32ea01c84800953552e9921a8cf0fce1899d416a..d30c928bb55aa8b3f2a7382232ac063fc14bf02d 100644 |
| --- a/media/filters/decrypting_video_decoder_unittest.cc |
| +++ b/media/filters/decrypting_video_decoder_unittest.cc |
| @@ -388,6 +388,29 @@ TEST_F(DecryptingVideoDecoderTest, Reset_DuringIdleAfterDecodedOneFrame) { |
| Reset(); |
| } |
| +// Test resetting when the decoder is in kPendingConfigChange state. |
| +TEST_F(DecryptingVideoDecoderTest, Reset_DuringPendingConfigChange) { |
| + Initialize(); |
| + EnterNormalDecodingState(); |
| + |
| + EXPECT_CALL(*demuxer_, Read(_)) |
| + .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
| + scoped_refptr<DecoderBuffer>())); |
| + EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
| + EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
| + .WillOnce(SaveArg<1>(&pending_init_cb_)); |
| + |
| + decoder_->Read(base::Bind(&DecryptingVideoDecoderTest::FrameReady, |
| + base::Unretained(this))); |
| + EXPECT_FALSE(pending_init_cb_.is_null()); |
| + |
| + EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, IsNull())); |
| + |
| + Reset(); |
| + base::ResetAndReturn(&pending_init_cb_).Run(true); |
| + message_loop_.RunUntilIdle(); |
| +} |
| + |
| // Test resetting when the decoder is in kPendingDemuxerRead state. |
| TEST_F(DecryptingVideoDecoderTest, Reset_DuringPendingDemuxerRead) { |
| Initialize(); |
| @@ -493,6 +516,27 @@ TEST_F(DecryptingVideoDecoderTest, Stop_DuringIdleAfterDecodedOneFrame) { |
| Stop(); |
| } |
| +// Test stopping when the decoder is in kPendingConfigChange state. |
| +TEST_F(DecryptingVideoDecoderTest, Stop_DuringPendingConfigChange) { |
| + Initialize(); |
| + EnterNormalDecodingState(); |
| + |
| + EXPECT_CALL(*demuxer_, Read(_)) |
| + .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
| + scoped_refptr<DecoderBuffer>())); |
| + EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
| + EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
| + .WillOnce(SaveArg<1>(&pending_init_cb_)); |
| + |
| + decoder_->Read(base::Bind(&DecryptingVideoDecoderTest::FrameReady, |
| + base::Unretained(this))); |
| + EXPECT_FALSE(pending_init_cb_.is_null()); |
| + |
| + EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, IsNull())); |
| + |
| + Stop(); |
| +} |
| + |
| // Test stopping when the decoder is in kPendingDemuxerRead state. |
| TEST_F(DecryptingVideoDecoderTest, Stop_DuringPendingDemuxerRead) { |
| Initialize(); |
| @@ -591,16 +635,75 @@ TEST_F(DecryptingVideoDecoderTest, DemuxerRead_AbortedDuringReset) { |
| } |
| // Test config change on the demuxer stream. |
| -TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChanged) { |
| +TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChange) { |
| Initialize(); |
| + EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
| + EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
| + .WillOnce(RunCallback<1>(true)); |
| EXPECT_CALL(*demuxer_, Read(_)) |
| .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
| - scoped_refptr<DecoderBuffer>())); |
| + scoped_refptr<DecoderBuffer>())) |
| + .WillRepeatedly(ReturnBuffer(encrypted_buffer_)); |
| + EXPECT_CALL(*decryptor_, DecryptAndDecodeVideo(_, _)) |
| + .WillRepeatedly(RunCallback<1>(Decryptor::kSuccess, |
| + decoded_video_frame_)); |
| + EXPECT_CALL(statistics_cb_, OnStatistics(_)); |
| + |
| + ReadAndExpectFrameReadyWith(VideoDecoder::kOk, decoded_video_frame_); |
| +} |
| + |
| +// Test config change failure. |
| +TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChangeFailed) { |
| + Initialize(); |
| + |
| + EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
| + EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
| + .WillOnce(RunCallback<1>(false)); |
| + EXPECT_CALL(*demuxer_, Read(_)) |
| + .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
| + scoped_refptr<DecoderBuffer>())) |
| + .WillRepeatedly(ReturnBuffer(encrypted_buffer_)); |
| - // TODO(xhwang): Update this test when kConfigChanged is supported in |
| - // DecryptingVideoDecoder. |
| ReadAndExpectFrameReadyWith(VideoDecoder::kDecodeError, null_video_frame_); |
| } |
| +// Test config change on the demuxer stream during a pending reset. |
| +TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChangeDuringReset) { |
|
acolwell GONE FROM CHROMIUM
2013/01/04 16:03:20
How is this test different from Reset_DuringPendin
xhwang
2013/01/05 00:09:55
Renamed (reordered) these tests so that they are m
|
| + Initialize(); |
| + EnterPendingReadState(); |
| + |
| + Reset(); |
| + |
| + // Even during pending reset, the decoder still needs to be initialized with |
| + // the new config. |
| + EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
| + EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
| + .WillOnce(RunCallback<1>(true)); |
| + EXPECT_CALL(*this, FrameReady(VideoDecoder::kOk, null_video_frame_)); |
| + |
| + base::ResetAndReturn(&pending_demuxer_read_cb_) |
| + .Run(DemuxerStream::kConfigChanged, NULL); |
| + message_loop_.RunUntilIdle(); |
| +} |
| + |
| +// Test failed config change during a pending reset. |
| +TEST_F(DecryptingVideoDecoderTest, DemuxerRead_ConfigChangeFailedDuringReset) { |
| + Initialize(); |
| + EnterPendingReadState(); |
| + |
| + Reset(); |
| + |
| + // Even during pending reset, the decoder still needs to be initialized with |
| + // the new config. |
| + EXPECT_CALL(*decryptor_, DeinitializeDecoder(Decryptor::kVideo)); |
| + EXPECT_CALL(*decryptor_, InitializeVideoDecoderMock(_, _)) |
| + .WillOnce(RunCallback<1>(false)); |
| + EXPECT_CALL(*this, FrameReady(VideoDecoder::kDecodeError, null_video_frame_)); |
| + |
| + base::ResetAndReturn(&pending_demuxer_read_cb_) |
| + .Run(DemuxerStream::kConfigChanged, NULL); |
| + message_loop_.RunUntilIdle(); |
| +} |
| + |
| } // namespace media |