| 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 |