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

Side by Side Diff: media/filters/video_decoder_selector_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 <vector> 5 #include <vector>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "media/base/gmock_callback_support.h" 9 #include "media/base/gmock_callback_support.h"
10 #include "media/base/mock_filters.h" 10 #include "media/base/mock_filters.h"
11 #include "media/base/test_helpers.h" 11 #include "media/base/test_helpers.h"
12 #include "media/filters/decoder_selector.h" 12 #include "media/filters/decoder_selector.h"
13 #include "media/filters/decrypting_demuxer_stream.h" 13 #include "media/filters/decrypting_demuxer_stream.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 using ::testing::_; 16 using ::testing::_;
17 using ::testing::IsNull; 17 using ::testing::IsNull;
18 using ::testing::NiceMock; 18 using ::testing::NiceMock;
19 using ::testing::NotNull; 19 using ::testing::NotNull;
20 using ::testing::Return; 20 using ::testing::Return;
21 using ::testing::StrictMock; 21 using ::testing::StrictMock;
22 22
23 // Use anonymous namespace here to prevent the actions to be defined multiple
24 // times across multiple test files. Sadly we can't use static for them.
25 namespace {
26
27 ACTION_P3(ExecuteCallbackWithVerifier, decryptor, done_cb, verifier) {
28 // verifier must be called first since |done_cb| call will invoke it as well.
29 verifier->RecordACalled();
30 arg0.Run(decryptor, done_cb);
31 }
32
33 ACTION_P(ReportCallback, verifier) {
34 verifier->RecordBCalled();
35 }
36
37 } // namespace
38
23 namespace media { 39 namespace media {
24 40
25 class VideoDecoderSelectorTest : public ::testing::Test { 41 class VideoDecoderSelectorTest : public ::testing::Test {
26 public: 42 public:
27 enum DecryptorCapability { 43 enum DecryptorCapability {
28 kNoDecryptor, 44 kNoDecryptor,
29 // Used to test destruction during DecryptingVideoDecoder::Initialize() and 45 // Used to test destruction during DecryptingVideoDecoder::Initialize() and
30 // DecryptingDemuxerStream::Initialize(). We don't need this for normal 46 // DecryptingDemuxerStream::Initialize(). We don't need this for normal
31 // VideoDecoders since we use MockVideoDecoder. 47 // VideoDecoders since we use MockVideoDecoder.
32 kHoldSetDecryptor, 48 kHoldSetDecryptor,
(...skipping 11 matching lines...) Expand all
44 all_decoders_.push_back(decoder_2_); 60 all_decoders_.push_back(decoder_2_);
45 } 61 }
46 62
47 ~VideoDecoderSelectorTest() { 63 ~VideoDecoderSelectorTest() {
48 message_loop_.RunUntilIdle(); 64 message_loop_.RunUntilIdle();
49 } 65 }
50 66
51 MOCK_METHOD1(SetDecryptorReadyCallback, void(const media::DecryptorReadyCB&)); 67 MOCK_METHOD1(SetDecryptorReadyCallback, void(const media::DecryptorReadyCB&));
52 MOCK_METHOD2(OnDecoderSelected, 68 MOCK_METHOD2(OnDecoderSelected,
53 void(VideoDecoder*, DecryptingDemuxerStream*)); 69 void(VideoDecoder*, DecryptingDemuxerStream*));
70 MOCK_METHOD1(DecryptorSet, void(bool));
54 71
55 void MockOnDecoderSelected( 72 void MockOnDecoderSelected(
56 scoped_ptr<VideoDecoder> decoder, 73 scoped_ptr<VideoDecoder> decoder,
57 scoped_ptr<DecryptingDemuxerStream> stream) { 74 scoped_ptr<DecryptingDemuxerStream> stream) {
58 OnDecoderSelected(decoder.get(), stream.get()); 75 OnDecoderSelected(decoder.get(), stream.get());
59 selected_decoder_ = decoder.Pass(); 76 selected_decoder_ = decoder.Pass();
60 } 77 }
61 78
62 void UseClearStream() { 79 void UseClearStream() {
63 demuxer_stream_->set_video_decoder_config(TestVideoConfig::Normal()); 80 demuxer_stream_->set_video_decoder_config(TestVideoConfig::Normal());
64 } 81 }
65 82
66 void UseEncryptedStream() { 83 void UseEncryptedStream() {
67 demuxer_stream_->set_video_decoder_config( 84 demuxer_stream_->set_video_decoder_config(
68 TestVideoConfig::NormalEncrypted()); 85 TestVideoConfig::NormalEncrypted());
69 } 86 }
70 87
71 void InitializeDecoderSelector(DecryptorCapability decryptor_capability, 88 void InitializeDecoderSelector(DecryptorCapability decryptor_capability,
72 int num_decoders) { 89 int num_decoders) {
73 SetDecryptorReadyCB set_decryptor_ready_cb; 90 SetDecryptorReadyCB set_decryptor_ready_cb;
74 if (decryptor_capability != kNoDecryptor) { 91 if (decryptor_capability != kNoDecryptor) {
75 set_decryptor_ready_cb = 92 set_decryptor_ready_cb =
76 base::Bind(&VideoDecoderSelectorTest::SetDecryptorReadyCallback, 93 base::Bind(&VideoDecoderSelectorTest::SetDecryptorReadyCallback,
77 base::Unretained(this)); 94 base::Unretained(this));
78 } 95 }
79 96
80 if (decryptor_capability == kDecryptOnly || 97 if (decryptor_capability == kDecryptOnly ||
81 decryptor_capability == kDecryptAndDecode) { 98 decryptor_capability == kDecryptAndDecode) {
82 EXPECT_CALL(*this, SetDecryptorReadyCallback(_)) 99 EXPECT_CALL(*this, SetDecryptorReadyCallback(_))
83 .WillRepeatedly(RunCallback<0>(decryptor_.get())); 100 .WillRepeatedly(ExecuteCallbackWithVerifier(
101 decryptor_.get(),
102 base::Bind(&VideoDecoderSelectorTest::DecryptorSet,
103 base::Unretained(this)),
104 &verifier_));
105 EXPECT_CALL(*this, DecryptorSet(true))
106 .WillRepeatedly(ReportCallback(&verifier_));
84 107
85 if (decryptor_capability == kDecryptOnly) { 108 if (decryptor_capability == kDecryptOnly) {
86 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _)) 109 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _))
87 .WillRepeatedly(RunCallback<1>(false)); 110 .WillRepeatedly(RunCallback<1>(false));
88 } else { 111 } else {
89 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _)) 112 EXPECT_CALL(*decryptor_, InitializeVideoDecoder(_, _))
90 .WillRepeatedly(RunCallback<1>(true)); 113 .WillRepeatedly(RunCallback<1>(true));
91 } 114 }
92 } else if (decryptor_capability == kHoldSetDecryptor) { 115 } else if (decryptor_capability == kHoldSetDecryptor) {
93 // Set and cancel DecryptorReadyCB but the callback is never fired. 116 // Set and cancel DecryptorReadyCB but the callback is never fired.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 161
139 scoped_ptr<VideoDecoderSelector> decoder_selector_; 162 scoped_ptr<VideoDecoderSelector> decoder_selector_;
140 163
141 StrictMock<MockVideoDecoder>* decoder_1_; 164 StrictMock<MockVideoDecoder>* decoder_1_;
142 StrictMock<MockVideoDecoder>* decoder_2_; 165 StrictMock<MockVideoDecoder>* decoder_2_;
143 ScopedVector<VideoDecoder> all_decoders_; 166 ScopedVector<VideoDecoder> all_decoders_;
144 scoped_ptr<VideoDecoder> selected_decoder_; 167 scoped_ptr<VideoDecoder> selected_decoder_;
145 168
146 base::MessageLoop message_loop_; 169 base::MessageLoop message_loop_;
147 170
171 CallbackPairChecker verifier_;
172
148 private: 173 private:
149 DISALLOW_COPY_AND_ASSIGN(VideoDecoderSelectorTest); 174 DISALLOW_COPY_AND_ASSIGN(VideoDecoderSelectorTest);
150 }; 175 };
151 176
152 // The stream is not encrypted but we have no clear decoder. No decoder can be 177 // The stream is not encrypted but we have no clear decoder. No decoder can be
153 // selected. 178 // selected.
154 TEST_F(VideoDecoderSelectorTest, ClearStream_NoDecryptor_NoClearDecoder) { 179 TEST_F(VideoDecoderSelectorTest, ClearStream_NoDecryptor_NoClearDecoder) {
155 UseClearStream(); 180 UseClearStream();
156 InitializeDecoderSelector(kNoDecryptor, 0); 181 InitializeDecoderSelector(kNoDecryptor, 0);
157 182
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 } 351 }
327 352
328 TEST_F(VideoDecoderSelectorTest, Destroy_EncryptedStream_DecryptAndDecode) { 353 TEST_F(VideoDecoderSelectorTest, Destroy_EncryptedStream_DecryptAndDecode) {
329 UseEncryptedStream(); 354 UseEncryptedStream();
330 InitializeDecoderSelector(kHoldSetDecryptor, 1); 355 InitializeDecoderSelector(kHoldSetDecryptor, 1);
331 356
332 SelectDecoderAndDestroy(); 357 SelectDecoderAndDestroy();
333 } 358 }
334 359
335 } // namespace media 360 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/pipeline_integration_test_base.cc ('k') | media/filters/video_frame_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698