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

Side by Side Diff: media/cdm/aes_decryptor_unittest.cc

Issue 1920433003: EME: Address TODOs related to the removal of prefixed EME (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix failing media_unittests. Created 4 years, 6 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/cdm/aes_decryptor.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "media/cdm/aes_decryptor.h" 5 #include "media/cdm/aes_decryptor.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 // for AesDecryptor. 332 // for AesDecryptor.
333 return session_id_; 333 return session_id_;
334 } 334 }
335 335
336 // Closes the session specified by |session_id|. 336 // Closes the session specified by |session_id|.
337 void CloseSession(const std::string& session_id) { 337 void CloseSession(const std::string& session_id) {
338 EXPECT_CALL(*this, OnSessionClosed(session_id)); 338 EXPECT_CALL(*this, OnSessionClosed(session_id));
339 cdm_->CloseSession(session_id, CreatePromise(RESOLVED)); 339 cdm_->CloseSession(session_id, CreatePromise(RESOLVED));
340 } 340 }
341 341
342 // Removes the session specified by |session_id|. This should simply do a 342 // Only persistent sessions can be removed.
343 // CloseSession().
344 // TODO(jrummell): Clean this up when the prefixed API is removed.
345 // http://crbug.com/249976.
346 void RemoveSession(const std::string& session_id) { 343 void RemoveSession(const std::string& session_id) {
347 if (GetParam() == "AesDecryptor") { 344 cdm_->RemoveSession(session_id, CreatePromise(REJECTED));
348 EXPECT_CALL(*this, OnSessionClosed(session_id));
349 cdm_->RemoveSession(session_id, CreatePromise(RESOLVED));
350 } else {
351 // CdmAdapter fails as only persistent sessions can be removed.
352 cdm_->RemoveSession(session_id, CreatePromise(REJECTED));
353 }
354 } 345 }
355 346
356 MOCK_METHOD2(OnSessionKeysChangeCalled, 347 MOCK_METHOD2(OnSessionKeysChangeCalled,
357 void(const std::string& session_id, 348 void(const std::string& session_id,
358 bool has_additional_usable_key)); 349 bool has_additional_usable_key));
359 350
360 void OnSessionKeysChange(const std::string& session_id, 351 void OnSessionKeysChange(const std::string& session_id,
361 bool has_additional_usable_key, 352 bool has_additional_usable_key,
362 CdmKeysInfo keys_info) { 353 CdmKeysInfo keys_info) {
363 keys_info_.swap(keys_info); 354 keys_info_.swap(keys_info);
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 // Constants for testing. 481 // Constants for testing.
491 const std::vector<uint8_t> original_data_; 482 const std::vector<uint8_t> original_data_;
492 const std::vector<uint8_t> encrypted_data_; 483 const std::vector<uint8_t> encrypted_data_;
493 const std::vector<uint8_t> subsample_encrypted_data_; 484 const std::vector<uint8_t> subsample_encrypted_data_;
494 const std::vector<uint8_t> key_id_; 485 const std::vector<uint8_t> key_id_;
495 const std::vector<uint8_t> iv_; 486 const std::vector<uint8_t> iv_;
496 const std::vector<SubsampleEntry> normal_subsample_entries_; 487 const std::vector<SubsampleEntry> normal_subsample_entries_;
497 const std::vector<SubsampleEntry> no_subsample_entries_; 488 const std::vector<SubsampleEntry> no_subsample_entries_;
498 }; 489 };
499 490
500 TEST_P(AesDecryptorTest, CreateSessionWithNullInitData) { 491 TEST_P(AesDecryptorTest, CreateSessionWithEmptyInitData) {
501 EXPECT_CALL(*this,
502 OnSessionMessage(IsNotEmpty(), _, IsEmpty(), GURL::EmptyGURL()));
503 cdm_->CreateSessionAndGenerateRequest( 492 cdm_->CreateSessionAndGenerateRequest(
504 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM, 493 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM,
505 std::vector<uint8_t>(), CreateSessionPromise(RESOLVED)); 494 std::vector<uint8_t>(), CreateSessionPromise(REJECTED));
495 cdm_->CreateSessionAndGenerateRequest(
496 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::CENC,
497 std::vector<uint8_t>(), CreateSessionPromise(REJECTED));
498 cdm_->CreateSessionAndGenerateRequest(
499 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::KEYIDS,
500 std::vector<uint8_t>(), CreateSessionPromise(REJECTED));
501 }
502
503 TEST_P(AesDecryptorTest, CreateSessionWithVariousLengthInitData_WebM) {
504 std::vector<uint8_t> init_data;
505 init_data.resize(1);
506 cdm_->CreateSessionAndGenerateRequest(
507 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM,
508 std::vector<uint8_t>(init_data), CreateSessionPromise(RESOLVED));
509
510 init_data.resize(16); // The expected size.
511 cdm_->CreateSessionAndGenerateRequest(
512 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM,
513 std::vector<uint8_t>(init_data), CreateSessionPromise(RESOLVED));
514
515 init_data.resize(512);
jrummell 2016/06/25 00:39:38 Should limits::kMaxKeyIdLength be used here (and +
ddorwin 2016/08/11 20:28:32 Tests should avoid using the same constants as the
jrummell 2016/08/12 19:24:25 Acknowledged.
516 cdm_->CreateSessionAndGenerateRequest(
517 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM,
518 std::vector<uint8_t>(init_data), CreateSessionPromise(RESOLVED));
519
520 init_data.resize(513);
521 cdm_->CreateSessionAndGenerateRequest(
522 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM,
523 std::vector<uint8_t>(init_data), CreateSessionPromise(REJECTED));
506 } 524 }
507 525
508 TEST_P(AesDecryptorTest, MultipleCreateSession) { 526 TEST_P(AesDecryptorTest, MultipleCreateSession) {
509 EXPECT_CALL(*this, 527 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsNotEmpty(),
510 OnSessionMessage(IsNotEmpty(), _, IsEmpty(), GURL::EmptyGURL())); 528 GURL::EmptyGURL()));
511 cdm_->CreateSessionAndGenerateRequest( 529 cdm_->CreateSessionAndGenerateRequest(
512 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM, 530 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM,
513 std::vector<uint8_t>(), CreateSessionPromise(RESOLVED)); 531 std::vector<uint8_t>(1), CreateSessionPromise(RESOLVED));
514 532
515 EXPECT_CALL(*this, 533 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsNotEmpty(),
516 OnSessionMessage(IsNotEmpty(), _, IsEmpty(), GURL::EmptyGURL())); 534 GURL::EmptyGURL()));
517 cdm_->CreateSessionAndGenerateRequest( 535 cdm_->CreateSessionAndGenerateRequest(
518 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM, 536 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM,
519 std::vector<uint8_t>(), CreateSessionPromise(RESOLVED)); 537 std::vector<uint8_t>(1), CreateSessionPromise(RESOLVED));
520 538
521 EXPECT_CALL(*this, 539 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsNotEmpty(),
522 OnSessionMessage(IsNotEmpty(), _, IsEmpty(), GURL::EmptyGURL())); 540 GURL::EmptyGURL()));
523 cdm_->CreateSessionAndGenerateRequest( 541 cdm_->CreateSessionAndGenerateRequest(
524 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM, 542 MediaKeys::TEMPORARY_SESSION, EmeInitDataType::WEBM,
525 std::vector<uint8_t>(), CreateSessionPromise(RESOLVED)); 543 std::vector<uint8_t>(1), CreateSessionPromise(RESOLVED));
526 } 544 }
527 545
528 TEST_P(AesDecryptorTest, CreateSessionWithCencInitData) { 546 TEST_P(AesDecryptorTest, CreateSessionWithCencInitData) {
529 const uint8_t init_data[] = { 547 const uint8_t init_data[] = {
530 0x00, 0x00, 0x00, 0x44, // size = 68 548 0x00, 0x00, 0x00, 0x44, // size = 68
531 0x70, 0x73, 0x73, 0x68, // 'pssh' 549 0x70, 0x73, 0x73, 0x68, // 'pssh'
532 0x01, // version 550 0x01, // version
533 0x00, 0x00, 0x00, // flags 551 0x00, 0x00, 0x00, // flags
534 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID 552 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID
535 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, 553 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B,
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( 776 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer(
759 encrypted_data_, key_id_, iv_, no_subsample_entries_); 777 encrypted_data_, key_id_, iv_, no_subsample_entries_);
760 778
761 UpdateSessionAndExpect(session_id, kKeyAsJWK, RESOLVED, true); 779 UpdateSessionAndExpect(session_id, kKeyAsJWK, RESOLVED, true);
762 ASSERT_NO_FATAL_FAILURE( 780 ASSERT_NO_FATAL_FAILURE(
763 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); 781 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS));
764 782
765 CloseSession(session_id); 783 CloseSession(session_id);
766 } 784 }
767 785
768 TEST_P(AesDecryptorTest, RemoveSession) { 786 // Re-enable if https://crbug.com/416194 is fixed.
769 // TODO(jrummell): Clean this up when the prefixed API is removed. 787 TEST_P(AesDecryptorTest, RemoveSession_DISABLED) {
770 // http://crbug.com/249976.
771 std::string session_id = CreateSession(key_id_); 788 std::string session_id = CreateSession(key_id_);
772 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( 789 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer(
773 encrypted_data_, key_id_, iv_, no_subsample_entries_); 790 encrypted_data_, key_id_, iv_, no_subsample_entries_);
774 791
775 UpdateSessionAndExpect(session_id, kKeyAsJWK, RESOLVED, true); 792 UpdateSessionAndExpect(session_id, kKeyAsJWK, RESOLVED, true);
776 ASSERT_NO_FATAL_FAILURE( 793 ASSERT_NO_FATAL_FAILURE(
777 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS)); 794 DecryptAndExpect(encrypted_buffer, original_data_, SUCCESS));
778 795
779 RemoveSession(session_id); 796 RemoveSession(session_id);
780 } 797 }
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 INSTANTIATE_TEST_CASE_P(CdmAdapter, 1037 INSTANTIATE_TEST_CASE_P(CdmAdapter,
1021 AesDecryptorTest, 1038 AesDecryptorTest,
1022 testing::Values("CdmAdapter")); 1039 testing::Values("CdmAdapter"));
1023 #endif 1040 #endif
1024 1041
1025 // TODO(jrummell): Once MojoCdm/MojoCdmService/MojoDecryptor/ 1042 // TODO(jrummell): Once MojoCdm/MojoCdmService/MojoDecryptor/
1026 // MojoDecryptorService are implemented, add a third version that tests the 1043 // MojoDecryptorService are implemented, add a third version that tests the
1027 // CDM via mojo. 1044 // CDM via mojo.
1028 1045
1029 } // namespace media 1046 } // namespace media
OLDNEW
« no previous file with comments | « media/cdm/aes_decryptor.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698