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

Side by Side Diff: media/filters/audio_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: More changes 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::Eq;
18 using ::testing::InvokeWithoutArgs;
17 using ::testing::IsNull; 19 using ::testing::IsNull;
18 using ::testing::NiceMock; 20 using ::testing::NiceMock;
19 using ::testing::NotNull; 21 using ::testing::NotNull;
20 using ::testing::Return; 22 using ::testing::Return;
21 using ::testing::StrictMock; 23 using ::testing::StrictMock;
22 24
25 // Use anonymous namespace here to prevent the actions to be defined multiple
26 // times across multiple test files. Sadly we can't use static for them.
27 namespace {
28
29 ACTION_P3(ExecuteCallbackWithVerifier, decryptor, done_cb, verifier) {
30 // verifier must be called first since |done_cb| call will invoke it as well.
31 verifier->A();
32 arg0.Run(decryptor, done_cb);
33 }
34
35 ACTION_P(CheckCallbackHappenedUsingVerifier, verifier) {
ddorwin 2014/08/08 21:15:26 naming: It's really just recording that B was call
jrummell 2014/08/08 23:39:59 Done.
36 verifier->B();
37 }
38
39 } // namespace
40
23 namespace media { 41 namespace media {
24 42
25 class AudioDecoderSelectorTest : public ::testing::Test { 43 class AudioDecoderSelectorTest : public ::testing::Test {
26 public: 44 public:
27 enum DecryptorCapability { 45 enum DecryptorCapability {
28 kNoDecryptor, 46 kNoDecryptor,
29 // Used to test destruction during DecryptingAudioDecoder::Initialize() and 47 // Used to test destruction during DecryptingAudioDecoder::Initialize() and
30 // DecryptingDemuxerStream::Initialize(). We don't need this for normal 48 // DecryptingDemuxerStream::Initialize(). We don't need this for normal
31 // AudioDecoders since we use MockAudioDecoder. 49 // AudioDecoders since we use MockAudioDecoder.
32 kHoldSetDecryptor, 50 kHoldSetDecryptor,
(...skipping 11 matching lines...) Expand all
44 all_decoders_.push_back(decoder_2_); 62 all_decoders_.push_back(decoder_2_);
45 } 63 }
46 64
47 ~AudioDecoderSelectorTest() { 65 ~AudioDecoderSelectorTest() {
48 message_loop_.RunUntilIdle(); 66 message_loop_.RunUntilIdle();
49 } 67 }
50 68
51 MOCK_METHOD1(SetDecryptorReadyCallback, void(const media::DecryptorReadyCB&)); 69 MOCK_METHOD1(SetDecryptorReadyCallback, void(const media::DecryptorReadyCB&));
52 MOCK_METHOD2(OnDecoderSelected, 70 MOCK_METHOD2(OnDecoderSelected,
53 void(AudioDecoder*, DecryptingDemuxerStream*)); 71 void(AudioDecoder*, DecryptingDemuxerStream*));
72 MOCK_METHOD1(DecryptorSet, void(bool));
54 73
55 void MockOnDecoderSelected(scoped_ptr<AudioDecoder> decoder, 74 void MockOnDecoderSelected(scoped_ptr<AudioDecoder> decoder,
56 scoped_ptr<DecryptingDemuxerStream> stream) { 75 scoped_ptr<DecryptingDemuxerStream> stream) {
57 OnDecoderSelected(decoder.get(), stream.get()); 76 OnDecoderSelected(decoder.get(), stream.get());
58 selected_decoder_ = decoder.Pass(); 77 selected_decoder_ = decoder.Pass();
59 } 78 }
60 79
61 void UseClearStream() { 80 void UseClearStream() {
62 AudioDecoderConfig clear_audio_config( 81 AudioDecoderConfig clear_audio_config(
63 kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, 82 kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100,
(...skipping 12 matching lines...) Expand all
76 int num_decoders) { 95 int num_decoders) {
77 SetDecryptorReadyCB set_decryptor_ready_cb; 96 SetDecryptorReadyCB set_decryptor_ready_cb;
78 if (decryptor_capability != kNoDecryptor) { 97 if (decryptor_capability != kNoDecryptor) {
79 set_decryptor_ready_cb = 98 set_decryptor_ready_cb =
80 base::Bind(&AudioDecoderSelectorTest::SetDecryptorReadyCallback, 99 base::Bind(&AudioDecoderSelectorTest::SetDecryptorReadyCallback,
81 base::Unretained(this)); 100 base::Unretained(this));
82 } 101 }
83 102
84 if (decryptor_capability == kDecryptOnly || 103 if (decryptor_capability == kDecryptOnly ||
85 decryptor_capability == kDecryptAndDecode) { 104 decryptor_capability == kDecryptAndDecode) {
86
87 EXPECT_CALL(*this, SetDecryptorReadyCallback(_)) 105 EXPECT_CALL(*this, SetDecryptorReadyCallback(_))
88 .WillRepeatedly(RunCallback<0>(decryptor_.get())); 106 .WillRepeatedly(ExecuteCallbackWithVerifier(
107 decryptor_.get(),
108 base::Bind(&AudioDecoderSelectorTest::DecryptorSet,
109 base::Unretained(this)),
110 &verifier_));
111 EXPECT_CALL(*this, DecryptorSet(Eq(true)))
112 .WillRepeatedly(CheckCallbackHappenedUsingVerifier(&verifier_));
89 113
90 if (decryptor_capability == kDecryptOnly) { 114 if (decryptor_capability == kDecryptOnly) {
91 EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _)) 115 EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _))
92 .WillRepeatedly(RunCallback<1>(false)); 116 .WillRepeatedly(RunCallback<1>(false));
93 } else { 117 } else {
94 EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _)) 118 EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _))
95 .WillRepeatedly(RunCallback<1>(true)); 119 .WillRepeatedly(RunCallback<1>(true));
96 } 120 }
97 } else if (decryptor_capability == kHoldSetDecryptor) { 121 } else if (decryptor_capability == kHoldSetDecryptor) {
98 // Set and cancel DecryptorReadyCB but the callback is never fired. 122 // Set and cancel DecryptorReadyCB but the callback is never fired.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 166
143 scoped_ptr<AudioDecoderSelector> decoder_selector_; 167 scoped_ptr<AudioDecoderSelector> decoder_selector_;
144 168
145 StrictMock<MockAudioDecoder>* decoder_1_; 169 StrictMock<MockAudioDecoder>* decoder_1_;
146 StrictMock<MockAudioDecoder>* decoder_2_; 170 StrictMock<MockAudioDecoder>* decoder_2_;
147 ScopedVector<AudioDecoder> all_decoders_; 171 ScopedVector<AudioDecoder> all_decoders_;
148 scoped_ptr<AudioDecoder> selected_decoder_; 172 scoped_ptr<AudioDecoder> selected_decoder_;
149 173
150 base::MessageLoop message_loop_; 174 base::MessageLoop message_loop_;
151 175
176 MatchingCallbackVerifier verifier_;
177
152 private: 178 private:
153 DISALLOW_COPY_AND_ASSIGN(AudioDecoderSelectorTest); 179 DISALLOW_COPY_AND_ASSIGN(AudioDecoderSelectorTest);
154 }; 180 };
155 181
156 // The stream is not encrypted but we have no clear decoder. No decoder can be 182 // The stream is not encrypted but we have no clear decoder. No decoder can be
157 // selected. 183 // selected.
158 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_NoClearDecoder) { 184 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_NoClearDecoder) {
159 UseClearStream(); 185 UseClearStream();
160 InitializeDecoderSelector(kNoDecryptor, 0); 186 InitializeDecoderSelector(kNoDecryptor, 0);
161 187
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 } 356 }
331 357
332 TEST_F(AudioDecoderSelectorTest, Destroy_EncryptedStream_DecryptAndDecode) { 358 TEST_F(AudioDecoderSelectorTest, Destroy_EncryptedStream_DecryptAndDecode) {
333 UseEncryptedStream(); 359 UseEncryptedStream();
334 InitializeDecoderSelector(kHoldSetDecryptor, 1); 360 InitializeDecoderSelector(kHoldSetDecryptor, 1);
335 361
336 SelectDecoderAndDestroy(); 362 SelectDecoderAndDestroy();
337 } 363 }
338 364
339 } // namespace media 365 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698