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

Side by Side Diff: media/filters/decrypting_demuxer_stream_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
« no previous file with comments | « media/filters/decrypting_demuxer_stream.cc ('k') | media/filters/decrypting_video_decoder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 // times across multiple test files. Sadly we can't use static for them. 46 // times across multiple test files. Sadly we can't use static for them.
47 namespace { 47 namespace {
48 48
49 ACTION_P(ReturnBuffer, buffer) { 49 ACTION_P(ReturnBuffer, buffer) {
50 arg0.Run(buffer.get() ? DemuxerStream::kOk : DemuxerStream::kAborted, buffer); 50 arg0.Run(buffer.get() ? DemuxerStream::kOk : DemuxerStream::kAborted, buffer);
51 } 51 }
52 52
53 // Sets the |decryptor| if the DecryptorReadyCB (arg0) is not null. Sets 53 // Sets the |decryptor| if the DecryptorReadyCB (arg0) is not null. Sets
54 // |is_decryptor_set| to true if a non-NULL |decryptor| has been set through the 54 // |is_decryptor_set| to true if a non-NULL |decryptor| has been set through the
55 // callback. 55 // callback.
56 ACTION_P2(SetDecryptorIfNotNull, decryptor, is_decryptor_set) { 56 ACTION_P3(SetDecryptorIfNotNull, decryptor, done_cb, is_decryptor_set) {
57 if (!arg0.is_null()) 57 if (!arg0.is_null())
58 arg0.Run(decryptor); 58 arg0.Run(decryptor, done_cb);
59 59
60 *is_decryptor_set = !arg0.is_null() && decryptor; 60 *is_decryptor_set = !arg0.is_null() && decryptor;
61 } 61 }
62 62
63 ACTION_P2(ResetAndRunCallback, callback, param) { 63 ACTION_P2(ResetAndRunCallback, callback, param) {
64 base::ResetAndReturn(callback).Run(param); 64 base::ResetAndReturn(callback).Run(param);
65 } 65 }
66 66
67 MATCHER(IsEndOfStream, "end of stream") { 67 MATCHER(IsEndOfStream, "end of stream") {
68 return arg->end_of_stream(); 68 return arg->end_of_stream();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 } 105 }
106 106
107 void InitializeVideoAndExpectStatus(const VideoDecoderConfig& config, 107 void InitializeVideoAndExpectStatus(const VideoDecoderConfig& config,
108 PipelineStatus status) { 108 PipelineStatus status) {
109 input_video_stream_->set_video_decoder_config(config); 109 input_video_stream_->set_video_decoder_config(config);
110 demuxer_stream_->Initialize(input_video_stream_.get(), 110 demuxer_stream_->Initialize(input_video_stream_.get(),
111 NewExpectedStatusCB(status)); 111 NewExpectedStatusCB(status));
112 message_loop_.RunUntilIdle(); 112 message_loop_.RunUntilIdle();
113 } 113 }
114 114
115 void ExpectDecryptorNotification(Decryptor* decryptor, bool expected_result) {
116 EXPECT_CALL(*this, RequestDecryptorNotification(_))
117 .WillOnce(SetDecryptorIfNotNull(
118 decryptor,
119 base::Bind(&DecryptingDemuxerStreamTest::DecryptorSet,
120 base::Unretained(this)),
121 &is_decryptor_set_));
122 EXPECT_CALL(*this, DecryptorSet(expected_result));
123 }
124
115 // The following functions are used to test stream-type-neutral logic in 125 // The following functions are used to test stream-type-neutral logic in
116 // DecryptingDemuxerStream. Therefore, we don't specify audio or video in the 126 // DecryptingDemuxerStream. Therefore, we don't specify audio or video in the
117 // function names. But for testing purpose, they all use an audio input 127 // function names. But for testing purpose, they all use an audio input
118 // demuxer stream. 128 // demuxer stream.
119 129
120 void Initialize() { 130 void Initialize() {
121 EXPECT_CALL(*this, RequestDecryptorNotification(_)) 131 ExpectDecryptorNotification(decryptor_.get(), true);
122 .WillOnce(SetDecryptorIfNotNull(decryptor_.get(), &is_decryptor_set_));
123 EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kAudio, _)) 132 EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kAudio, _))
124 .WillOnce(SaveArg<1>(&key_added_cb_)); 133 .WillOnce(SaveArg<1>(&key_added_cb_));
125 134
126 AudioDecoderConfig input_config( 135 AudioDecoderConfig input_config(
127 kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, 136 kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100,
128 NULL, 0, true); 137 NULL, 0, true);
129 InitializeAudioAndExpectStatus(input_config, PIPELINE_OK); 138 InitializeAudioAndExpectStatus(input_config, PIPELINE_OK);
130 139
131 const AudioDecoderConfig& output_config = 140 const AudioDecoderConfig& output_config =
132 demuxer_stream_->audio_decoder_config(); 141 demuxer_stream_->audio_decoder_config();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 251
243 demuxer_stream_->Reset(NewExpectedClosure()); 252 demuxer_stream_->Reset(NewExpectedClosure());
244 message_loop_.RunUntilIdle(); 253 message_loop_.RunUntilIdle();
245 } 254 }
246 255
247 MOCK_METHOD1(RequestDecryptorNotification, void(const DecryptorReadyCB&)); 256 MOCK_METHOD1(RequestDecryptorNotification, void(const DecryptorReadyCB&));
248 257
249 MOCK_METHOD2(BufferReady, void(DemuxerStream::Status, 258 MOCK_METHOD2(BufferReady, void(DemuxerStream::Status,
250 const scoped_refptr<DecoderBuffer>&)); 259 const scoped_refptr<DecoderBuffer>&));
251 260
261 MOCK_METHOD1(DecryptorSet, void(bool));
262
252 base::MessageLoop message_loop_; 263 base::MessageLoop message_loop_;
253 scoped_ptr<DecryptingDemuxerStream> demuxer_stream_; 264 scoped_ptr<DecryptingDemuxerStream> demuxer_stream_;
254 scoped_ptr<StrictMock<MockDecryptor> > decryptor_; 265 scoped_ptr<StrictMock<MockDecryptor> > decryptor_;
255 // Whether a valid Decryptor has been set in the |demuxer_stream_|. 266 // Whether a valid Decryptor has been set in the |demuxer_stream_|.
256 bool is_decryptor_set_; 267 bool is_decryptor_set_;
257 scoped_ptr<StrictMock<MockDemuxerStream> > input_audio_stream_; 268 scoped_ptr<StrictMock<MockDemuxerStream> > input_audio_stream_;
258 scoped_ptr<StrictMock<MockDemuxerStream> > input_video_stream_; 269 scoped_ptr<StrictMock<MockDemuxerStream> > input_video_stream_;
259 270
260 DemuxerStream::ReadCB pending_demuxer_read_cb_; 271 DemuxerStream::ReadCB pending_demuxer_read_cb_;
261 Decryptor::NewKeyCB key_added_cb_; 272 Decryptor::NewKeyCB key_added_cb_;
262 Decryptor::DecryptCB pending_decrypt_cb_; 273 Decryptor::DecryptCB pending_decrypt_cb_;
263 274
264 // Constant buffers to be returned by the input demuxer streams and the 275 // Constant buffers to be returned by the input demuxer streams and the
265 // |decryptor_|. 276 // |decryptor_|.
266 scoped_refptr<DecoderBuffer> clear_buffer_; 277 scoped_refptr<DecoderBuffer> clear_buffer_;
267 scoped_refptr<DecoderBuffer> encrypted_buffer_; 278 scoped_refptr<DecoderBuffer> encrypted_buffer_;
268 scoped_refptr<DecoderBuffer> decrypted_buffer_; 279 scoped_refptr<DecoderBuffer> decrypted_buffer_;
269 280
270 private: 281 private:
271 DISALLOW_COPY_AND_ASSIGN(DecryptingDemuxerStreamTest); 282 DISALLOW_COPY_AND_ASSIGN(DecryptingDemuxerStreamTest);
272 }; 283 };
273 284
274 TEST_F(DecryptingDemuxerStreamTest, Initialize_NormalAudio) { 285 TEST_F(DecryptingDemuxerStreamTest, Initialize_NormalAudio) {
275 Initialize(); 286 Initialize();
276 } 287 }
277 288
278 TEST_F(DecryptingDemuxerStreamTest, Initialize_NormalVideo) { 289 TEST_F(DecryptingDemuxerStreamTest, Initialize_NormalVideo) {
279 EXPECT_CALL(*this, RequestDecryptorNotification(_)) 290 ExpectDecryptorNotification(decryptor_.get(), true);
280 .WillOnce(SetDecryptorIfNotNull(decryptor_.get(), &is_decryptor_set_));
281 EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kVideo, _)) 291 EXPECT_CALL(*decryptor_, RegisterNewKeyCB(Decryptor::kVideo, _))
282 .WillOnce(SaveArg<1>(&key_added_cb_)); 292 .WillOnce(SaveArg<1>(&key_added_cb_));
283 293
284 VideoDecoderConfig input_config = TestVideoConfig::NormalEncrypted(); 294 VideoDecoderConfig input_config = TestVideoConfig::NormalEncrypted();
285 InitializeVideoAndExpectStatus(input_config, PIPELINE_OK); 295 InitializeVideoAndExpectStatus(input_config, PIPELINE_OK);
286 296
287 const VideoDecoderConfig& output_config = 297 const VideoDecoderConfig& output_config =
288 demuxer_stream_->video_decoder_config(); 298 demuxer_stream_->video_decoder_config();
289 EXPECT_EQ(DemuxerStream::VIDEO, demuxer_stream_->type()); 299 EXPECT_EQ(DemuxerStream::VIDEO, demuxer_stream_->type());
290 EXPECT_FALSE(output_config.is_encrypted()); 300 EXPECT_FALSE(output_config.is_encrypted());
291 EXPECT_EQ(input_config.codec(), output_config.codec()); 301 EXPECT_EQ(input_config.codec(), output_config.codec());
292 EXPECT_EQ(input_config.format(), output_config.format()); 302 EXPECT_EQ(input_config.format(), output_config.format());
293 EXPECT_EQ(input_config.profile(), output_config.profile()); 303 EXPECT_EQ(input_config.profile(), output_config.profile());
294 EXPECT_EQ(input_config.coded_size(), output_config.coded_size()); 304 EXPECT_EQ(input_config.coded_size(), output_config.coded_size());
295 EXPECT_EQ(input_config.visible_rect(), output_config.visible_rect()); 305 EXPECT_EQ(input_config.visible_rect(), output_config.visible_rect());
296 EXPECT_EQ(input_config.natural_size(), output_config.natural_size()); 306 EXPECT_EQ(input_config.natural_size(), output_config.natural_size());
297 ASSERT_EQ(input_config.extra_data_size(), output_config.extra_data_size()); 307 ASSERT_EQ(input_config.extra_data_size(), output_config.extra_data_size());
298 if (input_config.extra_data_size() > 0) { 308 if (input_config.extra_data_size() > 0) {
299 EXPECT_FALSE(output_config.extra_data()); 309 EXPECT_FALSE(output_config.extra_data());
300 EXPECT_EQ(0, memcmp(output_config.extra_data(), input_config.extra_data(), 310 EXPECT_EQ(0, memcmp(output_config.extra_data(), input_config.extra_data(),
301 input_config.extra_data_size())); 311 input_config.extra_data_size()));
302 } 312 }
303 } 313 }
304 314
305 TEST_F(DecryptingDemuxerStreamTest, Initialize_NullDecryptor) { 315 TEST_F(DecryptingDemuxerStreamTest, Initialize_NullDecryptor) {
306 EXPECT_CALL(*this, RequestDecryptorNotification(_)) 316 ExpectDecryptorNotification(NULL, false);
307 .WillRepeatedly(SetDecryptorIfNotNull(static_cast<Decryptor*>(NULL),
308 &is_decryptor_set_));
309
310 AudioDecoderConfig input_config(kCodecVorbis, kSampleFormatPlanarF32, 317 AudioDecoderConfig input_config(kCodecVorbis, kSampleFormatPlanarF32,
311 CHANNEL_LAYOUT_STEREO, 44100, NULL, 0, true); 318 CHANNEL_LAYOUT_STEREO, 44100, NULL, 0, true);
312 InitializeAudioAndExpectStatus(input_config, DECODER_ERROR_NOT_SUPPORTED); 319 InitializeAudioAndExpectStatus(input_config, DECODER_ERROR_NOT_SUPPORTED);
313 } 320 }
314 321
315 // Test normal read case where the buffer is encrypted. 322 // Test normal read case where the buffer is encrypted.
316 TEST_F(DecryptingDemuxerStreamTest, Read_Normal) { 323 TEST_F(DecryptingDemuxerStreamTest, Read_Normal) {
317 Initialize(); 324 Initialize();
318 EnterNormalReadingState(); 325 EnterNormalReadingState();
319 } 326 }
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 } 552 }
546 553
547 // Test destruction after reset. 554 // Test destruction after reset.
548 TEST_F(DecryptingDemuxerStreamTest, Destroy_AfterReset) { 555 TEST_F(DecryptingDemuxerStreamTest, Destroy_AfterReset) {
549 Initialize(); 556 Initialize();
550 EnterNormalReadingState(); 557 EnterNormalReadingState();
551 Reset(); 558 Reset();
552 } 559 }
553 560
554 } // namespace media 561 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/decrypting_demuxer_stream.cc ('k') | media/filters/decrypting_video_decoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698