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

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: enhance tests 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
23 namespace media { 25 namespace media {
24 26
25 class AudioDecoderSelectorTest : public ::testing::Test { 27 class AudioDecoderSelectorTest : public ::testing::Test {
26 public: 28 public:
(...skipping 14 matching lines...) Expand all
41 decoder_1_(new StrictMock<MockAudioDecoder>()), 43 decoder_1_(new StrictMock<MockAudioDecoder>()),
42 decoder_2_(new StrictMock<MockAudioDecoder>()) { 44 decoder_2_(new StrictMock<MockAudioDecoder>()) {
43 all_decoders_.push_back(decoder_1_); 45 all_decoders_.push_back(decoder_1_);
44 all_decoders_.push_back(decoder_2_); 46 all_decoders_.push_back(decoder_2_);
45 } 47 }
46 48
47 ~AudioDecoderSelectorTest() { 49 ~AudioDecoderSelectorTest() {
48 message_loop_.RunUntilIdle(); 50 message_loop_.RunUntilIdle();
49 } 51 }
50 52
53 // Used to verify that the number of calls to SetDecryptorReadyCallback()
54 // match the number of calls to DecryptorSet() and that the calls happen in
55 // pairs (e.g. DecryptorSet() called after every SetDecryptorReadyCallback()
56 // call). There may be any number of pairs (including 0).
57 class CallbackVerifier {
58 public:
59 CallbackVerifier() : ready_called_(0), set_called_(0) {}
60 ~CallbackVerifier() { Verify(); }
61 void SetDecryptorReadyCallbackCalled() { ++ready_called_; }
ddorwin 2014/08/04 18:59:08 Is it okay/expected for the values to be >1 apart?
jrummell 2014/08/07 01:54:25 Done.
62 void DecryptorSetCalled() {
63 ++set_called_;
64 Verify();
65 }
66 void Verify() { EXPECT_EQ(set_called_, ready_called_); }
67
68 private:
69 int ready_called_;
70 int set_called_;
71 };
72
51 MOCK_METHOD1(SetDecryptorReadyCallback, void(const media::DecryptorReadyCB&)); 73 MOCK_METHOD1(SetDecryptorReadyCallback, void(const media::DecryptorReadyCB&));
52 MOCK_METHOD2(OnDecoderSelected, 74 MOCK_METHOD2(OnDecoderSelected,
53 void(AudioDecoder*, DecryptingDemuxerStream*)); 75 void(AudioDecoder*, DecryptingDemuxerStream*));
76 MOCK_METHOD1(DecryptorSet, void(bool));
54 77
55 void MockOnDecoderSelected(scoped_ptr<AudioDecoder> decoder, 78 void MockOnDecoderSelected(scoped_ptr<AudioDecoder> decoder,
56 scoped_ptr<DecryptingDemuxerStream> stream) { 79 scoped_ptr<DecryptingDemuxerStream> stream) {
57 OnDecoderSelected(decoder.get(), stream.get()); 80 OnDecoderSelected(decoder.get(), stream.get());
58 selected_decoder_ = decoder.Pass(); 81 selected_decoder_ = decoder.Pass();
59 } 82 }
60 83
61 void UseClearStream() { 84 void UseClearStream() {
62 AudioDecoderConfig clear_audio_config( 85 AudioDecoderConfig clear_audio_config(
63 kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, 86 kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100,
(...skipping 12 matching lines...) Expand all
76 int num_decoders) { 99 int num_decoders) {
77 SetDecryptorReadyCB set_decryptor_ready_cb; 100 SetDecryptorReadyCB set_decryptor_ready_cb;
78 if (decryptor_capability != kNoDecryptor) { 101 if (decryptor_capability != kNoDecryptor) {
79 set_decryptor_ready_cb = 102 set_decryptor_ready_cb =
80 base::Bind(&AudioDecoderSelectorTest::SetDecryptorReadyCallback, 103 base::Bind(&AudioDecoderSelectorTest::SetDecryptorReadyCallback,
81 base::Unretained(this)); 104 base::Unretained(this));
82 } 105 }
83 106
84 if (decryptor_capability == kDecryptOnly || 107 if (decryptor_capability == kDecryptOnly ||
85 decryptor_capability == kDecryptAndDecode) { 108 decryptor_capability == kDecryptAndDecode) {
86 109 EXPECT_CALL(*this, SetDecryptorReadyCallback(_)).WillRepeatedly(DoAll(
ddorwin 2014/08/04 18:59:08 This looks odd. Do we need SetDecryptorReadyCallba
jrummell 2014/08/07 01:54:25 The problem is that SetDecryptorReadyCallback() is
87 EXPECT_CALL(*this, SetDecryptorReadyCallback(_)) 110 InvokeWithoutArgs(&verifier_,
88 .WillRepeatedly(RunCallback<0>(decryptor_.get())); 111 &CallbackVerifier::SetDecryptorReadyCallbackCalled),
112 RunCallback<0>(decryptor_.get(),
113 base::Bind(&AudioDecoderSelectorTest::DecryptorSet,
114 base::Unretained(this)))));
115 EXPECT_CALL(*this, DecryptorSet(Eq(true))).WillRepeatedly(
116 InvokeWithoutArgs(&verifier_, &CallbackVerifier::DecryptorSetCalled));
89 117
90 if (decryptor_capability == kDecryptOnly) { 118 if (decryptor_capability == kDecryptOnly) {
91 EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _)) 119 EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _))
92 .WillRepeatedly(RunCallback<1>(false)); 120 .WillRepeatedly(RunCallback<1>(false));
93 } else { 121 } else {
94 EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _)) 122 EXPECT_CALL(*decryptor_, InitializeAudioDecoder(_, _))
95 .WillRepeatedly(RunCallback<1>(true)); 123 .WillRepeatedly(RunCallback<1>(true));
96 } 124 }
97 } else if (decryptor_capability == kHoldSetDecryptor) { 125 } else if (decryptor_capability == kHoldSetDecryptor) {
98 // Set and cancel DecryptorReadyCB but the callback is never fired. 126 // Set and cancel DecryptorReadyCB but the callback is never fired.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 170
143 scoped_ptr<AudioDecoderSelector> decoder_selector_; 171 scoped_ptr<AudioDecoderSelector> decoder_selector_;
144 172
145 StrictMock<MockAudioDecoder>* decoder_1_; 173 StrictMock<MockAudioDecoder>* decoder_1_;
146 StrictMock<MockAudioDecoder>* decoder_2_; 174 StrictMock<MockAudioDecoder>* decoder_2_;
147 ScopedVector<AudioDecoder> all_decoders_; 175 ScopedVector<AudioDecoder> all_decoders_;
148 scoped_ptr<AudioDecoder> selected_decoder_; 176 scoped_ptr<AudioDecoder> selected_decoder_;
149 177
150 base::MessageLoop message_loop_; 178 base::MessageLoop message_loop_;
151 179
180 CallbackVerifier verifier_;
181
152 private: 182 private:
153 DISALLOW_COPY_AND_ASSIGN(AudioDecoderSelectorTest); 183 DISALLOW_COPY_AND_ASSIGN(AudioDecoderSelectorTest);
154 }; 184 };
155 185
156 // The stream is not encrypted but we have no clear decoder. No decoder can be 186 // The stream is not encrypted but we have no clear decoder. No decoder can be
157 // selected. 187 // selected.
158 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_NoClearDecoder) { 188 TEST_F(AudioDecoderSelectorTest, ClearStream_NoDecryptor_NoClearDecoder) {
159 UseClearStream(); 189 UseClearStream();
160 InitializeDecoderSelector(kNoDecryptor, 0); 190 InitializeDecoderSelector(kNoDecryptor, 0);
161 191
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 } 360 }
331 361
332 TEST_F(AudioDecoderSelectorTest, Destroy_EncryptedStream_DecryptAndDecode) { 362 TEST_F(AudioDecoderSelectorTest, Destroy_EncryptedStream_DecryptAndDecode) {
333 UseEncryptedStream(); 363 UseEncryptedStream();
334 InitializeDecoderSelector(kHoldSetDecryptor, 1); 364 InitializeDecoderSelector(kHoldSetDecryptor, 1);
335 365
336 SelectDecoderAndDestroy(); 366 SelectDecoderAndDestroy();
337 } 367 }
338 368
339 } // namespace media 369 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698