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/services/mojo_cdm.h" | 5 #include "media/mojo/services/mojo_cdm.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "media/base/cdm_key_information.h" | 9 #include "media/base/cdm_key_information.h" |
10 #include "media/base/cdm_promise.h" | 10 #include "media/base/cdm_promise.h" |
11 #include "media/mojo/services/media_type_converters.h" | 11 #include "media/mojo/services/media_type_converters.h" |
12 #include "third_party/mojo/src/mojo/public/cpp/application/connect.h" | 12 #include "third_party/mojo/src/mojo/public/cpp/application/connect.h" |
13 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_impl.h" | 13 #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_impl.h" |
14 #include "third_party/mojo/src/mojo/public/interfaces/application/service_provid
er.mojom.h" | 14 #include "third_party/mojo/src/mojo/public/interfaces/application/service_provid
er.mojom.h" |
15 #include "url/gurl.h" | 15 #include "url/gurl.h" |
16 | 16 |
17 namespace media { | 17 namespace media { |
18 | 18 |
19 static mojo::Array<uint8_t> CreateMojoArray(const uint8_t* data, int length) { | |
20 DCHECK(data); | |
21 DCHECK_GT(length, 0); | |
22 std::vector<uint8_t> vector(data, data + length); | |
23 mojo::Array<uint8_t> array; | |
24 array.Swap(&vector); | |
25 return array.Pass(); | |
26 } | |
27 | |
28 template <typename PromiseType> | 19 template <typename PromiseType> |
29 static void RejectPromise(scoped_ptr<PromiseType> promise, | 20 static void RejectPromise(scoped_ptr<PromiseType> promise, |
30 mojo::CdmPromiseResultPtr result) { | 21 mojo::CdmPromiseResultPtr result) { |
31 promise->reject(static_cast<MediaKeys::Exception>(result->exception), | 22 promise->reject(static_cast<MediaKeys::Exception>(result->exception), |
32 result->system_code, result->error_message); | 23 result->system_code, result->error_message); |
33 } | 24 } |
34 | 25 |
35 MojoCdm::MojoCdm(mojo::ContentDecryptionModulePtr remote_cdm, | 26 MojoCdm::MojoCdm(mojo::ContentDecryptionModulePtr remote_cdm, |
36 const SessionMessageCB& session_message_cb, | 27 const SessionMessageCB& session_message_cb, |
37 const SessionClosedCB& session_closed_cb, | 28 const SessionClosedCB& session_closed_cb, |
(...skipping 17 matching lines...) Expand all Loading... |
55 | 46 |
56 mojo::ContentDecryptionModuleClientPtr client_ptr; | 47 mojo::ContentDecryptionModuleClientPtr client_ptr; |
57 binding_.Bind(GetProxy(&client_ptr)); | 48 binding_.Bind(GetProxy(&client_ptr)); |
58 remote_cdm_->SetClient(client_ptr.Pass()); | 49 remote_cdm_->SetClient(client_ptr.Pass()); |
59 } | 50 } |
60 | 51 |
61 MojoCdm::~MojoCdm() { | 52 MojoCdm::~MojoCdm() { |
62 DVLOG(1) << __FUNCTION__; | 53 DVLOG(1) << __FUNCTION__; |
63 } | 54 } |
64 | 55 |
65 void MojoCdm::SetServerCertificate(const uint8_t* certificate_data, | 56 void MojoCdm::SetServerCertificate(const std::vector<uint8_t>& certificate, |
66 int certificate_data_length, | |
67 scoped_ptr<SimpleCdmPromise> promise) { | 57 scoped_ptr<SimpleCdmPromise> promise) { |
68 remote_cdm_->SetServerCertificate( | 58 remote_cdm_->SetServerCertificate( |
69 CreateMojoArray(certificate_data, certificate_data_length), | 59 mojo::Array<uint8_t>::From(certificate), |
70 base::Bind(&MojoCdm::OnPromiseResult<>, weak_factory_.GetWeakPtr(), | 60 base::Bind(&MojoCdm::OnPromiseResult<>, weak_factory_.GetWeakPtr(), |
71 base::Passed(&promise))); | 61 base::Passed(&promise))); |
72 } | 62 } |
73 | 63 |
74 void MojoCdm::CreateSessionAndGenerateRequest( | 64 void MojoCdm::CreateSessionAndGenerateRequest( |
75 SessionType session_type, | 65 SessionType session_type, |
76 EmeInitDataType init_data_type, | 66 EmeInitDataType init_data_type, |
77 const uint8_t* init_data, | 67 const std::vector<uint8_t>& init_data, |
78 int init_data_length, | |
79 scoped_ptr<NewSessionCdmPromise> promise) { | 68 scoped_ptr<NewSessionCdmPromise> promise) { |
80 remote_cdm_->CreateSessionAndGenerateRequest( | 69 remote_cdm_->CreateSessionAndGenerateRequest( |
81 static_cast<mojo::ContentDecryptionModule::SessionType>(session_type), | 70 static_cast<mojo::ContentDecryptionModule::SessionType>(session_type), |
82 static_cast<mojo::ContentDecryptionModule::InitDataType>(init_data_type), | 71 static_cast<mojo::ContentDecryptionModule::InitDataType>(init_data_type), |
83 CreateMojoArray(init_data, init_data_length), | 72 mojo::Array<uint8_t>::From(init_data), |
84 base::Bind(&MojoCdm::OnPromiseResult<std::string>, | 73 base::Bind(&MojoCdm::OnPromiseResult<std::string>, |
85 weak_factory_.GetWeakPtr(), base::Passed(&promise))); | 74 weak_factory_.GetWeakPtr(), base::Passed(&promise))); |
86 } | 75 } |
87 | 76 |
88 void MojoCdm::LoadSession(SessionType session_type, | 77 void MojoCdm::LoadSession(SessionType session_type, |
89 const std::string& session_id, | 78 const std::string& session_id, |
90 scoped_ptr<NewSessionCdmPromise> promise) { | 79 scoped_ptr<NewSessionCdmPromise> promise) { |
91 remote_cdm_->LoadSession( | 80 remote_cdm_->LoadSession( |
92 static_cast<mojo::ContentDecryptionModule::SessionType>(session_type), | 81 static_cast<mojo::ContentDecryptionModule::SessionType>(session_type), |
93 session_id, | 82 session_id, |
94 base::Bind(&MojoCdm::OnPromiseResult<std::string>, | 83 base::Bind(&MojoCdm::OnPromiseResult<std::string>, |
95 weak_factory_.GetWeakPtr(), base::Passed(&promise))); | 84 weak_factory_.GetWeakPtr(), base::Passed(&promise))); |
96 } | 85 } |
97 | 86 |
98 void MojoCdm::UpdateSession(const std::string& session_id, | 87 void MojoCdm::UpdateSession(const std::string& session_id, |
99 const uint8_t* response, | 88 const std::vector<uint8_t>& response, |
100 int response_length, | |
101 scoped_ptr<SimpleCdmPromise> promise) { | 89 scoped_ptr<SimpleCdmPromise> promise) { |
102 remote_cdm_->UpdateSession( | 90 remote_cdm_->UpdateSession( |
103 session_id, CreateMojoArray(response, response_length), | 91 session_id, mojo::Array<uint8_t>::From(response), |
104 base::Bind(&MojoCdm::OnPromiseResult<>, weak_factory_.GetWeakPtr(), | 92 base::Bind(&MojoCdm::OnPromiseResult<>, weak_factory_.GetWeakPtr(), |
105 base::Passed(&promise))); | 93 base::Passed(&promise))); |
106 } | 94 } |
107 | 95 |
108 void MojoCdm::CloseSession(const std::string& session_id, | 96 void MojoCdm::CloseSession(const std::string& session_id, |
109 scoped_ptr<SimpleCdmPromise> promise) { | 97 scoped_ptr<SimpleCdmPromise> promise) { |
110 remote_cdm_->CloseSession(session_id, base::Bind(&MojoCdm::OnPromiseResult<>, | 98 remote_cdm_->CloseSession(session_id, base::Bind(&MojoCdm::OnPromiseResult<>, |
111 weak_factory_.GetWeakPtr(), | 99 weak_factory_.GetWeakPtr(), |
112 base::Passed(&promise))); | 100 base::Passed(&promise))); |
113 } | 101 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 key_data.Pass()); | 155 key_data.Pass()); |
168 } | 156 } |
169 | 157 |
170 void MojoCdm::OnSessionExpirationUpdate(const mojo::String& session_id, | 158 void MojoCdm::OnSessionExpirationUpdate(const mojo::String& session_id, |
171 double new_expiry_time_sec) { | 159 double new_expiry_time_sec) { |
172 session_expiration_update_cb_.Run( | 160 session_expiration_update_cb_.Run( |
173 session_id, base::Time::FromDoubleT(new_expiry_time_sec)); | 161 session_id, base::Time::FromDoubleT(new_expiry_time_sec)); |
174 } | 162 } |
175 | 163 |
176 } // namespace media | 164 } // namespace media |
OLD | NEW |