| OLD | NEW |
| 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 expected_result), | 275 expected_result), |
| 276 base::Bind(&AesDecryptorTest::OnReject, | 276 base::Bind(&AesDecryptorTest::OnReject, |
| 277 base::Unretained(this), | 277 base::Unretained(this), |
| 278 expected_result))); | 278 expected_result))); |
| 279 return promise.Pass(); | 279 return promise.Pass(); |
| 280 } | 280 } |
| 281 | 281 |
| 282 // Creates a new session using |key_id|. Returns the session ID. | 282 // Creates a new session using |key_id|. Returns the session ID. |
| 283 std::string CreateSession(const std::vector<uint8>& key_id) { | 283 std::string CreateSession(const std::vector<uint8>& key_id) { |
| 284 DCHECK(!key_id.empty()); | 284 DCHECK(!key_id.empty()); |
| 285 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsJSONDictionary())); | 285 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsJSONDictionary(), |
| 286 GURL::EmptyGURL())); |
| 286 decryptor_.CreateSessionAndGenerateRequest( | 287 decryptor_.CreateSessionAndGenerateRequest( |
| 287 MediaKeys::TEMPORARY_SESSION, std::string(), &key_id[0], key_id.size(), | 288 MediaKeys::TEMPORARY_SESSION, std::string(), &key_id[0], key_id.size(), |
| 288 CreateSessionPromise(RESOLVED)); | 289 CreateSessionPromise(RESOLVED)); |
| 289 // This expects the promise to be called synchronously, which is the case | 290 // This expects the promise to be called synchronously, which is the case |
| 290 // for AesDecryptor. | 291 // for AesDecryptor. |
| 291 return web_session_id_; | 292 return web_session_id_; |
| 292 } | 293 } |
| 293 | 294 |
| 294 // Closes the session specified by |session_id|. | 295 // Closes the session specified by |session_id|. |
| 295 void CloseSession(const std::string& session_id) { | 296 void CloseSession(const std::string& session_id) { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 case DATA_AND_SIZE_MISMATCH: | 397 case DATA_AND_SIZE_MISMATCH: |
| 397 EXPECT_NE(plain_text.size(), decrypted_text.size()); | 398 EXPECT_NE(plain_text.size(), decrypted_text.size()); |
| 398 break; | 399 break; |
| 399 case DECRYPT_ERROR: | 400 case DECRYPT_ERROR: |
| 400 case NO_KEY: | 401 case NO_KEY: |
| 401 EXPECT_TRUE(decrypted_text.empty()); | 402 EXPECT_TRUE(decrypted_text.empty()); |
| 402 break; | 403 break; |
| 403 } | 404 } |
| 404 } | 405 } |
| 405 | 406 |
| 406 MOCK_METHOD3(OnSessionMessage, | 407 MOCK_METHOD4(OnSessionMessage, |
| 407 void(const std::string& web_session_id, | 408 void(const std::string& web_session_id, |
| 408 MediaKeys::MessageType message_type, | 409 MediaKeys::MessageType message_type, |
| 409 const std::vector<uint8>& message)); | 410 const std::vector<uint8>& message, |
| 411 const GURL& legacy_destination_url)); |
| 410 MOCK_METHOD1(OnSessionClosed, void(const std::string& web_session_id)); | 412 MOCK_METHOD1(OnSessionClosed, void(const std::string& web_session_id)); |
| 411 | 413 |
| 412 AesDecryptor decryptor_; | 414 AesDecryptor decryptor_; |
| 413 AesDecryptor::DecryptCB decrypt_cb_; | 415 AesDecryptor::DecryptCB decrypt_cb_; |
| 414 std::string web_session_id_; | 416 std::string web_session_id_; |
| 415 CdmKeysInfo keys_info_; | 417 CdmKeysInfo keys_info_; |
| 416 | 418 |
| 417 // Constants for testing. | 419 // Constants for testing. |
| 418 const std::vector<uint8> original_data_; | 420 const std::vector<uint8> original_data_; |
| 419 const std::vector<uint8> encrypted_data_; | 421 const std::vector<uint8> encrypted_data_; |
| 420 const std::vector<uint8> subsample_encrypted_data_; | 422 const std::vector<uint8> subsample_encrypted_data_; |
| 421 const std::vector<uint8> key_id_; | 423 const std::vector<uint8> key_id_; |
| 422 const std::vector<uint8> iv_; | 424 const std::vector<uint8> iv_; |
| 423 const std::vector<SubsampleEntry> normal_subsample_entries_; | 425 const std::vector<SubsampleEntry> normal_subsample_entries_; |
| 424 const std::vector<SubsampleEntry> no_subsample_entries_; | 426 const std::vector<SubsampleEntry> no_subsample_entries_; |
| 425 }; | 427 }; |
| 426 | 428 |
| 427 TEST_F(AesDecryptorTest, CreateSessionWithNullInitData) { | 429 TEST_F(AesDecryptorTest, CreateSessionWithNullInitData) { |
| 428 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsEmpty())); | 430 EXPECT_CALL(*this, |
| 431 OnSessionMessage(IsNotEmpty(), _, IsEmpty(), GURL::EmptyGURL())); |
| 429 decryptor_.CreateSessionAndGenerateRequest(MediaKeys::TEMPORARY_SESSION, | 432 decryptor_.CreateSessionAndGenerateRequest(MediaKeys::TEMPORARY_SESSION, |
| 430 std::string(), NULL, 0, | 433 std::string(), NULL, 0, |
| 431 CreateSessionPromise(RESOLVED)); | 434 CreateSessionPromise(RESOLVED)); |
| 432 } | 435 } |
| 433 | 436 |
| 434 TEST_F(AesDecryptorTest, MultipleCreateSession) { | 437 TEST_F(AesDecryptorTest, MultipleCreateSession) { |
| 435 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsEmpty())); | 438 EXPECT_CALL(*this, |
| 439 OnSessionMessage(IsNotEmpty(), _, IsEmpty(), GURL::EmptyGURL())); |
| 436 decryptor_.CreateSessionAndGenerateRequest(MediaKeys::TEMPORARY_SESSION, | 440 decryptor_.CreateSessionAndGenerateRequest(MediaKeys::TEMPORARY_SESSION, |
| 437 std::string(), NULL, 0, | 441 std::string(), NULL, 0, |
| 438 CreateSessionPromise(RESOLVED)); | 442 CreateSessionPromise(RESOLVED)); |
| 439 | 443 |
| 440 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsEmpty())); | 444 EXPECT_CALL(*this, |
| 445 OnSessionMessage(IsNotEmpty(), _, IsEmpty(), GURL::EmptyGURL())); |
| 441 decryptor_.CreateSessionAndGenerateRequest(MediaKeys::TEMPORARY_SESSION, | 446 decryptor_.CreateSessionAndGenerateRequest(MediaKeys::TEMPORARY_SESSION, |
| 442 std::string(), NULL, 0, | 447 std::string(), NULL, 0, |
| 443 CreateSessionPromise(RESOLVED)); | 448 CreateSessionPromise(RESOLVED)); |
| 444 | 449 |
| 445 EXPECT_CALL(*this, OnSessionMessage(IsNotEmpty(), _, IsEmpty())); | 450 EXPECT_CALL(*this, |
| 451 OnSessionMessage(IsNotEmpty(), _, IsEmpty(), GURL::EmptyGURL())); |
| 446 decryptor_.CreateSessionAndGenerateRequest(MediaKeys::TEMPORARY_SESSION, | 452 decryptor_.CreateSessionAndGenerateRequest(MediaKeys::TEMPORARY_SESSION, |
| 447 std::string(), NULL, 0, | 453 std::string(), NULL, 0, |
| 448 CreateSessionPromise(RESOLVED)); | 454 CreateSessionPromise(RESOLVED)); |
| 449 } | 455 } |
| 450 | 456 |
| 451 TEST_F(AesDecryptorTest, NormalDecryption) { | 457 TEST_F(AesDecryptorTest, NormalDecryption) { |
| 452 std::string session_id = CreateSession(key_id_); | 458 std::string session_id = CreateSession(key_id_); |
| 453 UpdateSessionAndExpect(session_id, kKeyAsJWK, RESOLVED); | 459 UpdateSessionAndExpect(session_id, kKeyAsJWK, RESOLVED); |
| 454 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( | 460 scoped_refptr<DecoderBuffer> encrypted_buffer = CreateEncryptedBuffer( |
| 455 encrypted_data_, key_id_, iv_, no_subsample_entries_); | 461 encrypted_data_, key_id_, iv_, no_subsample_entries_); |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 EXPECT_TRUE(KeysInfoContains(key_id1)); | 871 EXPECT_TRUE(KeysInfoContains(key_id1)); |
| 866 EXPECT_FALSE(KeysInfoContains(key_id2)); | 872 EXPECT_FALSE(KeysInfoContains(key_id2)); |
| 867 | 873 |
| 868 // Add second key, verify both IDs returned. | 874 // Add second key, verify both IDs returned. |
| 869 UpdateSessionAndExpect(session_id, kKey2AsJWK, RESOLVED); | 875 UpdateSessionAndExpect(session_id, kKey2AsJWK, RESOLVED); |
| 870 EXPECT_TRUE(KeysInfoContains(key_id1)); | 876 EXPECT_TRUE(KeysInfoContains(key_id1)); |
| 871 EXPECT_TRUE(KeysInfoContains(key_id2)); | 877 EXPECT_TRUE(KeysInfoContains(key_id2)); |
| 872 } | 878 } |
| 873 | 879 |
| 874 } // namespace media | 880 } // namespace media |
| OLD | NEW |