Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Side by Side Diff: media/filters/decrypting_video_decoder_unittest.cc

Issue 416333011: Allow setContentDecryptionModule() to get called when setting is done. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase + android tweaks Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <string> 5 #include <string>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 26 matching lines...) Expand all
37 arraysize(kFakeKeyId)), 37 arraysize(kFakeKeyId)),
38 std::string(reinterpret_cast<const char*>(kFakeIv), arraysize(kFakeIv)), 38 std::string(reinterpret_cast<const char*>(kFakeIv), arraysize(kFakeIv)),
39 std::vector<SubsampleEntry>()))); 39 std::vector<SubsampleEntry>())));
40 return buffer; 40 return buffer;
41 } 41 }
42 42
43 // Use anonymous namespace here to prevent the actions to be defined multiple 43 // Use anonymous namespace here to prevent the actions to be defined multiple
44 // times across multiple test files. Sadly we can't use static for them. 44 // times across multiple test files. Sadly we can't use static for them.
45 namespace { 45 namespace {
46 46
47 ACTION_P(RunCallbackIfNotNull, param) { 47 ACTION_P3(ResetAndRunCallback, callback, p1, p2) {
48 if (!arg0.is_null()) 48 base::ResetAndReturn(callback).Run(p1, p2);
49 arg0.Run(param);
50 }
51
52 ACTION_P2(ResetAndRunCallback, callback, param) {
53 base::ResetAndReturn(callback).Run(param);
54 } 49 }
55 50
56 } // namespace 51 } // namespace
57 52
58 class DecryptingVideoDecoderTest : public testing::Test { 53 class DecryptingVideoDecoderTest : public testing::Test {
59 public: 54 public:
60 DecryptingVideoDecoderTest() 55 DecryptingVideoDecoderTest()
61 : decoder_(new DecryptingVideoDecoder( 56 : decoder_(new DecryptingVideoDecoder(
62 message_loop_.message_loop_proxy(), 57 message_loop_.message_loop_proxy(),
63 base::Bind( 58 base::Bind(
64 &DecryptingVideoDecoderTest::RequestDecryptorNotification, 59 &DecryptingVideoDecoderTest::RequestDecryptorNotification,
65 base::Unretained(this)))), 60 base::Unretained(this)))),
66 decryptor_(new StrictMock<MockDecryptor>()), 61 decryptor_(new StrictMock<MockDecryptor>()),
67 num_decrypt_and_decode_calls_(0), 62 num_decrypt_and_decode_calls_(0),
68 num_frames_in_decryptor_(0), 63 num_frames_in_decryptor_(0),
69 encrypted_buffer_(CreateFakeEncryptedBuffer()), 64 encrypted_buffer_(CreateFakeEncryptedBuffer()),
70 decoded_video_frame_(VideoFrame::CreateBlackFrame( 65 decoded_video_frame_(VideoFrame::CreateBlackFrame(
71 TestVideoConfig::NormalCodedSize())), 66 TestVideoConfig::NormalCodedSize())),
72 null_video_frame_(scoped_refptr<VideoFrame>()) { 67 null_video_frame_(scoped_refptr<VideoFrame>()) {
73 EXPECT_CALL(*this, RequestDecryptorNotification(_))
74 .WillRepeatedly(RunCallbackIfNotNull(decryptor_.get()));
75 } 68 }
76 69
77 virtual ~DecryptingVideoDecoderTest() { 70 virtual ~DecryptingVideoDecoderTest() {
78 Destroy(); 71 Destroy();
79 } 72 }
80 73
74 void ExpectDecryptorNotification(Decryptor* decryptor, bool expected_result) {
75 EXPECT_CALL(*this, RequestDecryptorNotification(_)).WillOnce(
76 RunCallback<0>(decryptor,
77 base::Bind(&DecryptingVideoDecoderTest::DecryptorSet,
78 base::Unretained(this))));
79 EXPECT_CALL(*this, DecryptorSet(expected_result));
80 }
81
81 // Initializes the |decoder_| and expects |status|. Note the initialization 82 // Initializes the |decoder_| and expects |status|. Note the initialization
82 // can succeed or fail. 83 // can succeed or fail.
83 void InitializeAndExpectStatus(const VideoDecoderConfig& config, 84 void InitializeAndExpectStatus(const VideoDecoderConfig& config,
84 PipelineStatus status) { 85 PipelineStatus status) {
85 decoder_->Initialize(config, false, NewExpectedStatusCB(status), 86 decoder_->Initialize(config, false, NewExpectedStatusCB(status),
86 base::Bind(&DecryptingVideoDecoderTest::FrameReady, 87 base::Bind(&DecryptingVideoDecoderTest::FrameReady,
87 base::Unretained(this))); 88 base::Unretained(this)));
88 message_loop_.RunUntilIdle(); 89 message_loop_.RunUntilIdle();
89 } 90 }
90 91
91 // Initialize the |decoder_| and expects it to succeed. 92 // Initialize the |decoder_| and expects it to succeed.
92 void Initialize() { 93 void Initialize() {
94 ExpectDecryptorNotification(decryptor_.get(), true);
93 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _)) 95 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _))
94 .WillOnce(RunCallback<1>(true)); 96 .WillOnce(RunCallback<1>(true));
95 EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kVideo, _)) 97 EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kVideo, _))
96 .WillOnce(SaveArg<1>(&key_added_cb_)); 98 .WillOnce(SaveArg<1>(&key_added_cb_));
97 99
98 InitializeAndExpectStatus(TestVideoConfig::NormalEncrypted(), PIPELINE_OK); 100 InitializeAndExpectStatus(TestVideoConfig::NormalEncrypted(), PIPELINE_OK);
99 } 101 }
100 102
101 // Reinitialize the |decoder_| and expects it to succeed. 103 // Reinitialize the |decoder_| and expects it to succeed.
102 void Reinitialize() { 104 void Reinitialize() {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 218
217 decoder_.reset(); 219 decoder_.reset();
218 message_loop_.RunUntilIdle(); 220 message_loop_.RunUntilIdle();
219 } 221 }
220 222
221 MOCK_METHOD1(RequestDecryptorNotification, void(const DecryptorReadyCB&)); 223 MOCK_METHOD1(RequestDecryptorNotification, void(const DecryptorReadyCB&));
222 224
223 MOCK_METHOD1(FrameReady, void(const scoped_refptr<VideoFrame>&)); 225 MOCK_METHOD1(FrameReady, void(const scoped_refptr<VideoFrame>&));
224 MOCK_METHOD1(DecodeDone, void(VideoDecoder::Status)); 226 MOCK_METHOD1(DecodeDone, void(VideoDecoder::Status));
225 227
228 MOCK_METHOD1(DecryptorSet, void(bool));
229
226 base::MessageLoop message_loop_; 230 base::MessageLoop message_loop_;
227 scoped_ptr<DecryptingVideoDecoder> decoder_; 231 scoped_ptr<DecryptingVideoDecoder> decoder_;
228 scoped_ptr<StrictMock<MockDecryptor> > decryptor_; 232 scoped_ptr<StrictMock<MockDecryptor> > decryptor_;
229 233
230 // Variables to help the |decryptor_| to simulate decoding delay and flushing. 234 // Variables to help the |decryptor_| to simulate decoding delay and flushing.
231 int num_decrypt_and_decode_calls_; 235 int num_decrypt_and_decode_calls_;
232 int num_frames_in_decryptor_; 236 int num_frames_in_decryptor_;
233 237
234 Decryptor::DecoderInitCB pending_init_cb_; 238 Decryptor::DecoderInitCB pending_init_cb_;
235 Decryptor::NewKeyCB key_added_cb_; 239 Decryptor::NewKeyCB key_added_cb_;
236 Decryptor::VideoDecodeCB pending_video_decode_cb_; 240 Decryptor::VideoDecodeCB pending_video_decode_cb_;
237 241
238 // Constant buffer/frames. 242 // Constant buffer/frames.
239 scoped_refptr<DecoderBuffer> encrypted_buffer_; 243 scoped_refptr<DecoderBuffer> encrypted_buffer_;
240 scoped_refptr<VideoFrame> decoded_video_frame_; 244 scoped_refptr<VideoFrame> decoded_video_frame_;
241 scoped_refptr<VideoFrame> null_video_frame_; 245 scoped_refptr<VideoFrame> null_video_frame_;
242 246
243 private: 247 private:
244 DISALLOW_COPY_AND_ASSIGN(DecryptingVideoDecoderTest); 248 DISALLOW_COPY_AND_ASSIGN(DecryptingVideoDecoderTest);
245 }; 249 };
246 250
247 TEST_F(DecryptingVideoDecoderTest, Initialize_Normal) { 251 TEST_F(DecryptingVideoDecoderTest, Initialize_Normal) {
248 Initialize(); 252 Initialize();
249 } 253 }
250 254
251 TEST_F(DecryptingVideoDecoderTest, Initialize_NullDecryptor) { 255 TEST_F(DecryptingVideoDecoderTest, Initialize_NullDecryptor) {
252 EXPECT_CALL(*this, RequestDecryptorNotification(_)) 256 ExpectDecryptorNotification(NULL, false);
253 .WillRepeatedly(RunCallbackIfNotNull(static_cast<Decryptor*>(NULL)));
254 InitializeAndExpectStatus(TestVideoConfig::NormalEncrypted(), 257 InitializeAndExpectStatus(TestVideoConfig::NormalEncrypted(),
255 DECODER_ERROR_NOT_SUPPORTED); 258 DECODER_ERROR_NOT_SUPPORTED);
256 } 259 }
257 260
258 TEST_F(DecryptingVideoDecoderTest, Initialize_Failure) { 261 TEST_F(DecryptingVideoDecoderTest, Initialize_Failure) {
259 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _)) 262 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _))
260 .WillRepeatedly(RunCallback<1>(false)); 263 .WillRepeatedly(RunCallback<1>(false));
261 EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kVideo, _)) 264 EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kVideo, _))
262 .WillRepeatedly(SaveArg<1>(&key_added_cb_)); 265 .WillRepeatedly(SaveArg<1>(&key_added_cb_));
263 266
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 false, 411 false,
409 NewExpectedStatusCB(DECODER_ERROR_NOT_SUPPORTED), 412 NewExpectedStatusCB(DECODER_ERROR_NOT_SUPPORTED),
410 base::Bind(&DecryptingVideoDecoderTest::FrameReady, 413 base::Bind(&DecryptingVideoDecoderTest::FrameReady,
411 base::Unretained(this))); 414 base::Unretained(this)));
412 message_loop_.RunUntilIdle(); 415 message_loop_.RunUntilIdle();
413 // |decryptor_ready_cb| is saved but not called here. 416 // |decryptor_ready_cb| is saved but not called here.
414 EXPECT_FALSE(decryptor_ready_cb.is_null()); 417 EXPECT_FALSE(decryptor_ready_cb.is_null());
415 418
416 // During destruction, RequestDecryptorNotification() should be called with a 419 // During destruction, RequestDecryptorNotification() should be called with a
417 // NULL callback to cancel the |decryptor_ready_cb|. 420 // NULL callback to cancel the |decryptor_ready_cb|.
418 EXPECT_CALL(*this, RequestDecryptorNotification(IsNullCallback())) 421 EXPECT_CALL(*this, RequestDecryptorNotification(IsNullCallback())).WillOnce(
419 .WillOnce(ResetAndRunCallback(&decryptor_ready_cb, 422 ResetAndRunCallback(&decryptor_ready_cb,
420 reinterpret_cast<Decryptor*>(NULL))); 423 reinterpret_cast<Decryptor*>(NULL),
424 base::Bind(&DecryptingVideoDecoderTest::DecryptorSet,
425 base::Unretained(this))));
426 EXPECT_CALL(*this, DecryptorSet(_)).Times(0);
421 Destroy(); 427 Destroy();
422 } 428 }
423 429
424 // Test destruction when the decoder is in kPendingDecoderInit state. 430 // Test destruction when the decoder is in kPendingDecoderInit state.
425 TEST_F(DecryptingVideoDecoderTest, Destroy_DuringPendingDecoderInit) { 431 TEST_F(DecryptingVideoDecoderTest, Destroy_DuringPendingDecoderInit) {
432 ExpectDecryptorNotification(decryptor_.get(), true);
426 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _)) 433 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _))
427 .WillOnce(SaveArg<1>(&pending_init_cb_)); 434 .WillOnce(SaveArg<1>(&pending_init_cb_));
428 435
429 InitializeAndExpectStatus(TestVideoConfig::NormalEncrypted(), 436 InitializeAndExpectStatus(TestVideoConfig::NormalEncrypted(),
430 DECODER_ERROR_NOT_SUPPORTED); 437 DECODER_ERROR_NOT_SUPPORTED);
431 EXPECT_FALSE(pending_init_cb_.is_null()); 438 EXPECT_FALSE(pending_init_cb_.is_null());
432 439
433 Destroy(); 440 Destroy();
434 } 441 }
435 442
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 500
494 // Test destruction after the decoder has been reset. 501 // Test destruction after the decoder has been reset.
495 TEST_F(DecryptingVideoDecoderTest, Destroy_AfterReset) { 502 TEST_F(DecryptingVideoDecoderTest, Destroy_AfterReset) {
496 Initialize(); 503 Initialize();
497 EnterNormalDecodingState(); 504 EnterNormalDecodingState();
498 Reset(); 505 Reset();
499 Destroy(); 506 Destroy();
500 } 507 }
501 508
502 } // namespace media 509 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/decrypting_video_decoder.cc ('k') | media/filters/pipeline_integration_test_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698