OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/callback_helpers.h" | 11 #include "base/callback_helpers.h" |
12 #include "base/macros.h" | 12 #include "base/macros.h" |
13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "base/run_loop.h" |
14 #include "media/base/decoder_buffer.h" | 15 #include "media/base/decoder_buffer.h" |
15 #include "media/base/decrypt_config.h" | 16 #include "media/base/decrypt_config.h" |
16 #include "media/base/gmock_callback_support.h" | 17 #include "media/base/gmock_callback_support.h" |
17 #include "media/base/media_util.h" | 18 #include "media/base/media_util.h" |
18 #include "media/base/mock_filters.h" | 19 #include "media/base/mock_filters.h" |
19 #include "media/base/test_helpers.h" | 20 #include "media/base/test_helpers.h" |
20 #include "media/filters/decrypting_demuxer_stream.h" | 21 #include "media/filters/decrypting_demuxer_stream.h" |
21 #include "testing/gmock/include/gmock/gmock.h" | 22 #include "testing/gmock/include/gmock/gmock.h" |
22 | 23 |
23 using ::testing::_; | 24 using ::testing::_; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 input_video_stream_( | 77 input_video_stream_( |
77 new StrictMock<MockDemuxerStream>(DemuxerStream::VIDEO)), | 78 new StrictMock<MockDemuxerStream>(DemuxerStream::VIDEO)), |
78 clear_buffer_(CreateFakeEncryptedStreamBuffer(true)), | 79 clear_buffer_(CreateFakeEncryptedStreamBuffer(true)), |
79 encrypted_buffer_(CreateFakeEncryptedStreamBuffer(false)), | 80 encrypted_buffer_(CreateFakeEncryptedStreamBuffer(false)), |
80 decrypted_buffer_(new DecoderBuffer(kFakeBufferSize)) {} | 81 decrypted_buffer_(new DecoderBuffer(kFakeBufferSize)) {} |
81 | 82 |
82 virtual ~DecryptingDemuxerStreamTest() { | 83 virtual ~DecryptingDemuxerStreamTest() { |
83 if (is_initialized_) | 84 if (is_initialized_) |
84 EXPECT_CALL(*decryptor_, CancelDecrypt(_)); | 85 EXPECT_CALL(*decryptor_, CancelDecrypt(_)); |
85 demuxer_stream_.reset(); | 86 demuxer_stream_.reset(); |
86 message_loop_.RunUntilIdle(); | 87 base::RunLoop().RunUntilIdle(); |
87 } | 88 } |
88 | 89 |
89 void OnInitialized(PipelineStatus expected_status, PipelineStatus status) { | 90 void OnInitialized(PipelineStatus expected_status, PipelineStatus status) { |
90 EXPECT_EQ(expected_status, status); | 91 EXPECT_EQ(expected_status, status); |
91 is_initialized_ = status == PIPELINE_OK; | 92 is_initialized_ = status == PIPELINE_OK; |
92 } | 93 } |
93 | 94 |
94 void InitializeAudioAndExpectStatus(const AudioDecoderConfig& config, | 95 void InitializeAudioAndExpectStatus(const AudioDecoderConfig& config, |
95 PipelineStatus expected_status) { | 96 PipelineStatus expected_status) { |
96 input_audio_stream_->set_audio_decoder_config(config); | 97 input_audio_stream_->set_audio_decoder_config(config); |
97 demuxer_stream_->Initialize( | 98 demuxer_stream_->Initialize( |
98 input_audio_stream_.get(), cdm_context_.get(), | 99 input_audio_stream_.get(), cdm_context_.get(), |
99 base::Bind(&DecryptingDemuxerStreamTest::OnInitialized, | 100 base::Bind(&DecryptingDemuxerStreamTest::OnInitialized, |
100 base::Unretained(this), expected_status)); | 101 base::Unretained(this), expected_status)); |
101 message_loop_.RunUntilIdle(); | 102 base::RunLoop().RunUntilIdle(); |
102 } | 103 } |
103 | 104 |
104 void InitializeVideoAndExpectStatus(const VideoDecoderConfig& config, | 105 void InitializeVideoAndExpectStatus(const VideoDecoderConfig& config, |
105 PipelineStatus expected_status) { | 106 PipelineStatus expected_status) { |
106 input_video_stream_->set_video_decoder_config(config); | 107 input_video_stream_->set_video_decoder_config(config); |
107 demuxer_stream_->Initialize( | 108 demuxer_stream_->Initialize( |
108 input_video_stream_.get(), cdm_context_.get(), | 109 input_video_stream_.get(), cdm_context_.get(), |
109 base::Bind(&DecryptingDemuxerStreamTest::OnInitialized, | 110 base::Bind(&DecryptingDemuxerStreamTest::OnInitialized, |
110 base::Unretained(this), expected_status)); | 111 base::Unretained(this), expected_status)); |
111 message_loop_.RunUntilIdle(); | 112 base::RunLoop().RunUntilIdle(); |
112 } | 113 } |
113 | 114 |
114 enum CdmType { CDM_WITHOUT_DECRYPTOR, CDM_WITH_DECRYPTOR }; | 115 enum CdmType { CDM_WITHOUT_DECRYPTOR, CDM_WITH_DECRYPTOR }; |
115 | 116 |
116 void SetCdmType(CdmType cdm_type) { | 117 void SetCdmType(CdmType cdm_type) { |
117 const bool has_decryptor = cdm_type == CDM_WITH_DECRYPTOR; | 118 const bool has_decryptor = cdm_type == CDM_WITH_DECRYPTOR; |
118 EXPECT_CALL(*cdm_context_, GetDecryptor()) | 119 EXPECT_CALL(*cdm_context_, GetDecryptor()) |
119 .WillRepeatedly(Return(has_decryptor ? decryptor_.get() : nullptr)); | 120 .WillRepeatedly(Return(has_decryptor ? decryptor_.get() : nullptr)); |
120 } | 121 } |
121 | 122 |
(...skipping 29 matching lines...) Expand all Loading... |
151 const scoped_refptr<DecoderBuffer>& decrypted_buffer) { | 152 const scoped_refptr<DecoderBuffer>& decrypted_buffer) { |
152 if (status != DemuxerStream::kOk) | 153 if (status != DemuxerStream::kOk) |
153 EXPECT_CALL(*this, BufferReady(status, IsNull())); | 154 EXPECT_CALL(*this, BufferReady(status, IsNull())); |
154 else if (decrypted_buffer->end_of_stream()) | 155 else if (decrypted_buffer->end_of_stream()) |
155 EXPECT_CALL(*this, BufferReady(status, IsEndOfStream())); | 156 EXPECT_CALL(*this, BufferReady(status, IsEndOfStream())); |
156 else | 157 else |
157 EXPECT_CALL(*this, BufferReady(status, decrypted_buffer)); | 158 EXPECT_CALL(*this, BufferReady(status, decrypted_buffer)); |
158 | 159 |
159 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, | 160 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, |
160 base::Unretained(this))); | 161 base::Unretained(this))); |
161 message_loop_.RunUntilIdle(); | 162 base::RunLoop().RunUntilIdle(); |
162 } | 163 } |
163 | 164 |
164 void EnterClearReadingState() { | 165 void EnterClearReadingState() { |
165 EXPECT_TRUE(clear_buffer_->decrypt_config()); | 166 EXPECT_TRUE(clear_buffer_->decrypt_config()); |
166 EXPECT_CALL(*input_audio_stream_, Read(_)) | 167 EXPECT_CALL(*input_audio_stream_, Read(_)) |
167 .WillOnce(ReturnBuffer(clear_buffer_)); | 168 .WillOnce(ReturnBuffer(clear_buffer_)); |
168 | 169 |
169 // For clearbuffer, decryptor->Decrypt() will not be called. | 170 // For clearbuffer, decryptor->Decrypt() will not be called. |
170 | 171 |
171 scoped_refptr<DecoderBuffer> decrypted_buffer; | 172 scoped_refptr<DecoderBuffer> decrypted_buffer; |
172 EXPECT_CALL(*this, BufferReady(DemuxerStream::kOk, _)) | 173 EXPECT_CALL(*this, BufferReady(DemuxerStream::kOk, _)) |
173 .WillOnce(SaveArg<1>(&decrypted_buffer)); | 174 .WillOnce(SaveArg<1>(&decrypted_buffer)); |
174 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, | 175 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, |
175 base::Unretained(this))); | 176 base::Unretained(this))); |
176 message_loop_.RunUntilIdle(); | 177 base::RunLoop().RunUntilIdle(); |
177 | 178 |
178 EXPECT_FALSE(decrypted_buffer->decrypt_config()); | 179 EXPECT_FALSE(decrypted_buffer->decrypt_config()); |
179 } | 180 } |
180 | 181 |
181 // Sets up expectations and actions to put DecryptingDemuxerStream in an | 182 // Sets up expectations and actions to put DecryptingDemuxerStream in an |
182 // active normal reading state. | 183 // active normal reading state. |
183 void EnterNormalReadingState() { | 184 void EnterNormalReadingState() { |
184 EXPECT_CALL(*input_audio_stream_, Read(_)) | 185 EXPECT_CALL(*input_audio_stream_, Read(_)) |
185 .WillOnce(ReturnBuffer(encrypted_buffer_)); | 186 .WillOnce(ReturnBuffer(encrypted_buffer_)); |
186 EXPECT_CALL(*decryptor_, Decrypt(_, _, _)) | 187 EXPECT_CALL(*decryptor_, Decrypt(_, _, _)) |
187 .WillOnce(RunCallback<2>(Decryptor::kSuccess, decrypted_buffer_)); | 188 .WillOnce(RunCallback<2>(Decryptor::kSuccess, decrypted_buffer_)); |
188 | 189 |
189 ReadAndExpectBufferReadyWith(DemuxerStream::kOk, decrypted_buffer_); | 190 ReadAndExpectBufferReadyWith(DemuxerStream::kOk, decrypted_buffer_); |
190 } | 191 } |
191 | 192 |
192 // Make the read callback pending by saving and not firing it. | 193 // Make the read callback pending by saving and not firing it. |
193 void EnterPendingReadState() { | 194 void EnterPendingReadState() { |
194 EXPECT_TRUE(pending_demuxer_read_cb_.is_null()); | 195 EXPECT_TRUE(pending_demuxer_read_cb_.is_null()); |
195 EXPECT_CALL(*input_audio_stream_, Read(_)) | 196 EXPECT_CALL(*input_audio_stream_, Read(_)) |
196 .WillOnce(SaveArg<0>(&pending_demuxer_read_cb_)); | 197 .WillOnce(SaveArg<0>(&pending_demuxer_read_cb_)); |
197 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, | 198 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, |
198 base::Unretained(this))); | 199 base::Unretained(this))); |
199 message_loop_.RunUntilIdle(); | 200 base::RunLoop().RunUntilIdle(); |
200 // Make sure the Read() triggers a Read() on the input demuxer stream. | 201 // Make sure the Read() triggers a Read() on the input demuxer stream. |
201 EXPECT_FALSE(pending_demuxer_read_cb_.is_null()); | 202 EXPECT_FALSE(pending_demuxer_read_cb_.is_null()); |
202 } | 203 } |
203 | 204 |
204 // Make the decrypt callback pending by saving and not firing it. | 205 // Make the decrypt callback pending by saving and not firing it. |
205 void EnterPendingDecryptState() { | 206 void EnterPendingDecryptState() { |
206 EXPECT_TRUE(pending_decrypt_cb_.is_null()); | 207 EXPECT_TRUE(pending_decrypt_cb_.is_null()); |
207 EXPECT_CALL(*input_audio_stream_, Read(_)) | 208 EXPECT_CALL(*input_audio_stream_, Read(_)) |
208 .WillRepeatedly(ReturnBuffer(encrypted_buffer_)); | 209 .WillRepeatedly(ReturnBuffer(encrypted_buffer_)); |
209 EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _)) | 210 EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _)) |
210 .WillOnce(SaveArg<2>(&pending_decrypt_cb_)); | 211 .WillOnce(SaveArg<2>(&pending_decrypt_cb_)); |
211 | 212 |
212 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, | 213 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, |
213 base::Unretained(this))); | 214 base::Unretained(this))); |
214 message_loop_.RunUntilIdle(); | 215 base::RunLoop().RunUntilIdle(); |
215 // Make sure Read() triggers a Decrypt() on the decryptor. | 216 // Make sure Read() triggers a Decrypt() on the decryptor. |
216 EXPECT_FALSE(pending_decrypt_cb_.is_null()); | 217 EXPECT_FALSE(pending_decrypt_cb_.is_null()); |
217 } | 218 } |
218 | 219 |
219 void EnterWaitingForKeyState() { | 220 void EnterWaitingForKeyState() { |
220 EXPECT_CALL(*input_audio_stream_, Read(_)) | 221 EXPECT_CALL(*input_audio_stream_, Read(_)) |
221 .WillRepeatedly(ReturnBuffer(encrypted_buffer_)); | 222 .WillRepeatedly(ReturnBuffer(encrypted_buffer_)); |
222 EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _)) | 223 EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _)) |
223 .WillRepeatedly(RunCallback<2>(Decryptor::kNoKey, | 224 .WillRepeatedly(RunCallback<2>(Decryptor::kNoKey, |
224 scoped_refptr<DecoderBuffer>())); | 225 scoped_refptr<DecoderBuffer>())); |
225 EXPECT_CALL(*this, OnWaitingForDecryptionKey()); | 226 EXPECT_CALL(*this, OnWaitingForDecryptionKey()); |
226 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, | 227 demuxer_stream_->Read(base::Bind(&DecryptingDemuxerStreamTest::BufferReady, |
227 base::Unretained(this))); | 228 base::Unretained(this))); |
228 message_loop_.RunUntilIdle(); | 229 base::RunLoop().RunUntilIdle(); |
229 } | 230 } |
230 | 231 |
231 void AbortPendingDecryptCB() { | 232 void AbortPendingDecryptCB() { |
232 if (!pending_decrypt_cb_.is_null()) { | 233 if (!pending_decrypt_cb_.is_null()) { |
233 base::ResetAndReturn(&pending_decrypt_cb_).Run(Decryptor::kSuccess, NULL); | 234 base::ResetAndReturn(&pending_decrypt_cb_).Run(Decryptor::kSuccess, NULL); |
234 } | 235 } |
235 } | 236 } |
236 | 237 |
237 void SatisfyPendingDemuxerReadCB(DemuxerStream::Status status) { | 238 void SatisfyPendingDemuxerReadCB(DemuxerStream::Status status) { |
238 scoped_refptr<DecoderBuffer> buffer = | 239 scoped_refptr<DecoderBuffer> buffer = |
239 (status == DemuxerStream::kOk) ? encrypted_buffer_ : NULL; | 240 (status == DemuxerStream::kOk) ? encrypted_buffer_ : NULL; |
240 base::ResetAndReturn(&pending_demuxer_read_cb_).Run(status, buffer); | 241 base::ResetAndReturn(&pending_demuxer_read_cb_).Run(status, buffer); |
241 } | 242 } |
242 | 243 |
243 void Reset() { | 244 void Reset() { |
244 EXPECT_CALL(*decryptor_, CancelDecrypt(Decryptor::kAudio)) | 245 EXPECT_CALL(*decryptor_, CancelDecrypt(Decryptor::kAudio)) |
245 .WillRepeatedly(InvokeWithoutArgs( | 246 .WillRepeatedly(InvokeWithoutArgs( |
246 this, &DecryptingDemuxerStreamTest::AbortPendingDecryptCB)); | 247 this, &DecryptingDemuxerStreamTest::AbortPendingDecryptCB)); |
247 | 248 |
248 demuxer_stream_->Reset(NewExpectedClosure()); | 249 demuxer_stream_->Reset(NewExpectedClosure()); |
249 message_loop_.RunUntilIdle(); | 250 base::RunLoop().RunUntilIdle(); |
250 } | 251 } |
251 | 252 |
252 MOCK_METHOD2(BufferReady, void(DemuxerStream::Status, | 253 MOCK_METHOD2(BufferReady, void(DemuxerStream::Status, |
253 const scoped_refptr<DecoderBuffer>&)); | 254 const scoped_refptr<DecoderBuffer>&)); |
254 MOCK_METHOD0(OnWaitingForDecryptionKey, void(void)); | 255 MOCK_METHOD0(OnWaitingForDecryptionKey, void(void)); |
255 | 256 |
256 base::MessageLoop message_loop_; | 257 base::MessageLoop message_loop_; |
257 std::unique_ptr<DecryptingDemuxerStream> demuxer_stream_; | 258 std::unique_ptr<DecryptingDemuxerStream> demuxer_stream_; |
258 std::unique_ptr<StrictMock<MockCdmContext>> cdm_context_; | 259 std::unique_ptr<StrictMock<MockCdmContext>> cdm_context_; |
259 std::unique_ptr<StrictMock<MockDecryptor>> decryptor_; | 260 std::unique_ptr<StrictMock<MockDecryptor>> decryptor_; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 // Test the case where the a key is added when the decryptor is in | 350 // Test the case where the a key is added when the decryptor is in |
350 // kWaitingForKey state. | 351 // kWaitingForKey state. |
351 TEST_F(DecryptingDemuxerStreamTest, KeyAdded_DuringWaitingForKey) { | 352 TEST_F(DecryptingDemuxerStreamTest, KeyAdded_DuringWaitingForKey) { |
352 Initialize(); | 353 Initialize(); |
353 EnterWaitingForKeyState(); | 354 EnterWaitingForKeyState(); |
354 | 355 |
355 EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _)) | 356 EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _)) |
356 .WillRepeatedly(RunCallback<2>(Decryptor::kSuccess, decrypted_buffer_)); | 357 .WillRepeatedly(RunCallback<2>(Decryptor::kSuccess, decrypted_buffer_)); |
357 EXPECT_CALL(*this, BufferReady(DemuxerStream::kOk, decrypted_buffer_)); | 358 EXPECT_CALL(*this, BufferReady(DemuxerStream::kOk, decrypted_buffer_)); |
358 key_added_cb_.Run(); | 359 key_added_cb_.Run(); |
359 message_loop_.RunUntilIdle(); | 360 base::RunLoop().RunUntilIdle(); |
360 } | 361 } |
361 | 362 |
362 // Test the case where the a key is added when the decryptor is in | 363 // Test the case where the a key is added when the decryptor is in |
363 // kPendingDecrypt state. | 364 // kPendingDecrypt state. |
364 TEST_F(DecryptingDemuxerStreamTest, KeyAdded_DuringPendingDecrypt) { | 365 TEST_F(DecryptingDemuxerStreamTest, KeyAdded_DuringPendingDecrypt) { |
365 Initialize(); | 366 Initialize(); |
366 EnterPendingDecryptState(); | 367 EnterPendingDecryptState(); |
367 | 368 |
368 EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _)) | 369 EXPECT_CALL(*decryptor_, Decrypt(_, encrypted_buffer_, _)) |
369 .WillRepeatedly(RunCallback<2>(Decryptor::kSuccess, decrypted_buffer_)); | 370 .WillRepeatedly(RunCallback<2>(Decryptor::kSuccess, decrypted_buffer_)); |
370 EXPECT_CALL(*this, BufferReady(DemuxerStream::kOk, decrypted_buffer_)); | 371 EXPECT_CALL(*this, BufferReady(DemuxerStream::kOk, decrypted_buffer_)); |
371 // The decrypt callback is returned after the correct decryption key is added. | 372 // The decrypt callback is returned after the correct decryption key is added. |
372 key_added_cb_.Run(); | 373 key_added_cb_.Run(); |
373 base::ResetAndReturn(&pending_decrypt_cb_).Run(Decryptor::kNoKey, NULL); | 374 base::ResetAndReturn(&pending_decrypt_cb_).Run(Decryptor::kNoKey, NULL); |
374 message_loop_.RunUntilIdle(); | 375 base::RunLoop().RunUntilIdle(); |
375 } | 376 } |
376 | 377 |
377 // Test resetting in kIdle state but has not returned any buffer. | 378 // Test resetting in kIdle state but has not returned any buffer. |
378 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringIdleAfterInitialization) { | 379 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringIdleAfterInitialization) { |
379 Initialize(); | 380 Initialize(); |
380 Reset(); | 381 Reset(); |
381 } | 382 } |
382 | 383 |
383 // Test resetting in kIdle state after having returned one buffer. | 384 // Test resetting in kIdle state after having returned one buffer. |
384 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringIdleAfterReadOneBuffer) { | 385 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringIdleAfterReadOneBuffer) { |
385 Initialize(); | 386 Initialize(); |
386 EnterNormalReadingState(); | 387 EnterNormalReadingState(); |
387 Reset(); | 388 Reset(); |
388 } | 389 } |
389 | 390 |
390 // Test resetting in kPendingDemuxerRead state. | 391 // Test resetting in kPendingDemuxerRead state. |
391 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringPendingDemuxerRead) { | 392 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringPendingDemuxerRead) { |
392 Initialize(); | 393 Initialize(); |
393 EnterPendingReadState(); | 394 EnterPendingReadState(); |
394 | 395 |
395 EXPECT_CALL(*this, BufferReady(DemuxerStream::kAborted, IsNull())); | 396 EXPECT_CALL(*this, BufferReady(DemuxerStream::kAborted, IsNull())); |
396 | 397 |
397 Reset(); | 398 Reset(); |
398 SatisfyPendingDemuxerReadCB(DemuxerStream::kOk); | 399 SatisfyPendingDemuxerReadCB(DemuxerStream::kOk); |
399 message_loop_.RunUntilIdle(); | 400 base::RunLoop().RunUntilIdle(); |
400 } | 401 } |
401 | 402 |
402 // Test resetting in kPendingDecrypt state. | 403 // Test resetting in kPendingDecrypt state. |
403 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringPendingDecrypt) { | 404 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringPendingDecrypt) { |
404 Initialize(); | 405 Initialize(); |
405 EnterPendingDecryptState(); | 406 EnterPendingDecryptState(); |
406 | 407 |
407 EXPECT_CALL(*this, BufferReady(DemuxerStream::kAborted, IsNull())); | 408 EXPECT_CALL(*this, BufferReady(DemuxerStream::kAborted, IsNull())); |
408 | 409 |
409 Reset(); | 410 Reset(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 // Test resetting when waiting for an aborted read. | 442 // Test resetting when waiting for an aborted read. |
442 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringAbortedDemuxerRead) { | 443 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringAbortedDemuxerRead) { |
443 Initialize(); | 444 Initialize(); |
444 EnterPendingReadState(); | 445 EnterPendingReadState(); |
445 | 446 |
446 // Make sure we get a NULL audio frame returned. | 447 // Make sure we get a NULL audio frame returned. |
447 EXPECT_CALL(*this, BufferReady(DemuxerStream::kAborted, IsNull())); | 448 EXPECT_CALL(*this, BufferReady(DemuxerStream::kAborted, IsNull())); |
448 | 449 |
449 Reset(); | 450 Reset(); |
450 SatisfyPendingDemuxerReadCB(DemuxerStream::kAborted); | 451 SatisfyPendingDemuxerReadCB(DemuxerStream::kAborted); |
451 message_loop_.RunUntilIdle(); | 452 base::RunLoop().RunUntilIdle(); |
452 } | 453 } |
453 | 454 |
454 // Test config change on the input demuxer stream. | 455 // Test config change on the input demuxer stream. |
455 TEST_F(DecryptingDemuxerStreamTest, DemuxerRead_ConfigChanged) { | 456 TEST_F(DecryptingDemuxerStreamTest, DemuxerRead_ConfigChanged) { |
456 Initialize(); | 457 Initialize(); |
457 | 458 |
458 AudioDecoderConfig new_config(kCodecVorbis, kSampleFormatPlanarF32, | 459 AudioDecoderConfig new_config(kCodecVorbis, kSampleFormatPlanarF32, |
459 CHANNEL_LAYOUT_STEREO, 88200, EmptyExtraData(), | 460 CHANNEL_LAYOUT_STEREO, 88200, EmptyExtraData(), |
460 AesCtrEncryptionScheme()); | 461 AesCtrEncryptionScheme()); |
461 input_audio_stream_->set_audio_decoder_config(new_config); | 462 input_audio_stream_->set_audio_decoder_config(new_config); |
462 | 463 |
463 EXPECT_CALL(*input_audio_stream_, Read(_)) | 464 EXPECT_CALL(*input_audio_stream_, Read(_)) |
464 .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, | 465 .WillOnce(RunCallback<0>(DemuxerStream::kConfigChanged, |
465 scoped_refptr<DecoderBuffer>())); | 466 scoped_refptr<DecoderBuffer>())); |
466 | 467 |
467 ReadAndExpectBufferReadyWith(DemuxerStream::kConfigChanged, NULL); | 468 ReadAndExpectBufferReadyWith(DemuxerStream::kConfigChanged, NULL); |
468 } | 469 } |
469 | 470 |
470 // Test resetting when waiting for a config changed read. | 471 // Test resetting when waiting for a config changed read. |
471 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringConfigChangedDemuxerRead) { | 472 TEST_F(DecryptingDemuxerStreamTest, Reset_DuringConfigChangedDemuxerRead) { |
472 Initialize(); | 473 Initialize(); |
473 EnterPendingReadState(); | 474 EnterPendingReadState(); |
474 | 475 |
475 // Make sure we get a |kConfigChanged| instead of a |kAborted|. | 476 // Make sure we get a |kConfigChanged| instead of a |kAborted|. |
476 EXPECT_CALL(*this, BufferReady(DemuxerStream::kConfigChanged, IsNull())); | 477 EXPECT_CALL(*this, BufferReady(DemuxerStream::kConfigChanged, IsNull())); |
477 | 478 |
478 Reset(); | 479 Reset(); |
479 SatisfyPendingDemuxerReadCB(DemuxerStream::kConfigChanged); | 480 SatisfyPendingDemuxerReadCB(DemuxerStream::kConfigChanged); |
480 message_loop_.RunUntilIdle(); | 481 base::RunLoop().RunUntilIdle(); |
481 } | 482 } |
482 | 483 |
483 // The following tests test destruction in various scenarios. The destruction | 484 // The following tests test destruction in various scenarios. The destruction |
484 // happens in DecryptingDemuxerStreamTest's dtor. | 485 // happens in DecryptingDemuxerStreamTest's dtor. |
485 | 486 |
486 // Test destruction in kIdle state but has not returned any buffer. | 487 // Test destruction in kIdle state but has not returned any buffer. |
487 TEST_F(DecryptingDemuxerStreamTest, Destroy_DuringIdleAfterInitialization) { | 488 TEST_F(DecryptingDemuxerStreamTest, Destroy_DuringIdleAfterInitialization) { |
488 Initialize(); | 489 Initialize(); |
489 } | 490 } |
490 | 491 |
(...skipping 28 matching lines...) Expand all Loading... |
519 } | 520 } |
520 | 521 |
521 // Test destruction after reset. | 522 // Test destruction after reset. |
522 TEST_F(DecryptingDemuxerStreamTest, Destroy_AfterReset) { | 523 TEST_F(DecryptingDemuxerStreamTest, Destroy_AfterReset) { |
523 Initialize(); | 524 Initialize(); |
524 EnterNormalReadingState(); | 525 EnterNormalReadingState(); |
525 Reset(); | 526 Reset(); |
526 } | 527 } |
527 | 528 |
528 } // namespace media | 529 } // namespace media |
OLD | NEW |