| 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 "media/mojo/clients/mojo_cdm.h" | 5 #include "media/mojo/clients/mojo_cdm.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 } | 33 } |
| 34 | 34 |
| 35 // static | 35 // static |
| 36 void MojoCdm::Create( | 36 void MojoCdm::Create( |
| 37 const std::string& key_system, | 37 const std::string& key_system, |
| 38 const GURL& security_origin, | 38 const GURL& security_origin, |
| 39 const media::CdmConfig& cdm_config, | 39 const media::CdmConfig& cdm_config, |
| 40 mojom::ContentDecryptionModulePtr remote_cdm, | 40 mojom::ContentDecryptionModulePtr remote_cdm, |
| 41 const media::SessionMessageCB& session_message_cb, | 41 const media::SessionMessageCB& session_message_cb, |
| 42 const media::SessionClosedCB& session_closed_cb, | 42 const media::SessionClosedCB& session_closed_cb, |
| 43 const media::LegacySessionErrorCB& legacy_session_error_cb, | |
| 44 const media::SessionKeysChangeCB& session_keys_change_cb, | 43 const media::SessionKeysChangeCB& session_keys_change_cb, |
| 45 const media::SessionExpirationUpdateCB& session_expiration_update_cb, | 44 const media::SessionExpirationUpdateCB& session_expiration_update_cb, |
| 46 const media::CdmCreatedCB& cdm_created_cb) { | 45 const media::CdmCreatedCB& cdm_created_cb) { |
| 47 scoped_refptr<MojoCdm> mojo_cdm( | 46 scoped_refptr<MojoCdm> mojo_cdm( |
| 48 new MojoCdm(std::move(remote_cdm), session_message_cb, session_closed_cb, | 47 new MojoCdm(std::move(remote_cdm), session_message_cb, session_closed_cb, |
| 49 legacy_session_error_cb, session_keys_change_cb, | 48 session_keys_change_cb, session_expiration_update_cb)); |
| 50 session_expiration_update_cb)); | |
| 51 | 49 |
| 52 // |mojo_cdm| ownership is passed to the promise. | 50 // |mojo_cdm| ownership is passed to the promise. |
| 53 std::unique_ptr<CdmInitializedPromise> promise( | 51 std::unique_ptr<CdmInitializedPromise> promise( |
| 54 new CdmInitializedPromise(cdm_created_cb, mojo_cdm)); | 52 new CdmInitializedPromise(cdm_created_cb, mojo_cdm)); |
| 55 | 53 |
| 56 mojo_cdm->InitializeCdm(key_system, security_origin, cdm_config, | 54 mojo_cdm->InitializeCdm(key_system, security_origin, cdm_config, |
| 57 std::move(promise)); | 55 std::move(promise)); |
| 58 } | 56 } |
| 59 | 57 |
| 60 MojoCdm::MojoCdm(mojom::ContentDecryptionModulePtr remote_cdm, | 58 MojoCdm::MojoCdm(mojom::ContentDecryptionModulePtr remote_cdm, |
| 61 const SessionMessageCB& session_message_cb, | 59 const SessionMessageCB& session_message_cb, |
| 62 const SessionClosedCB& session_closed_cb, | 60 const SessionClosedCB& session_closed_cb, |
| 63 const LegacySessionErrorCB& legacy_session_error_cb, | |
| 64 const SessionKeysChangeCB& session_keys_change_cb, | 61 const SessionKeysChangeCB& session_keys_change_cb, |
| 65 const SessionExpirationUpdateCB& session_expiration_update_cb) | 62 const SessionExpirationUpdateCB& session_expiration_update_cb) |
| 66 : remote_cdm_(std::move(remote_cdm)), | 63 : remote_cdm_(std::move(remote_cdm)), |
| 67 binding_(this), | 64 binding_(this), |
| 68 cdm_id_(CdmContext::kInvalidCdmId), | 65 cdm_id_(CdmContext::kInvalidCdmId), |
| 69 session_message_cb_(session_message_cb), | 66 session_message_cb_(session_message_cb), |
| 70 session_closed_cb_(session_closed_cb), | 67 session_closed_cb_(session_closed_cb), |
| 71 legacy_session_error_cb_(legacy_session_error_cb), | |
| 72 session_keys_change_cb_(session_keys_change_cb), | 68 session_keys_change_cb_(session_keys_change_cb), |
| 73 session_expiration_update_cb_(session_expiration_update_cb), | 69 session_expiration_update_cb_(session_expiration_update_cb), |
| 74 weak_factory_(this) { | 70 weak_factory_(this) { |
| 75 DVLOG(1) << __FUNCTION__; | 71 DVLOG(1) << __FUNCTION__; |
| 76 DCHECK(!session_message_cb_.is_null()); | 72 DCHECK(!session_message_cb_.is_null()); |
| 77 DCHECK(!session_closed_cb_.is_null()); | 73 DCHECK(!session_closed_cb_.is_null()); |
| 78 DCHECK(!legacy_session_error_cb_.is_null()); | |
| 79 DCHECK(!session_keys_change_cb_.is_null()); | 74 DCHECK(!session_keys_change_cb_.is_null()); |
| 80 DCHECK(!session_expiration_update_cb_.is_null()); | 75 DCHECK(!session_expiration_update_cb_.is_null()); |
| 81 | 76 |
| 82 remote_cdm_->SetClient(binding_.CreateInterfacePtrAndBind()); | 77 remote_cdm_->SetClient(binding_.CreateInterfacePtrAndBind()); |
| 83 } | 78 } |
| 84 | 79 |
| 85 MojoCdm::~MojoCdm() { | 80 MojoCdm::~MojoCdm() { |
| 86 DVLOG(1) << __FUNCTION__; | 81 DVLOG(1) << __FUNCTION__; |
| 87 DCHECK(thread_checker_.CalledOnValidThread()); | 82 DCHECK(thread_checker_.CalledOnValidThread()); |
| 88 | 83 |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 | 229 |
| 235 int MojoCdm::GetCdmId() const { | 230 int MojoCdm::GetCdmId() const { |
| 236 base::AutoLock auto_lock(lock_); | 231 base::AutoLock auto_lock(lock_); |
| 237 // Can be called on a different thread. | 232 // Can be called on a different thread. |
| 238 DCHECK_NE(CdmContext::kInvalidCdmId, cdm_id_); | 233 DCHECK_NE(CdmContext::kInvalidCdmId, cdm_id_); |
| 239 return cdm_id_; | 234 return cdm_id_; |
| 240 } | 235 } |
| 241 | 236 |
| 242 void MojoCdm::OnSessionMessage(const mojo::String& session_id, | 237 void MojoCdm::OnSessionMessage(const mojo::String& session_id, |
| 243 mojom::CdmMessageType message_type, | 238 mojom::CdmMessageType message_type, |
| 244 mojo::Array<uint8_t> message, | 239 mojo::Array<uint8_t> message) { |
| 245 const GURL& legacy_destination_url) { | |
| 246 DVLOG(2) << __FUNCTION__; | 240 DVLOG(2) << __FUNCTION__; |
| 247 DCHECK(thread_checker_.CalledOnValidThread()); | 241 DCHECK(thread_checker_.CalledOnValidThread()); |
| 248 | 242 |
| 249 session_message_cb_.Run(session_id, | 243 session_message_cb_.Run(session_id, |
| 250 static_cast<MediaKeys::MessageType>(message_type), | 244 static_cast<MediaKeys::MessageType>(message_type), |
| 251 message.storage(), legacy_destination_url); | 245 message.storage()); |
| 252 } | 246 } |
| 253 | 247 |
| 254 void MojoCdm::OnSessionClosed(const mojo::String& session_id) { | 248 void MojoCdm::OnSessionClosed(const mojo::String& session_id) { |
| 255 DVLOG(2) << __FUNCTION__; | 249 DVLOG(2) << __FUNCTION__; |
| 256 DCHECK(thread_checker_.CalledOnValidThread()); | 250 DCHECK(thread_checker_.CalledOnValidThread()); |
| 257 | 251 |
| 258 session_closed_cb_.Run(session_id); | 252 session_closed_cb_.Run(session_id); |
| 259 } | 253 } |
| 260 | 254 |
| 261 void MojoCdm::OnLegacySessionError(const mojo::String& session_id, | |
| 262 mojom::CdmException exception, | |
| 263 uint32_t system_code, | |
| 264 const mojo::String& error_message) { | |
| 265 DVLOG(2) << __FUNCTION__; | |
| 266 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 267 | |
| 268 legacy_session_error_cb_.Run(session_id, | |
| 269 static_cast<MediaKeys::Exception>(exception), | |
| 270 system_code, error_message); | |
| 271 } | |
| 272 | |
| 273 void MojoCdm::OnSessionKeysChange( | 255 void MojoCdm::OnSessionKeysChange( |
| 274 const mojo::String& session_id, | 256 const mojo::String& session_id, |
| 275 bool has_additional_usable_key, | 257 bool has_additional_usable_key, |
| 276 mojo::Array<mojom::CdmKeyInformationPtr> keys_info) { | 258 mojo::Array<mojom::CdmKeyInformationPtr> keys_info) { |
| 277 DVLOG(2) << __FUNCTION__; | 259 DVLOG(2) << __FUNCTION__; |
| 278 DCHECK(thread_checker_.CalledOnValidThread()); | 260 DCHECK(thread_checker_.CalledOnValidThread()); |
| 279 | 261 |
| 280 // TODO(jrummell): Handling resume playback should be done in the media | 262 // TODO(jrummell): Handling resume playback should be done in the media |
| 281 // player, not in the Decryptors. http://crbug.com/413413. | 263 // player, not in the Decryptors. http://crbug.com/413413. |
| 282 if (has_additional_usable_key) { | 264 if (has_additional_usable_key) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 base::AutoLock auto_lock(lock_); | 317 base::AutoLock auto_lock(lock_); |
| 336 | 318 |
| 337 DCHECK(decryptor_task_runner_); | 319 DCHECK(decryptor_task_runner_); |
| 338 DCHECK(decryptor_task_runner_->BelongsToCurrentThread()); | 320 DCHECK(decryptor_task_runner_->BelongsToCurrentThread()); |
| 339 DCHECK(decryptor_); | 321 DCHECK(decryptor_); |
| 340 | 322 |
| 341 decryptor_->OnKeyAdded(); | 323 decryptor_->OnKeyAdded(); |
| 342 } | 324 } |
| 343 | 325 |
| 344 } // namespace media | 326 } // namespace media |
| OLD | NEW |