| 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 "media/cdm/aes_decryptor.h" | 5 #include "media/cdm/aes_decryptor.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <list> | 8 #include <list> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 if (item.second->Contains(session_id)) { | 389 if (item.second->Contains(session_id)) { |
| 390 keys_info.push_back( | 390 keys_info.push_back( |
| 391 new CdmKeyInformation(item.first, CdmKeyInformation::USABLE, 0)); | 391 new CdmKeyInformation(item.first, CdmKeyInformation::USABLE, 0)); |
| 392 } | 392 } |
| 393 } | 393 } |
| 394 } | 394 } |
| 395 | 395 |
| 396 session_keys_change_cb_.Run(session_id, key_added, std::move(keys_info)); | 396 session_keys_change_cb_.Run(session_id, key_added, std::move(keys_info)); |
| 397 } | 397 } |
| 398 | 398 |
| 399 // Runs the parallel steps from https://w3c.github.io/encrypted-media/#close. |
| 399 void AesDecryptor::CloseSession(const std::string& session_id, | 400 void AesDecryptor::CloseSession(const std::string& session_id, |
| 400 std::unique_ptr<SimpleCdmPromise> promise) { | 401 std::unique_ptr<SimpleCdmPromise> promise) { |
| 401 // Validate that this is a reference to an active session and then forget it. | 402 // Validate that this is a reference to an active session and then forget it. |
| 402 std::set<std::string>::iterator it = valid_sessions_.find(session_id); | 403 std::set<std::string>::iterator it = valid_sessions_.find(session_id); |
| 403 DCHECK(it != valid_sessions_.end()); | 404 DCHECK(it != valid_sessions_.end()); |
| 404 | 405 |
| 406 // 5.1. Let cdm be the CDM instance represented by session's cdm instance |
| 407 // value. |
| 408 // 5.2. Use cdm to close the session associated with session. |
| 405 valid_sessions_.erase(it); | 409 valid_sessions_.erase(it); |
| 410 DeleteKeysForSession(session_id); |
| 406 | 411 |
| 407 // Close the session. | 412 // 5.3. Queue a task to run the following steps: |
| 408 DeleteKeysForSession(session_id); | 413 // 5.3.1. Run the Session Closed algorithm on the session. |
| 414 session_closed_cb_.Run(session_id); |
| 415 // 5.3.2. Resolve promise. |
| 409 promise->resolve(); | 416 promise->resolve(); |
| 410 | |
| 411 // Resolve the closed attribute. | |
| 412 session_closed_cb_.Run(session_id); | |
| 413 } | 417 } |
| 414 | 418 |
| 415 void AesDecryptor::RemoveSession(const std::string& session_id, | 419 void AesDecryptor::RemoveSession(const std::string& session_id, |
| 416 std::unique_ptr<SimpleCdmPromise> promise) { | 420 std::unique_ptr<SimpleCdmPromise> promise) { |
| 417 NOTIMPLEMENTED() << "Need to address https://crbug.com/616166."; | 421 NOTIMPLEMENTED() << "Need to address https://crbug.com/616166."; |
| 418 promise->reject(INVALID_ACCESS_ERROR, 0, "Session does not exist."); | 422 promise->reject(INVALID_ACCESS_ERROR, 0, "Session does not exist."); |
| 419 } | 423 } |
| 420 | 424 |
| 421 CdmContext* AesDecryptor::GetCdmContext() { | 425 CdmContext* AesDecryptor::GetCdmContext() { |
| 422 return this; | 426 return this; |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 bool AesDecryptor::DecryptionKey::Init() { | 596 bool AesDecryptor::DecryptionKey::Init() { |
| 593 CHECK(!secret_.empty()); | 597 CHECK(!secret_.empty()); |
| 594 decryption_key_ = | 598 decryption_key_ = |
| 595 crypto::SymmetricKey::Import(crypto::SymmetricKey::AES, secret_); | 599 crypto::SymmetricKey::Import(crypto::SymmetricKey::AES, secret_); |
| 596 if (!decryption_key_) | 600 if (!decryption_key_) |
| 597 return false; | 601 return false; |
| 598 return true; | 602 return true; |
| 599 } | 603 } |
| 600 | 604 |
| 601 } // namespace media | 605 } // namespace media |
| OLD | NEW |