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 |