OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/cdm_adapter.h" | 5 #include "media/cdm/cdm_adapter.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/stl_util.h" | |
11 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
12 #include "base/time/time.h" | 11 #include "base/time/time.h" |
13 #include "media/base/cdm_context.h" | 12 #include "media/base/cdm_context.h" |
14 #include "media/base/cdm_initialized_promise.h" | 13 #include "media/base/cdm_initialized_promise.h" |
15 #include "media/base/cdm_key_information.h" | 14 #include "media/base/cdm_key_information.h" |
16 #include "media/base/limits.h" | 15 #include "media/base/limits.h" |
17 #include "media/cdm/cdm_wrapper.h" | 16 #include "media/cdm/cdm_wrapper.h" |
18 | 17 |
19 namespace media { | 18 namespace media { |
20 | 19 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 DCHECK(task_runner_->BelongsToCurrentThread()); | 256 DCHECK(task_runner_->BelongsToCurrentThread()); |
258 | 257 |
259 if (certificate.size() < limits::kMinCertificateLength || | 258 if (certificate.size() < limits::kMinCertificateLength || |
260 certificate.size() > limits::kMaxCertificateLength) { | 259 certificate.size() > limits::kMaxCertificateLength) { |
261 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, | 260 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, |
262 "Incorrect certificate."); | 261 "Incorrect certificate."); |
263 return; | 262 return; |
264 } | 263 } |
265 | 264 |
266 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 265 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); |
267 cdm_->SetServerCertificate(promise_id, vector_as_array(&certificate), | 266 cdm_->SetServerCertificate(promise_id, certificate.data(), |
268 certificate.size()); | 267 certificate.size()); |
269 } | 268 } |
270 | 269 |
271 void CdmAdapter::CreateSessionAndGenerateRequest( | 270 void CdmAdapter::CreateSessionAndGenerateRequest( |
272 SessionType session_type, | 271 SessionType session_type, |
273 EmeInitDataType init_data_type, | 272 EmeInitDataType init_data_type, |
274 const std::vector<uint8_t>& init_data, | 273 const std::vector<uint8_t>& init_data, |
275 scoped_ptr<NewSessionCdmPromise> promise) { | 274 scoped_ptr<NewSessionCdmPromise> promise) { |
276 DCHECK(task_runner_->BelongsToCurrentThread()); | 275 DCHECK(task_runner_->BelongsToCurrentThread()); |
277 | 276 |
278 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 277 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); |
279 cdm_->CreateSessionAndGenerateRequest( | 278 cdm_->CreateSessionAndGenerateRequest( |
280 promise_id, MediaSessionTypeToCdmSessionType(session_type), | 279 promise_id, MediaSessionTypeToCdmSessionType(session_type), |
281 MediaInitDataTypeToCdmInitDataType(init_data_type), | 280 MediaInitDataTypeToCdmInitDataType(init_data_type), init_data.data(), |
282 vector_as_array(&init_data), init_data.size()); | 281 init_data.size()); |
283 } | 282 } |
284 | 283 |
285 void CdmAdapter::LoadSession(SessionType session_type, | 284 void CdmAdapter::LoadSession(SessionType session_type, |
286 const std::string& session_id, | 285 const std::string& session_id, |
287 scoped_ptr<NewSessionCdmPromise> promise) { | 286 scoped_ptr<NewSessionCdmPromise> promise) { |
288 DCHECK(task_runner_->BelongsToCurrentThread()); | 287 DCHECK(task_runner_->BelongsToCurrentThread()); |
289 | 288 |
290 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 289 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); |
291 cdm_->LoadSession(promise_id, MediaSessionTypeToCdmSessionType(session_type), | 290 cdm_->LoadSession(promise_id, MediaSessionTypeToCdmSessionType(session_type), |
292 session_id.data(), session_id.size()); | 291 session_id.data(), session_id.size()); |
293 } | 292 } |
294 | 293 |
295 void CdmAdapter::UpdateSession(const std::string& session_id, | 294 void CdmAdapter::UpdateSession(const std::string& session_id, |
296 const std::vector<uint8_t>& response, | 295 const std::vector<uint8_t>& response, |
297 scoped_ptr<SimpleCdmPromise> promise) { | 296 scoped_ptr<SimpleCdmPromise> promise) { |
298 DCHECK(task_runner_->BelongsToCurrentThread()); | 297 DCHECK(task_runner_->BelongsToCurrentThread()); |
299 DCHECK(!session_id.empty()); | 298 DCHECK(!session_id.empty()); |
300 DCHECK(!response.empty()); | 299 DCHECK(!response.empty()); |
301 | 300 |
302 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 301 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); |
303 cdm_->UpdateSession(promise_id, session_id.data(), session_id.size(), | 302 cdm_->UpdateSession(promise_id, session_id.data(), session_id.size(), |
304 vector_as_array(&response), response.size()); | 303 response.data(), response.size()); |
305 } | 304 } |
306 | 305 |
307 void CdmAdapter::CloseSession(const std::string& session_id, | 306 void CdmAdapter::CloseSession(const std::string& session_id, |
308 scoped_ptr<SimpleCdmPromise> promise) { | 307 scoped_ptr<SimpleCdmPromise> promise) { |
309 DCHECK(task_runner_->BelongsToCurrentThread()); | 308 DCHECK(task_runner_->BelongsToCurrentThread()); |
310 DCHECK(!session_id.empty()); | 309 DCHECK(!session_id.empty()); |
311 | 310 |
312 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); | 311 uint32_t promise_id = cdm_promise_adapter_.SavePromise(promise.Pass()); |
313 cdm_->CloseSession(promise_id, session_id.data(), session_id.size()); | 312 cdm_->CloseSession(promise_id, session_id.data(), session_id.size()); |
314 } | 313 } |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 // The CDM owns the returned object and must call FileIO::Close() to release it. | 496 // The CDM owns the returned object and must call FileIO::Close() to release it. |
498 cdm::FileIO* CdmAdapter::CreateFileIO(cdm::FileIOClient* client) { | 497 cdm::FileIO* CdmAdapter::CreateFileIO(cdm::FileIOClient* client) { |
499 DCHECK(task_runner_->BelongsToCurrentThread()); | 498 DCHECK(task_runner_->BelongsToCurrentThread()); |
500 | 499 |
501 // TODO(jrummell): This should use the mojo FileIO client. | 500 // TODO(jrummell): This should use the mojo FileIO client. |
502 NOTIMPLEMENTED(); | 501 NOTIMPLEMENTED(); |
503 return nullptr; | 502 return nullptr; |
504 } | 503 } |
505 | 504 |
506 } // namespace media | 505 } // namespace media |
OLD | NEW |