| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/renderer/media/cdm/proxy_media_keys.h" | 5 #include "content/renderer/media/cdm/proxy_media_keys.h" |
| 6 | 6 |
| 7 #include <utility> |
| 7 #include <vector> | 8 #include <vector> |
| 8 | 9 |
| 9 #include "base/logging.h" | 10 #include "base/logging.h" |
| 10 #include "base/stl_util.h" | 11 #include "base/stl_util.h" |
| 11 #include "content/renderer/media/cdm/renderer_cdm_manager.h" | 12 #include "content/renderer/media/cdm/renderer_cdm_manager.h" |
| 12 #include "media/base/cdm_initialized_promise.h" | 13 #include "media/base/cdm_initialized_promise.h" |
| 13 #include "media/base/cdm_key_information.h" | 14 #include "media/base/cdm_key_information.h" |
| 14 #include "media/base/cdm_promise.h" | 15 #include "media/base/cdm_promise.h" |
| 15 #include "media/base/key_systems.h" | 16 #include "media/base/key_systems.h" |
| 16 | 17 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 30 DCHECK(manager); | 31 DCHECK(manager); |
| 31 scoped_refptr<ProxyMediaKeys> proxy_media_keys(new ProxyMediaKeys( | 32 scoped_refptr<ProxyMediaKeys> proxy_media_keys(new ProxyMediaKeys( |
| 32 manager, session_message_cb, session_closed_cb, legacy_session_error_cb, | 33 manager, session_message_cb, session_closed_cb, legacy_session_error_cb, |
| 33 session_keys_change_cb, session_expiration_update_cb)); | 34 session_keys_change_cb, session_expiration_update_cb)); |
| 34 | 35 |
| 35 // ProxyMediaKeys ownership passed to the promise. | 36 // ProxyMediaKeys ownership passed to the promise. |
| 36 scoped_ptr<media::CdmInitializedPromise> promise( | 37 scoped_ptr<media::CdmInitializedPromise> promise( |
| 37 new media::CdmInitializedPromise(cdm_created_cb, proxy_media_keys)); | 38 new media::CdmInitializedPromise(cdm_created_cb, proxy_media_keys)); |
| 38 | 39 |
| 39 proxy_media_keys->InitializeCdm(key_system, security_origin, | 40 proxy_media_keys->InitializeCdm(key_system, security_origin, |
| 40 use_hw_secure_codecs, promise.Pass()); | 41 use_hw_secure_codecs, std::move(promise)); |
| 41 } | 42 } |
| 42 | 43 |
| 43 void ProxyMediaKeys::SetServerCertificate( | 44 void ProxyMediaKeys::SetServerCertificate( |
| 44 const std::vector<uint8_t>& certificate, | 45 const std::vector<uint8_t>& certificate, |
| 45 scoped_ptr<media::SimpleCdmPromise> promise) { | 46 scoped_ptr<media::SimpleCdmPromise> promise) { |
| 46 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 47 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 47 manager_->SetServerCertificate(cdm_id_, promise_id, certificate); | 48 manager_->SetServerCertificate(cdm_id_, promise_id, certificate); |
| 48 } | 49 } |
| 49 | 50 |
| 50 void ProxyMediaKeys::CreateSessionAndGenerateRequest( | 51 void ProxyMediaKeys::CreateSessionAndGenerateRequest( |
| 51 SessionType session_type, | 52 SessionType session_type, |
| 52 media::EmeInitDataType init_data_type, | 53 media::EmeInitDataType init_data_type, |
| 53 const std::vector<uint8_t>& init_data, | 54 const std::vector<uint8_t>& init_data, |
| 54 scoped_ptr<media::NewSessionCdmPromise> promise) { | 55 scoped_ptr<media::NewSessionCdmPromise> promise) { |
| 55 CdmHostMsg_CreateSession_InitDataType create_session_init_data_type = | 56 CdmHostMsg_CreateSession_InitDataType create_session_init_data_type = |
| 56 INIT_DATA_TYPE_WEBM; | 57 INIT_DATA_TYPE_WEBM; |
| 57 switch (init_data_type) { | 58 switch (init_data_type) { |
| 58 case media::EmeInitDataType::CENC: | 59 case media::EmeInitDataType::CENC: |
| 59 create_session_init_data_type = INIT_DATA_TYPE_CENC; | 60 create_session_init_data_type = INIT_DATA_TYPE_CENC; |
| 60 break; | 61 break; |
| 61 case media::EmeInitDataType::WEBM: | 62 case media::EmeInitDataType::WEBM: |
| 62 create_session_init_data_type = INIT_DATA_TYPE_WEBM; | 63 create_session_init_data_type = INIT_DATA_TYPE_WEBM; |
| 63 break; | 64 break; |
| 64 case media::EmeInitDataType::KEYIDS: | 65 case media::EmeInitDataType::KEYIDS: |
| 65 case media::EmeInitDataType::UNKNOWN: | 66 case media::EmeInitDataType::UNKNOWN: |
| 66 DLOG(ERROR) << "Unsupported EME CreateSession init data type"; | 67 DLOG(ERROR) << "Unsupported EME CreateSession init data type"; |
| 67 promise->reject(NOT_SUPPORTED_ERROR, 0, | 68 promise->reject(NOT_SUPPORTED_ERROR, 0, |
| 68 "Unsupported EME CreateSession init data type"); | 69 "Unsupported EME CreateSession init data type"); |
| 69 return; | 70 return; |
| 70 } | 71 } |
| 71 | 72 |
| 72 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 73 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 73 manager_->CreateSessionAndGenerateRequest(cdm_id_, promise_id, session_type, | 74 manager_->CreateSessionAndGenerateRequest(cdm_id_, promise_id, session_type, |
| 74 create_session_init_data_type, | 75 create_session_init_data_type, |
| 75 init_data); | 76 init_data); |
| 76 } | 77 } |
| 77 | 78 |
| 78 void ProxyMediaKeys::LoadSession( | 79 void ProxyMediaKeys::LoadSession( |
| 79 SessionType session_type, | 80 SessionType session_type, |
| 80 const std::string& session_id, | 81 const std::string& session_id, |
| 81 scoped_ptr<media::NewSessionCdmPromise> promise) { | 82 scoped_ptr<media::NewSessionCdmPromise> promise) { |
| 82 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 83 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 83 manager_->LoadSession(cdm_id_, promise_id, session_type, session_id); | 84 manager_->LoadSession(cdm_id_, promise_id, session_type, session_id); |
| 84 } | 85 } |
| 85 | 86 |
| 86 void ProxyMediaKeys::UpdateSession( | 87 void ProxyMediaKeys::UpdateSession( |
| 87 const std::string& session_id, | 88 const std::string& session_id, |
| 88 const std::vector<uint8_t>& response, | 89 const std::vector<uint8_t>& response, |
| 89 scoped_ptr<media::SimpleCdmPromise> promise) { | 90 scoped_ptr<media::SimpleCdmPromise> promise) { |
| 90 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 91 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 91 manager_->UpdateSession(cdm_id_, promise_id, session_id, response); | 92 manager_->UpdateSession(cdm_id_, promise_id, session_id, response); |
| 92 } | 93 } |
| 93 | 94 |
| 94 void ProxyMediaKeys::CloseSession(const std::string& session_id, | 95 void ProxyMediaKeys::CloseSession(const std::string& session_id, |
| 95 scoped_ptr<media::SimpleCdmPromise> promise) { | 96 scoped_ptr<media::SimpleCdmPromise> promise) { |
| 96 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 97 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 97 manager_->CloseSession(cdm_id_, promise_id, session_id); | 98 manager_->CloseSession(cdm_id_, promise_id, session_id); |
| 98 } | 99 } |
| 99 | 100 |
| 100 void ProxyMediaKeys::RemoveSession( | 101 void ProxyMediaKeys::RemoveSession( |
| 101 const std::string& session_id, | 102 const std::string& session_id, |
| 102 scoped_ptr<media::SimpleCdmPromise> promise) { | 103 scoped_ptr<media::SimpleCdmPromise> promise) { |
| 103 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 104 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 104 manager_->RemoveSession(cdm_id_, promise_id, session_id); | 105 manager_->RemoveSession(cdm_id_, promise_id, session_id); |
| 105 } | 106 } |
| 106 | 107 |
| 107 media::CdmContext* ProxyMediaKeys::GetCdmContext() { | 108 media::CdmContext* ProxyMediaKeys::GetCdmContext() { |
| 108 return this; | 109 return this; |
| 109 } | 110 } |
| 110 | 111 |
| 111 media::Decryptor* ProxyMediaKeys::GetDecryptor() { | 112 media::Decryptor* ProxyMediaKeys::GetDecryptor() { |
| 112 return nullptr; | 113 return nullptr; |
| 113 } | 114 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 134 uint32_t system_code, | 135 uint32_t system_code, |
| 135 const std::string& error_message) { | 136 const std::string& error_message) { |
| 136 legacy_session_error_cb_.Run(session_id, exception, system_code, | 137 legacy_session_error_cb_.Run(session_id, exception, system_code, |
| 137 error_message); | 138 error_message); |
| 138 } | 139 } |
| 139 | 140 |
| 140 void ProxyMediaKeys::OnSessionKeysChange(const std::string& session_id, | 141 void ProxyMediaKeys::OnSessionKeysChange(const std::string& session_id, |
| 141 bool has_additional_usable_key, | 142 bool has_additional_usable_key, |
| 142 media::CdmKeysInfo keys_info) { | 143 media::CdmKeysInfo keys_info) { |
| 143 session_keys_change_cb_.Run(session_id, has_additional_usable_key, | 144 session_keys_change_cb_.Run(session_id, has_additional_usable_key, |
| 144 keys_info.Pass()); | 145 std::move(keys_info)); |
| 145 } | 146 } |
| 146 | 147 |
| 147 void ProxyMediaKeys::OnSessionExpirationUpdate( | 148 void ProxyMediaKeys::OnSessionExpirationUpdate( |
| 148 const std::string& session_id, | 149 const std::string& session_id, |
| 149 const base::Time& new_expiry_time) { | 150 const base::Time& new_expiry_time) { |
| 150 session_expiration_update_cb_.Run(session_id, new_expiry_time); | 151 session_expiration_update_cb_.Run(session_id, new_expiry_time); |
| 151 } | 152 } |
| 152 | 153 |
| 153 void ProxyMediaKeys::OnPromiseResolved(uint32_t promise_id) { | 154 void ProxyMediaKeys::OnPromiseResolved(uint32_t promise_id) { |
| 154 cdm_promise_adapter_.ResolvePromise(promise_id); | 155 cdm_promise_adapter_.ResolvePromise(promise_id); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 manager_->DestroyCdm(cdm_id_); | 189 manager_->DestroyCdm(cdm_id_); |
| 189 manager_->UnregisterMediaKeys(cdm_id_); | 190 manager_->UnregisterMediaKeys(cdm_id_); |
| 190 cdm_promise_adapter_.Clear(); | 191 cdm_promise_adapter_.Clear(); |
| 191 } | 192 } |
| 192 | 193 |
| 193 void ProxyMediaKeys::InitializeCdm( | 194 void ProxyMediaKeys::InitializeCdm( |
| 194 const std::string& key_system, | 195 const std::string& key_system, |
| 195 const GURL& security_origin, | 196 const GURL& security_origin, |
| 196 bool use_hw_secure_codecs, | 197 bool use_hw_secure_codecs, |
| 197 scoped_ptr<media::SimpleCdmPromise> promise) { | 198 scoped_ptr<media::SimpleCdmPromise> promise) { |
| 198 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 199 uint32_t promise_id = cdm_promise_adapter_.SavePromise(std::move(promise)); |
| 199 manager_->InitializeCdm(cdm_id_, promise_id, this, key_system, | 200 manager_->InitializeCdm(cdm_id_, promise_id, this, key_system, |
| 200 security_origin, use_hw_secure_codecs); | 201 security_origin, use_hw_secure_codecs); |
| 201 } | 202 } |
| 202 | 203 |
| 203 } // namespace content | 204 } // namespace content |
| OLD | NEW |