| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "webcontentdecryptionmodulesession_impl.h" | 5 #include "webcontentdecryptionmodulesession_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/numerics/safe_conversions.h" | 10 #include "base/numerics/safe_conversions.h" |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 // (Done in constructor.) | 293 // (Done in constructor.) |
| 294 | 294 |
| 295 // 9.5 Let message be null. | 295 // 9.5 Let message be null. |
| 296 // (Done by CDM.) | 296 // (Done by CDM.) |
| 297 | 297 |
| 298 // 9.6 Let cdm be the CDM instance represented by this object's cdm | 298 // 9.6 Let cdm be the CDM instance represented by this object's cdm |
| 299 // instance value. | 299 // instance value. |
| 300 // 9.7 Use the cdm to execute the following steps: | 300 // 9.7 Use the cdm to execute the following steps: |
| 301 adapter_->InitializeNewSession( | 301 adapter_->InitializeNewSession( |
| 302 eme_init_data_type, sanitized_init_data, convertSessionType(session_type), | 302 eme_init_data_type, sanitized_init_data, convertSessionType(session_type), |
| 303 scoped_ptr<NewSessionCdmPromise>(new NewSessionCdmResultPromise( | 303 std::unique_ptr<NewSessionCdmPromise>(new NewSessionCdmResultPromise( |
| 304 result, adapter_->GetKeySystemUMAPrefix() + kGenerateRequestUMAName, | 304 result, adapter_->GetKeySystemUMAPrefix() + kGenerateRequestUMAName, |
| 305 base::Bind( | 305 base::Bind( |
| 306 &WebContentDecryptionModuleSessionImpl::OnSessionInitialized, | 306 &WebContentDecryptionModuleSessionImpl::OnSessionInitialized, |
| 307 weak_ptr_factory_.GetWeakPtr())))); | 307 weak_ptr_factory_.GetWeakPtr())))); |
| 308 } | 308 } |
| 309 | 309 |
| 310 void WebContentDecryptionModuleSessionImpl::load( | 310 void WebContentDecryptionModuleSessionImpl::load( |
| 311 const blink::WebString& session_id, | 311 const blink::WebString& session_id, |
| 312 blink::WebContentDecryptionModuleResult result) { | 312 blink::WebContentDecryptionModuleResult result) { |
| 313 DCHECK(!session_id.isEmpty()); | 313 DCHECK(!session_id.isEmpty()); |
| 314 DCHECK(session_id_.empty()); | 314 DCHECK(session_id_.empty()); |
| 315 DCHECK(thread_checker_.CalledOnValidThread()); | 315 DCHECK(thread_checker_.CalledOnValidThread()); |
| 316 | 316 |
| 317 std::string sanitized_session_id; | 317 std::string sanitized_session_id; |
| 318 if (!SanitizeSessionId(session_id, &sanitized_session_id)) { | 318 if (!SanitizeSessionId(session_id, &sanitized_session_id)) { |
| 319 result.completeWithError( | 319 result.completeWithError( |
| 320 blink::WebContentDecryptionModuleExceptionInvalidAccessError, 0, | 320 blink::WebContentDecryptionModuleExceptionInvalidAccessError, 0, |
| 321 "Invalid session ID."); | 321 "Invalid session ID."); |
| 322 return; | 322 return; |
| 323 } | 323 } |
| 324 | 324 |
| 325 // TODO(jrummell): Now that there are 2 types of persistent sessions, the | 325 // TODO(jrummell): Now that there are 2 types of persistent sessions, the |
| 326 // session type should be passed from blink. Type should also be passed in the | 326 // session type should be passed from blink. Type should also be passed in the |
| 327 // constructor (and removed from initializeNewSession()). | 327 // constructor (and removed from initializeNewSession()). |
| 328 adapter_->LoadSession( | 328 adapter_->LoadSession( |
| 329 MediaKeys::PERSISTENT_LICENSE_SESSION, sanitized_session_id, | 329 MediaKeys::PERSISTENT_LICENSE_SESSION, sanitized_session_id, |
| 330 scoped_ptr<NewSessionCdmPromise>(new NewSessionCdmResultPromise( | 330 std::unique_ptr<NewSessionCdmPromise>(new NewSessionCdmResultPromise( |
| 331 result, adapter_->GetKeySystemUMAPrefix() + kLoadSessionUMAName, | 331 result, adapter_->GetKeySystemUMAPrefix() + kLoadSessionUMAName, |
| 332 base::Bind( | 332 base::Bind( |
| 333 &WebContentDecryptionModuleSessionImpl::OnSessionInitialized, | 333 &WebContentDecryptionModuleSessionImpl::OnSessionInitialized, |
| 334 weak_ptr_factory_.GetWeakPtr())))); | 334 weak_ptr_factory_.GetWeakPtr())))); |
| 335 } | 335 } |
| 336 | 336 |
| 337 void WebContentDecryptionModuleSessionImpl::update( | 337 void WebContentDecryptionModuleSessionImpl::update( |
| 338 const uint8_t* response, | 338 const uint8_t* response, |
| 339 size_t response_length, | 339 size_t response_length, |
| 340 blink::WebContentDecryptionModuleResult result) { | 340 blink::WebContentDecryptionModuleResult result) { |
| 341 DCHECK(response); | 341 DCHECK(response); |
| 342 DCHECK(!session_id_.empty()); | 342 DCHECK(!session_id_.empty()); |
| 343 DCHECK(thread_checker_.CalledOnValidThread()); | 343 DCHECK(thread_checker_.CalledOnValidThread()); |
| 344 | 344 |
| 345 std::vector<uint8_t> sanitized_response; | 345 std::vector<uint8_t> sanitized_response; |
| 346 if (!SanitizeResponse(adapter_->GetKeySystem(), response, response_length, | 346 if (!SanitizeResponse(adapter_->GetKeySystem(), response, response_length, |
| 347 &sanitized_response)) { | 347 &sanitized_response)) { |
| 348 result.completeWithError( | 348 result.completeWithError( |
| 349 blink::WebContentDecryptionModuleExceptionInvalidAccessError, 0, | 349 blink::WebContentDecryptionModuleExceptionInvalidAccessError, 0, |
| 350 "Invalid response."); | 350 "Invalid response."); |
| 351 return; | 351 return; |
| 352 } | 352 } |
| 353 | 353 |
| 354 adapter_->UpdateSession( | 354 adapter_->UpdateSession( |
| 355 session_id_, sanitized_response, | 355 session_id_, sanitized_response, |
| 356 scoped_ptr<SimpleCdmPromise>(new CdmResultPromise<>( | 356 std::unique_ptr<SimpleCdmPromise>(new CdmResultPromise<>( |
| 357 result, adapter_->GetKeySystemUMAPrefix() + kUpdateSessionUMAName))); | 357 result, adapter_->GetKeySystemUMAPrefix() + kUpdateSessionUMAName))); |
| 358 } | 358 } |
| 359 | 359 |
| 360 void WebContentDecryptionModuleSessionImpl::close( | 360 void WebContentDecryptionModuleSessionImpl::close( |
| 361 blink::WebContentDecryptionModuleResult result) { | 361 blink::WebContentDecryptionModuleResult result) { |
| 362 DCHECK(!session_id_.empty()); | 362 DCHECK(!session_id_.empty()); |
| 363 DCHECK(thread_checker_.CalledOnValidThread()); | 363 DCHECK(thread_checker_.CalledOnValidThread()); |
| 364 adapter_->CloseSession( | 364 adapter_->CloseSession( |
| 365 session_id_, | 365 session_id_, |
| 366 scoped_ptr<SimpleCdmPromise>(new CdmResultPromise<>( | 366 std::unique_ptr<SimpleCdmPromise>(new CdmResultPromise<>( |
| 367 result, adapter_->GetKeySystemUMAPrefix() + kCloseSessionUMAName))); | 367 result, adapter_->GetKeySystemUMAPrefix() + kCloseSessionUMAName))); |
| 368 } | 368 } |
| 369 | 369 |
| 370 void WebContentDecryptionModuleSessionImpl::remove( | 370 void WebContentDecryptionModuleSessionImpl::remove( |
| 371 blink::WebContentDecryptionModuleResult result) { | 371 blink::WebContentDecryptionModuleResult result) { |
| 372 DCHECK(!session_id_.empty()); | 372 DCHECK(!session_id_.empty()); |
| 373 DCHECK(thread_checker_.CalledOnValidThread()); | 373 DCHECK(thread_checker_.CalledOnValidThread()); |
| 374 adapter_->RemoveSession( | 374 adapter_->RemoveSession( |
| 375 session_id_, | 375 session_id_, |
| 376 scoped_ptr<SimpleCdmPromise>(new CdmResultPromise<>( | 376 std::unique_ptr<SimpleCdmPromise>(new CdmResultPromise<>( |
| 377 result, adapter_->GetKeySystemUMAPrefix() + kRemoveSessionUMAName))); | 377 result, adapter_->GetKeySystemUMAPrefix() + kRemoveSessionUMAName))); |
| 378 } | 378 } |
| 379 | 379 |
| 380 void WebContentDecryptionModuleSessionImpl::OnSessionMessage( | 380 void WebContentDecryptionModuleSessionImpl::OnSessionMessage( |
| 381 MediaKeys::MessageType message_type, | 381 MediaKeys::MessageType message_type, |
| 382 const std::vector<uint8_t>& message) { | 382 const std::vector<uint8_t>& message) { |
| 383 DCHECK(client_) << "Client not set before message event"; | 383 DCHECK(client_) << "Client not set before message event"; |
| 384 DCHECK(thread_checker_.CalledOnValidThread()); | 384 DCHECK(thread_checker_.CalledOnValidThread()); |
| 385 client_->message(convertMessageType(message_type), message.data(), | 385 client_->message(convertMessageType(message_type), message.data(), |
| 386 message.size()); | 386 message.size()); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 | 431 |
| 432 DCHECK(session_id_.empty()) << "Session ID may not be changed once set."; | 432 DCHECK(session_id_.empty()) << "Session ID may not be changed once set."; |
| 433 session_id_ = session_id; | 433 session_id_ = session_id; |
| 434 *status = | 434 *status = |
| 435 adapter_->RegisterSession(session_id_, weak_ptr_factory_.GetWeakPtr()) | 435 adapter_->RegisterSession(session_id_, weak_ptr_factory_.GetWeakPtr()) |
| 436 ? SessionInitStatus::NEW_SESSION | 436 ? SessionInitStatus::NEW_SESSION |
| 437 : SessionInitStatus::SESSION_ALREADY_EXISTS; | 437 : SessionInitStatus::SESSION_ALREADY_EXISTS; |
| 438 } | 438 } |
| 439 | 439 |
| 440 } // namespace media | 440 } // namespace media |
| OLD | NEW |