OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/pepper/content_decryptor_delegate.h" | 5 #include "content/renderer/pepper/content_decryptor_delegate.h" |
6 | 6 |
7 #include "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
10 #include "base/safe_numerics.h" | 10 #include "base/safe_numerics.h" |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 const media::SessionReadyCB& session_ready_cb, | 278 const media::SessionReadyCB& session_ready_cb, |
279 const media::SessionClosedCB& session_closed_cb, | 279 const media::SessionClosedCB& session_closed_cb, |
280 const media::SessionErrorCB& session_error_cb) { | 280 const media::SessionErrorCB& session_error_cb) { |
281 session_created_cb_ = session_created_cb; | 281 session_created_cb_ = session_created_cb; |
282 session_message_cb_ = session_message_cb; | 282 session_message_cb_ = session_message_cb; |
283 session_ready_cb_ = session_ready_cb; | 283 session_ready_cb_ = session_ready_cb; |
284 session_closed_cb_ = session_closed_cb; | 284 session_closed_cb_ = session_closed_cb; |
285 session_error_cb_ = session_error_cb; | 285 session_error_cb_ = session_error_cb; |
286 } | 286 } |
287 | 287 |
288 bool ContentDecryptorDelegate::CreateSession(uint32 reference_id, | 288 bool ContentDecryptorDelegate::CreateSession(uint32 session_id, |
289 const std::string& type, | 289 const std::string& type, |
290 const uint8* init_data, | 290 const uint8* init_data, |
291 int init_data_length) { | 291 int init_data_length) { |
292 PP_Var init_data_array = | 292 PP_Var init_data_array = |
293 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( | 293 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( |
294 init_data_length, init_data); | 294 init_data_length, init_data); |
295 | 295 |
296 plugin_decryption_interface_->CreateSession( | 296 plugin_decryption_interface_->CreateSession(pp_instance_, |
297 pp_instance_, | 297 session_id, |
298 reference_id, | 298 StringVar::StringToPPVar(type), |
299 StringVar::StringToPPVar(type), | 299 init_data_array); |
300 init_data_array); | |
301 return true; | 300 return true; |
302 } | 301 } |
303 | 302 |
304 bool ContentDecryptorDelegate::UpdateSession(uint32 reference_id, | 303 bool ContentDecryptorDelegate::UpdateSession(uint32 session_id, |
305 const uint8* response, | 304 const uint8* response, |
306 int response_length) { | 305 int response_length) { |
307 PP_Var response_array = | 306 PP_Var response_array = |
308 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( | 307 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( |
309 response_length, response); | 308 response_length, response); |
310 plugin_decryption_interface_->UpdateSession( | 309 plugin_decryption_interface_->UpdateSession( |
311 pp_instance_, reference_id, response_array); | 310 pp_instance_, session_id, response_array); |
312 return true; | 311 return true; |
313 } | 312 } |
314 | 313 |
315 bool ContentDecryptorDelegate::ReleaseSession(uint32 reference_id) { | 314 bool ContentDecryptorDelegate::ReleaseSession(uint32 session_id) { |
316 plugin_decryption_interface_->ReleaseSession(pp_instance_, reference_id); | 315 plugin_decryption_interface_->ReleaseSession(pp_instance_, session_id); |
317 return true; | 316 return true; |
318 } | 317 } |
319 | 318 |
320 // TODO(xhwang): Remove duplication of code in Decrypt(), | 319 // TODO(xhwang): Remove duplication of code in Decrypt(), |
321 // DecryptAndDecodeAudio() and DecryptAndDecodeVideo(). | 320 // DecryptAndDecodeAudio() and DecryptAndDecodeVideo(). |
322 bool ContentDecryptorDelegate::Decrypt( | 321 bool ContentDecryptorDelegate::Decrypt( |
323 media::Decryptor::StreamType stream_type, | 322 media::Decryptor::StreamType stream_type, |
324 const scoped_refptr<media::DecoderBuffer>& encrypted_buffer, | 323 const scoped_refptr<media::DecoderBuffer>& encrypted_buffer, |
325 const media::Decryptor::DecryptCB& decrypt_cb) { | 324 const media::Decryptor::DecryptCB& decrypt_cb) { |
326 DVLOG(3) << "Decrypt() - stream_type: " << stream_type; | 325 DVLOG(3) << "Decrypt() - stream_type: " << stream_type; |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 | 582 |
584 // TODO(tomfinegan): Need to get stream type from media stack. | 583 // TODO(tomfinegan): Need to get stream type from media stack. |
585 ScopedPPResource pp_resource(encrypted_resource.get()); | 584 ScopedPPResource pp_resource(encrypted_resource.get()); |
586 plugin_decryption_interface_->DecryptAndDecode(pp_instance_, | 585 plugin_decryption_interface_->DecryptAndDecode(pp_instance_, |
587 PP_DECRYPTORSTREAMTYPE_VIDEO, | 586 PP_DECRYPTORSTREAMTYPE_VIDEO, |
588 pp_resource, | 587 pp_resource, |
589 &block_info); | 588 &block_info); |
590 return true; | 589 return true; |
591 } | 590 } |
592 | 591 |
593 void ContentDecryptorDelegate::OnSessionCreated(uint32 reference_id, | 592 void ContentDecryptorDelegate::OnSessionCreated(uint32 session_id, |
594 PP_Var session_id_var) { | 593 PP_Var web_session_id_var) { |
595 if (session_created_cb_.is_null()) | 594 if (session_created_cb_.is_null()) |
596 return; | 595 return; |
597 | 596 |
598 StringVar* session_id_string = StringVar::FromPPVar(session_id_var); | 597 StringVar* session_id_string = StringVar::FromPPVar(web_session_id_var); |
599 | 598 |
600 if (!session_id_string) { | 599 if (!session_id_string) { |
601 OnSessionError(reference_id, media::MediaKeys::kUnknownError, 0); | 600 OnSessionError(session_id, media::MediaKeys::kUnknownError, 0); |
602 return; | 601 return; |
603 } | 602 } |
604 | 603 |
605 session_created_cb_.Run(reference_id, session_id_string->value()); | 604 session_created_cb_.Run(session_id, session_id_string->value()); |
606 } | 605 } |
607 | 606 |
608 void ContentDecryptorDelegate::OnSessionMessage(uint32 reference_id, | 607 void ContentDecryptorDelegate::OnSessionMessage(uint32 session_id, |
609 PP_Var message_var, | 608 PP_Var message_var, |
610 PP_Var default_url_var) { | 609 PP_Var default_url_var) { |
611 if (session_message_cb_.is_null()) | 610 if (session_message_cb_.is_null()) |
612 return; | 611 return; |
613 | 612 |
614 ArrayBufferVar* message_array_buffer = ArrayBufferVar::FromPPVar(message_var); | 613 ArrayBufferVar* message_array_buffer = ArrayBufferVar::FromPPVar(message_var); |
615 | 614 |
616 std::vector<uint8> message; | 615 std::vector<uint8> message; |
617 if (message_array_buffer) { | 616 if (message_array_buffer) { |
618 const uint8* data = static_cast<const uint8*>(message_array_buffer->Map()); | 617 const uint8* data = static_cast<const uint8*>(message_array_buffer->Map()); |
619 message.assign(data, data + message_array_buffer->ByteLength()); | 618 message.assign(data, data + message_array_buffer->ByteLength()); |
620 } | 619 } |
621 | 620 |
622 StringVar* default_url_string = StringVar::FromPPVar(default_url_var); | 621 StringVar* default_url_string = StringVar::FromPPVar(default_url_var); |
623 | 622 |
624 if (!default_url_string) { | 623 if (!default_url_string) { |
625 OnSessionError(reference_id, media::MediaKeys::kUnknownError, 0); | 624 OnSessionError(session_id, media::MediaKeys::kUnknownError, 0); |
626 return; | 625 return; |
627 } | 626 } |
628 | 627 |
629 session_message_cb_.Run(reference_id, message, default_url_string->value()); | 628 session_message_cb_.Run(session_id, message, default_url_string->value()); |
630 } | 629 } |
631 | 630 |
632 void ContentDecryptorDelegate::OnSessionReady(uint32 reference_id) { | 631 void ContentDecryptorDelegate::OnSessionReady(uint32 session_id) { |
633 if (session_ready_cb_.is_null()) | 632 if (session_ready_cb_.is_null()) |
634 return; | 633 return; |
635 | 634 |
636 session_ready_cb_.Run(reference_id); | 635 session_ready_cb_.Run(session_id); |
637 } | 636 } |
638 | 637 |
639 void ContentDecryptorDelegate::OnSessionClosed(uint32 reference_id) { | 638 void ContentDecryptorDelegate::OnSessionClosed(uint32 session_id) { |
640 if (session_closed_cb_.is_null()) | 639 if (session_closed_cb_.is_null()) |
641 return; | 640 return; |
642 | 641 |
643 session_closed_cb_.Run(reference_id); | 642 session_closed_cb_.Run(session_id); |
644 } | 643 } |
645 | 644 |
646 void ContentDecryptorDelegate::OnSessionError(uint32 reference_id, | 645 void ContentDecryptorDelegate::OnSessionError(uint32 session_id, |
647 int32_t media_error, | 646 int32_t media_error, |
648 int32_t system_code) { | 647 int32_t system_code) { |
649 if (session_error_cb_.is_null()) | 648 if (session_error_cb_.is_null()) |
650 return; | 649 return; |
651 | 650 |
652 session_error_cb_.Run(reference_id, | 651 session_error_cb_.Run(session_id, |
653 static_cast<media::MediaKeys::KeyError>(media_error), | 652 static_cast<media::MediaKeys::KeyError>(media_error), |
654 system_code); | 653 system_code); |
655 } | 654 } |
656 | 655 |
657 void ContentDecryptorDelegate::DecoderInitializeDone( | 656 void ContentDecryptorDelegate::DecoderInitializeDone( |
658 PP_DecryptorStreamType decoder_type, | 657 PP_DecryptorStreamType decoder_type, |
659 uint32_t request_id, | 658 uint32_t request_id, |
660 PP_Bool success) { | 659 PP_Bool success) { |
661 if (decoder_type == PP_DECRYPTORSTREAMTYPE_AUDIO) { | 660 if (decoder_type == PP_DECRYPTORSTREAMTYPE_AUDIO) { |
662 // If the request ID is not valid or does not match what's saved, do | 661 // If the request ID is not valid or does not match what's saved, do |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 frames->push_back(frame); | 1068 frames->push_back(frame); |
1070 | 1069 |
1071 cur += frame_size; | 1070 cur += frame_size; |
1072 bytes_left -= frame_size; | 1071 bytes_left -= frame_size; |
1073 } while (bytes_left > 0); | 1072 } while (bytes_left > 0); |
1074 | 1073 |
1075 return true; | 1074 return true; |
1076 } | 1075 } |
1077 | 1076 |
1078 } // namespace content | 1077 } // namespace content |
OLD | NEW |