| Index: media/filters/decrypting_audio_decoder_unittest.cc
|
| ===================================================================
|
| --- media/filters/decrypting_audio_decoder_unittest.cc (revision 277175)
|
| +++ media/filters/decrypting_audio_decoder_unittest.cc (working copy)
|
| @@ -19,7 +19,6 @@
|
| #include "testing/gmock/include/gmock/gmock.h"
|
|
|
| using ::testing::_;
|
| -using ::testing::Assign;
|
| using ::testing::AtMost;
|
| using ::testing::IsNull;
|
| using ::testing::SaveArg;
|
| @@ -60,6 +59,13 @@
|
| arg0.Run(param);
|
| }
|
|
|
| +// Mock action which we use to repeatedly call ReadAndExpectFrameReadyWith() if
|
| +// we get kNotEnoughData from a Decode() call to |decoder_|.
|
| +ACTION_P2(CallExpectFrameReadyMoreData, test, buffer) {
|
| + test->ReadAndExpectFrameReadyWith(
|
| + CreateFakeEncryptedBuffer(), AudioDecoder::kNotEnoughData, buffer);
|
| +}
|
| +
|
| MATCHER(IsEndOfStream, "end of stream") {
|
| return (arg->end_of_stream());
|
| }
|
| @@ -101,9 +107,7 @@
|
| kNoTimestamp());
|
| decoded_frame_list_.push_back(decoded_frame_);
|
|
|
| - decoder_->Initialize(config, NewExpectedStatusCB(status),
|
| - base::Bind(&DecryptingAudioDecoderTest::FrameReady,
|
| - base::Unretained(this)));
|
| + decoder_->Initialize(config, NewExpectedStatusCB(status));
|
| message_loop_.RunUntilIdle();
|
| }
|
|
|
| @@ -132,27 +136,35 @@
|
| .WillOnce(RunCallback<1>(true));
|
| EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kAudio, _))
|
| .WillOnce(SaveArg<1>(&key_added_cb_));
|
| - decoder_->Initialize(new_config, NewExpectedStatusCB(PIPELINE_OK),
|
| - base::Bind(&DecryptingAudioDecoderTest::FrameReady,
|
| - base::Unretained(this)));
|
| + decoder_->Initialize(new_config, NewExpectedStatusCB(PIPELINE_OK));
|
| }
|
|
|
| - void DecodeAndExpectFrameReadyWith(
|
| + void ReadAndExpectFrameReadyWith(
|
| scoped_refptr<DecoderBuffer> input,
|
| AudioDecoder::Status status,
|
| - const Decryptor::AudioBuffers& audio_frames) {
|
| - for (Decryptor::AudioBuffers::const_iterator it = audio_frames.begin();
|
| - it != audio_frames.end(); ++it) {
|
| - if ((*it)->end_of_stream()) {
|
| - EXPECT_CALL(*this, FrameReady(IsEndOfStream()));
|
| - } else {
|
| - EXPECT_CALL(*this, FrameReady(*it));
|
| - }
|
| + const scoped_refptr<AudioBuffer>& audio_frame) {
|
| +
|
| + const scoped_refptr<AudioBuffer>& buffer = decoder_->GetDecodeOutput();
|
| +
|
| + if (buffer) {
|
| + EXPECT_EQ(audio_frame, buffer);
|
| + EXPECT_EQ(status, AudioDecoder::kOk);
|
| + return;
|
| }
|
| - EXPECT_CALL(*this, DecodeDone(status));
|
|
|
| + if (status == AudioDecoder::kNotEnoughData)
|
| + // Keep calling again to give it more data if we get kNotEnoughData.
|
| + EXPECT_CALL(*this, FrameReady(status, scoped_refptr<AudioBuffer>(NULL))).
|
| + WillRepeatedly(CallExpectFrameReadyMoreData(this, audio_frame));
|
| + else if (status != AudioDecoder::kOk)
|
| + EXPECT_CALL(*this, FrameReady(status, IsNull()));
|
| + else if (audio_frame->end_of_stream())
|
| + EXPECT_CALL(*this, FrameReady(status, IsEndOfStream()));
|
| + else
|
| + EXPECT_CALL(*this, FrameReady(status, audio_frame));
|
| +
|
| decoder_->Decode(input,
|
| - base::Bind(&DecryptingAudioDecoderTest::DecodeDone,
|
| + base::Bind(&DecryptingAudioDecoderTest::FrameReady,
|
| base::Unretained(this)));
|
| message_loop_.RunUntilIdle();
|
| }
|
| @@ -167,17 +179,17 @@
|
| .WillRepeatedly(RunCallback<1>(Decryptor::kNeedMoreData,
|
| Decryptor::AudioBuffers()));
|
|
|
| - DecodeAndExpectFrameReadyWith(encrypted_buffer_, AudioDecoder::kOk,
|
| - Decryptor::AudioBuffers(1, decoded_frame_));
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, AudioDecoder::kOk, decoded_frame_);
|
| }
|
|
|
| // Sets up expectations and actions to put DecryptingAudioDecoder in an end
|
| // of stream state. This function must be called after
|
| // EnterNormalDecodingState() to work.
|
| void EnterEndOfStreamState() {
|
| - DecodeAndExpectFrameReadyWith(
|
| - DecoderBuffer::CreateEOSBuffer(), AudioDecoder::kOk,
|
| - Decryptor::AudioBuffers(1, end_of_stream_frame_));
|
| + ReadAndExpectFrameReadyWith(DecoderBuffer::CreateEOSBuffer(),
|
| + AudioDecoder::kOk,
|
| + end_of_stream_frame_);
|
| }
|
|
|
| // Make the audio decode callback pending by saving and not firing it.
|
| @@ -187,7 +199,7 @@
|
| .WillOnce(SaveArg<1>(&pending_audio_decode_cb_));
|
|
|
| decoder_->Decode(encrypted_buffer_,
|
| - base::Bind(&DecryptingAudioDecoderTest::DecodeDone,
|
| + base::Bind(&DecryptingAudioDecoderTest::FrameReady,
|
| base::Unretained(this)));
|
| message_loop_.RunUntilIdle();
|
| // Make sure the Decode() on the decoder triggers a DecryptAndDecode() on
|
| @@ -200,7 +212,7 @@
|
| .WillRepeatedly(RunCallback<1>(Decryptor::kNoKey,
|
| Decryptor::AudioBuffers()));
|
| decoder_->Decode(encrypted_buffer_,
|
| - base::Bind(&DecryptingAudioDecoderTest::DecodeDone,
|
| + base::Bind(&DecryptingAudioDecoderTest::FrameReady,
|
| base::Unretained(this)));
|
| message_loop_.RunUntilIdle();
|
| }
|
| @@ -242,8 +254,8 @@
|
|
|
| MOCK_METHOD1(RequestDecryptorNotification, void(const DecryptorReadyCB&));
|
|
|
| - MOCK_METHOD1(FrameReady, void(const scoped_refptr<AudioBuffer>&));
|
| - MOCK_METHOD1(DecodeDone, void(AudioDecoder::Status));
|
| + MOCK_METHOD2(FrameReady,
|
| + void(AudioDecoder::Status, const scoped_refptr<AudioBuffer>&));
|
|
|
| base::MessageLoop message_loop_;
|
| scoped_ptr<DecryptingAudioDecoder> decoder_;
|
| @@ -320,8 +332,8 @@
|
| .WillRepeatedly(RunCallback<1>(Decryptor::kError,
|
| Decryptor::AudioBuffers()));
|
|
|
| - DecodeAndExpectFrameReadyWith(
|
| - encrypted_buffer_, AudioDecoder::kDecodeError, Decryptor::AudioBuffers());
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, AudioDecoder::kDecodeError, NULL);
|
| }
|
|
|
| // Test the case where the decryptor returns kNeedMoreData to ask for more
|
| @@ -336,14 +348,9 @@
|
|
|
| // We expect it to eventually return kOk, with any number of returns of
|
| // kNotEnoughData beforehand.
|
| - bool frame_delivered = false;
|
| - EXPECT_CALL(*this, FrameReady(decoded_frame_))
|
| - .WillOnce(Assign(&frame_delivered, true));
|
| -
|
| - while (!frame_delivered) {
|
| - ASSERT_NO_FATAL_FAILURE(DecodeAndExpectFrameReadyWith(
|
| - encrypted_buffer_, AudioDecoder::kOk, Decryptor::AudioBuffers()));
|
| - }
|
| + EXPECT_CALL(*this, FrameReady(AudioDecoder::kOk, decoded_frame_));
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, AudioDecoder::kNotEnoughData, decoded_frame_);
|
| }
|
|
|
| // Test the case where the decryptor returns multiple decoded frames.
|
| @@ -368,11 +375,10 @@
|
| EXPECT_CALL(*decryptor_, DecryptAndDecodeAudio(_, _))
|
| .WillOnce(RunCallback<1>(Decryptor::kSuccess, decoded_frame_list_));
|
|
|
| - Decryptor::AudioBuffers buffers;
|
| - buffers.push_back(decoded_frame_);
|
| - buffers.push_back(frame_a);
|
| - buffers.push_back(frame_b);
|
| - DecodeAndExpectFrameReadyWith(encrypted_buffer_, AudioDecoder::kOk, buffers);
|
| + ReadAndExpectFrameReadyWith(
|
| + encrypted_buffer_, AudioDecoder::kOk, decoded_frame_);
|
| + ReadAndExpectFrameReadyWith(encrypted_buffer_, AudioDecoder::kOk, frame_a);
|
| + ReadAndExpectFrameReadyWith(encrypted_buffer_, AudioDecoder::kOk, frame_b);
|
| }
|
|
|
| // Test the case where the decryptor receives end-of-stream buffer.
|
| @@ -410,8 +416,7 @@
|
|
|
| EXPECT_CALL(*decryptor_, DecryptAndDecodeAudio(_, _))
|
| .WillRepeatedly(RunCallback<1>(Decryptor::kSuccess, decoded_frame_list_));
|
| - EXPECT_CALL(*this, FrameReady(decoded_frame_));
|
| - EXPECT_CALL(*this, DecodeDone(AudioDecoder::kOk));
|
| + EXPECT_CALL(*this, FrameReady(AudioDecoder::kOk, decoded_frame_));
|
| key_added_cb_.Run();
|
| message_loop_.RunUntilIdle();
|
| }
|
| @@ -424,8 +429,7 @@
|
|
|
| EXPECT_CALL(*decryptor_, DecryptAndDecodeAudio(_, _))
|
| .WillRepeatedly(RunCallback<1>(Decryptor::kSuccess, decoded_frame_list_));
|
| - EXPECT_CALL(*this, FrameReady(decoded_frame_));
|
| - EXPECT_CALL(*this, DecodeDone(AudioDecoder::kOk));
|
| + EXPECT_CALL(*this, FrameReady(AudioDecoder::kOk, decoded_frame_));
|
| // The audio decode callback is returned after the correct decryption key is
|
| // added.
|
| key_added_cb_.Run();
|
| @@ -454,7 +458,7 @@
|
| Initialize();
|
| EnterPendingDecodeState();
|
|
|
| - EXPECT_CALL(*this, DecodeDone(AudioDecoder::kAborted));
|
| + EXPECT_CALL(*this, FrameReady(AudioDecoder::kAborted, IsNull()));
|
|
|
| Reset();
|
| }
|
| @@ -464,7 +468,7 @@
|
| Initialize();
|
| EnterWaitingForKeyState();
|
|
|
| - EXPECT_CALL(*this, DecodeDone(AudioDecoder::kAborted));
|
| + EXPECT_CALL(*this, FrameReady(AudioDecoder::kAborted, IsNull()));
|
|
|
| Reset();
|
| }
|
|
|