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 "ppapi/proxy/ppp_content_decryptor_private_proxy.h" | 5 #include "ppapi/proxy/ppp_content_decryptor_private_proxy.h" |
6 | 6 |
7 #include "base/files/file.h" | 7 #include "base/files/file.h" |
8 #include "ppapi/c/pp_bool.h" | 8 #include "ppapi/c/pp_bool.h" |
9 #include "ppapi/c/ppb_core.h" | 9 #include "ppapi/c/ppb_core.h" |
10 #include "ppapi/proxy/content_decryptor_private_serializer.h" | 10 #include "ppapi/proxy/content_decryptor_private_serializer.h" |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 return; | 117 return; |
118 } | 118 } |
119 | 119 |
120 dispatcher->Send( | 120 dispatcher->Send( |
121 new PpapiMsg_PPPContentDecryptor_Initialize( | 121 new PpapiMsg_PPPContentDecryptor_Initialize( |
122 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, | 122 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, |
123 instance, | 123 instance, |
124 SerializedVarSendInput(dispatcher, key_system))); | 124 SerializedVarSendInput(dispatcher, key_system))); |
125 } | 125 } |
126 | 126 |
| 127 void SetServerCertificate(PP_Instance instance, |
| 128 uint32_t promise_id, |
| 129 PP_Var server_certificate) { |
| 130 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); |
| 131 if (!dispatcher) { |
| 132 NOTREACHED(); |
| 133 return; |
| 134 } |
| 135 |
| 136 dispatcher->Send(new PpapiMsg_PPPContentDecryptor_SetServerCertificate( |
| 137 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, |
| 138 instance, |
| 139 promise_id, |
| 140 SerializedVarSendInput(dispatcher, server_certificate))); |
| 141 } |
| 142 |
127 void CreateSession(PP_Instance instance, | 143 void CreateSession(PP_Instance instance, |
128 uint32_t promise_id, | 144 uint32_t promise_id, |
129 PP_Var init_data_type, | 145 PP_Var init_data_type, |
130 PP_Var init_data, | 146 PP_Var init_data, |
131 PP_SessionType session_type) { | 147 PP_SessionType session_type) { |
132 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); | 148 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); |
133 if (!dispatcher) { | 149 if (!dispatcher) { |
134 NOTREACHED(); | 150 NOTREACHED(); |
135 return; | 151 return; |
136 } | 152 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 } | 187 } |
172 | 188 |
173 dispatcher->Send(new PpapiMsg_PPPContentDecryptor_UpdateSession( | 189 dispatcher->Send(new PpapiMsg_PPPContentDecryptor_UpdateSession( |
174 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, | 190 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, |
175 instance, | 191 instance, |
176 promise_id, | 192 promise_id, |
177 SerializedVarSendInput(dispatcher, web_session_id), | 193 SerializedVarSendInput(dispatcher, web_session_id), |
178 SerializedVarSendInput(dispatcher, response))); | 194 SerializedVarSendInput(dispatcher, response))); |
179 } | 195 } |
180 | 196 |
181 void ReleaseSession(PP_Instance instance, | 197 void CloseSession(PP_Instance instance, |
182 uint32_t promise_id, | 198 uint32_t promise_id, |
183 PP_Var web_session_id) { | 199 PP_Var web_session_id) { |
184 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); | 200 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); |
185 if (!dispatcher) { | 201 if (!dispatcher) { |
186 NOTREACHED(); | 202 NOTREACHED(); |
187 return; | 203 return; |
188 } | 204 } |
189 | 205 |
190 dispatcher->Send(new PpapiMsg_PPPContentDecryptor_ReleaseSession( | 206 dispatcher->Send(new PpapiMsg_PPPContentDecryptor_CloseSession( |
191 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, | 207 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, |
192 instance, | 208 instance, |
193 promise_id, | 209 promise_id, |
| 210 SerializedVarSendInput(dispatcher, web_session_id))); |
| 211 } |
| 212 |
| 213 void RemoveSession(PP_Instance instance, |
| 214 uint32_t promise_id, |
| 215 PP_Var web_session_id) { |
| 216 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); |
| 217 if (!dispatcher) { |
| 218 NOTREACHED(); |
| 219 return; |
| 220 } |
| 221 |
| 222 dispatcher->Send(new PpapiMsg_PPPContentDecryptor_RemoveSession( |
| 223 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, |
| 224 instance, |
| 225 promise_id, |
| 226 SerializedVarSendInput(dispatcher, web_session_id))); |
| 227 } |
| 228 |
| 229 void GetUsableKeyIds(PP_Instance instance, |
| 230 uint32_t promise_id, |
| 231 PP_Var web_session_id) { |
| 232 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); |
| 233 if (!dispatcher) { |
| 234 NOTREACHED(); |
| 235 return; |
| 236 } |
| 237 |
| 238 dispatcher->Send(new PpapiMsg_PPPContentDecryptor_GetUsableKeyIds( |
| 239 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, |
| 240 instance, |
| 241 promise_id, |
194 SerializedVarSendInput(dispatcher, web_session_id))); | 242 SerializedVarSendInput(dispatcher, web_session_id))); |
195 } | 243 } |
196 | 244 |
197 void Decrypt(PP_Instance instance, | 245 void Decrypt(PP_Instance instance, |
198 PP_Resource encrypted_block, | 246 PP_Resource encrypted_block, |
199 const PP_EncryptedBlockInfo* encrypted_block_info) { | 247 const PP_EncryptedBlockInfo* encrypted_block_info) { |
200 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); | 248 HostDispatcher* dispatcher = HostDispatcher::GetForInstance(instance); |
201 if (!dispatcher) { | 249 if (!dispatcher) { |
202 NOTREACHED(); | 250 NOTREACHED(); |
203 return; | 251 return; |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 dispatcher->Send( | 423 dispatcher->Send( |
376 new PpapiMsg_PPPContentDecryptor_DecryptAndDecode( | 424 new PpapiMsg_PPPContentDecryptor_DecryptAndDecode( |
377 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, | 425 API_ID_PPP_CONTENT_DECRYPTOR_PRIVATE, |
378 instance, | 426 instance, |
379 decoder_type, | 427 decoder_type, |
380 buffer, | 428 buffer, |
381 serialized_block_info)); | 429 serialized_block_info)); |
382 } | 430 } |
383 | 431 |
384 static const PPP_ContentDecryptor_Private content_decryptor_interface = { | 432 static const PPP_ContentDecryptor_Private content_decryptor_interface = { |
385 &Initialize, | 433 &Initialize, |
386 &CreateSession, | 434 &SetServerCertificate, |
387 &LoadSession, | 435 &CreateSession, |
388 &UpdateSession, | 436 &LoadSession, |
389 &ReleaseSession, | 437 &UpdateSession, |
390 &Decrypt, | 438 &CloseSession, |
391 &InitializeAudioDecoder, | 439 &RemoveSession, |
392 &InitializeVideoDecoder, | 440 &GetUsableKeyIds, |
393 &DeinitializeDecoder, | 441 &Decrypt, |
394 &ResetDecoder, | 442 &InitializeAudioDecoder, |
395 &DecryptAndDecode | 443 &InitializeVideoDecoder, |
396 }; | 444 &DeinitializeDecoder, |
| 445 &ResetDecoder, |
| 446 &DecryptAndDecode}; |
397 | 447 |
398 } // namespace | 448 } // namespace |
399 | 449 |
400 PPP_ContentDecryptor_Private_Proxy::PPP_ContentDecryptor_Private_Proxy( | 450 PPP_ContentDecryptor_Private_Proxy::PPP_ContentDecryptor_Private_Proxy( |
401 Dispatcher* dispatcher) | 451 Dispatcher* dispatcher) |
402 : InterfaceProxy(dispatcher), | 452 : InterfaceProxy(dispatcher), |
403 ppp_decryptor_impl_(NULL) { | 453 ppp_decryptor_impl_(NULL) { |
404 if (dispatcher->IsPlugin()) { | 454 if (dispatcher->IsPlugin()) { |
405 ppp_decryptor_impl_ = static_cast<const PPP_ContentDecryptor_Private*>( | 455 ppp_decryptor_impl_ = static_cast<const PPP_ContentDecryptor_Private*>( |
406 dispatcher->local_get_interface()( | 456 dispatcher->local_get_interface()( |
(...skipping 13 matching lines...) Expand all Loading... |
420 bool PPP_ContentDecryptor_Private_Proxy::OnMessageReceived( | 470 bool PPP_ContentDecryptor_Private_Proxy::OnMessageReceived( |
421 const IPC::Message& msg) { | 471 const IPC::Message& msg) { |
422 if (!dispatcher()->IsPlugin()) | 472 if (!dispatcher()->IsPlugin()) |
423 return false; // These are only valid from host->plugin. | 473 return false; // These are only valid from host->plugin. |
424 // Don't allow the plugin to send these to the host. | 474 // Don't allow the plugin to send these to the host. |
425 | 475 |
426 bool handled = true; | 476 bool handled = true; |
427 IPC_BEGIN_MESSAGE_MAP(PPP_ContentDecryptor_Private_Proxy, msg) | 477 IPC_BEGIN_MESSAGE_MAP(PPP_ContentDecryptor_Private_Proxy, msg) |
428 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_Initialize, | 478 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_Initialize, |
429 OnMsgInitialize) | 479 OnMsgInitialize) |
| 480 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_SetServerCertificate, |
| 481 OnMsgSetServerCertificate) |
430 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_CreateSession, | 482 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_CreateSession, |
431 OnMsgCreateSession) | 483 OnMsgCreateSession) |
432 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_LoadSession, | 484 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_LoadSession, |
433 OnMsgLoadSession) | 485 OnMsgLoadSession) |
434 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_UpdateSession, | 486 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_UpdateSession, |
435 OnMsgUpdateSession) | 487 OnMsgUpdateSession) |
436 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_ReleaseSession, | 488 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_CloseSession, |
437 OnMsgReleaseSession) | 489 OnMsgCloseSession) |
| 490 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_RemoveSession, |
| 491 OnMsgRemoveSession) |
| 492 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_GetUsableKeyIds, |
| 493 OnMsgGetUsableKeyIds) |
438 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_Decrypt, | 494 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_Decrypt, |
439 OnMsgDecrypt) | 495 OnMsgDecrypt) |
440 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_InitializeAudioDecoder, | 496 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_InitializeAudioDecoder, |
441 OnMsgInitializeAudioDecoder) | 497 OnMsgInitializeAudioDecoder) |
442 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_InitializeVideoDecoder, | 498 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_InitializeVideoDecoder, |
443 OnMsgInitializeVideoDecoder) | 499 OnMsgInitializeVideoDecoder) |
444 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_DeinitializeDecoder, | 500 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_DeinitializeDecoder, |
445 OnMsgDeinitializeDecoder) | 501 OnMsgDeinitializeDecoder) |
446 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_ResetDecoder, | 502 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_ResetDecoder, |
447 OnMsgResetDecoder) | 503 OnMsgResetDecoder) |
448 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_DecryptAndDecode, | 504 IPC_MESSAGE_HANDLER(PpapiMsg_PPPContentDecryptor_DecryptAndDecode, |
449 OnMsgDecryptAndDecode) | 505 OnMsgDecryptAndDecode) |
450 IPC_MESSAGE_UNHANDLED(handled = false) | 506 IPC_MESSAGE_UNHANDLED(handled = false) |
451 IPC_END_MESSAGE_MAP() | 507 IPC_END_MESSAGE_MAP() |
452 DCHECK(handled); | 508 DCHECK(handled); |
453 return handled; | 509 return handled; |
454 } | 510 } |
455 | 511 |
456 void PPP_ContentDecryptor_Private_Proxy::OnMsgInitialize( | 512 void PPP_ContentDecryptor_Private_Proxy::OnMsgInitialize( |
457 PP_Instance instance, | 513 PP_Instance instance, |
458 SerializedVarReceiveInput key_system) { | 514 SerializedVarReceiveInput key_system) { |
459 if (ppp_decryptor_impl_) { | 515 if (ppp_decryptor_impl_) { |
460 CallWhileUnlocked( | 516 CallWhileUnlocked( |
461 ppp_decryptor_impl_->Initialize, | 517 ppp_decryptor_impl_->Initialize, |
462 instance, | 518 instance, |
463 ExtractReceivedVarAndAddRef(dispatcher(), &key_system)); | 519 ExtractReceivedVarAndAddRef(dispatcher(), &key_system)); |
464 } | 520 } |
465 } | 521 } |
466 | 522 |
| 523 void PPP_ContentDecryptor_Private_Proxy::OnMsgSetServerCertificate( |
| 524 PP_Instance instance, |
| 525 uint32_t promise_id, |
| 526 SerializedVarReceiveInput server_certificate) { |
| 527 if (ppp_decryptor_impl_) { |
| 528 CallWhileUnlocked( |
| 529 ppp_decryptor_impl_->SetServerCertificate, |
| 530 instance, |
| 531 promise_id, |
| 532 ExtractReceivedVarAndAddRef(dispatcher(), &server_certificate)); |
| 533 } |
| 534 } |
| 535 |
467 void PPP_ContentDecryptor_Private_Proxy::OnMsgCreateSession( | 536 void PPP_ContentDecryptor_Private_Proxy::OnMsgCreateSession( |
468 PP_Instance instance, | 537 PP_Instance instance, |
469 uint32_t promise_id, | 538 uint32_t promise_id, |
470 SerializedVarReceiveInput init_data_type, | 539 SerializedVarReceiveInput init_data_type, |
471 SerializedVarReceiveInput init_data, | 540 SerializedVarReceiveInput init_data, |
472 PP_SessionType session_type) { | 541 PP_SessionType session_type) { |
473 if (ppp_decryptor_impl_) { | 542 if (ppp_decryptor_impl_) { |
474 CallWhileUnlocked( | 543 CallWhileUnlocked( |
475 ppp_decryptor_impl_->CreateSession, | 544 ppp_decryptor_impl_->CreateSession, |
476 instance, | 545 instance, |
(...skipping 25 matching lines...) Expand all Loading... |
502 if (ppp_decryptor_impl_) { | 571 if (ppp_decryptor_impl_) { |
503 CallWhileUnlocked( | 572 CallWhileUnlocked( |
504 ppp_decryptor_impl_->UpdateSession, | 573 ppp_decryptor_impl_->UpdateSession, |
505 instance, | 574 instance, |
506 promise_id, | 575 promise_id, |
507 ExtractReceivedVarAndAddRef(dispatcher(), &web_session_id), | 576 ExtractReceivedVarAndAddRef(dispatcher(), &web_session_id), |
508 ExtractReceivedVarAndAddRef(dispatcher(), &response)); | 577 ExtractReceivedVarAndAddRef(dispatcher(), &response)); |
509 } | 578 } |
510 } | 579 } |
511 | 580 |
512 void PPP_ContentDecryptor_Private_Proxy::OnMsgReleaseSession( | 581 void PPP_ContentDecryptor_Private_Proxy::OnMsgCloseSession( |
513 PP_Instance instance, | 582 PP_Instance instance, |
514 uint32_t promise_id, | 583 uint32_t promise_id, |
515 SerializedVarReceiveInput web_session_id) { | 584 SerializedVarReceiveInput web_session_id) { |
516 if (ppp_decryptor_impl_) { | 585 if (ppp_decryptor_impl_) { |
517 CallWhileUnlocked( | 586 CallWhileUnlocked( |
518 ppp_decryptor_impl_->ReleaseSession, | 587 ppp_decryptor_impl_->CloseSession, |
519 instance, | 588 instance, |
520 promise_id, | 589 promise_id, |
521 ExtractReceivedVarAndAddRef(dispatcher(), &web_session_id)); | 590 ExtractReceivedVarAndAddRef(dispatcher(), &web_session_id)); |
| 591 } |
| 592 } |
| 593 |
| 594 void PPP_ContentDecryptor_Private_Proxy::OnMsgRemoveSession( |
| 595 PP_Instance instance, |
| 596 uint32_t promise_id, |
| 597 SerializedVarReceiveInput web_session_id) { |
| 598 if (ppp_decryptor_impl_) { |
| 599 CallWhileUnlocked( |
| 600 ppp_decryptor_impl_->RemoveSession, |
| 601 instance, |
| 602 promise_id, |
| 603 ExtractReceivedVarAndAddRef(dispatcher(), &web_session_id)); |
| 604 } |
| 605 } |
| 606 |
| 607 void PPP_ContentDecryptor_Private_Proxy::OnMsgGetUsableKeyIds( |
| 608 PP_Instance instance, |
| 609 uint32_t promise_id, |
| 610 SerializedVarReceiveInput web_session_id) { |
| 611 if (ppp_decryptor_impl_) { |
| 612 CallWhileUnlocked( |
| 613 ppp_decryptor_impl_->GetUsableKeyIds, |
| 614 instance, |
| 615 promise_id, |
| 616 ExtractReceivedVarAndAddRef(dispatcher(), &web_session_id)); |
522 } | 617 } |
523 } | 618 } |
524 | 619 |
525 void PPP_ContentDecryptor_Private_Proxy::OnMsgDecrypt( | 620 void PPP_ContentDecryptor_Private_Proxy::OnMsgDecrypt( |
526 PP_Instance instance, | 621 PP_Instance instance, |
527 const PPPDecryptor_Buffer& encrypted_buffer, | 622 const PPPDecryptor_Buffer& encrypted_buffer, |
528 const std::string& serialized_block_info) { | 623 const std::string& serialized_block_info) { |
529 ScopedPPResource plugin_resource( | 624 ScopedPPResource plugin_resource( |
530 ScopedPPResource::PassRef(), | 625 ScopedPPResource::PassRef(), |
531 PPB_Buffer_Proxy::AddProxyResource(encrypted_buffer.resource, | 626 PPB_Buffer_Proxy::AddProxyResource(encrypted_buffer.resource, |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 ppp_decryptor_impl_->DecryptAndDecode, | 737 ppp_decryptor_impl_->DecryptAndDecode, |
643 instance, | 738 instance, |
644 decoder_type, | 739 decoder_type, |
645 plugin_resource.get(), | 740 plugin_resource.get(), |
646 const_cast<const PP_EncryptedBlockInfo*>(&block_info)); | 741 const_cast<const PP_EncryptedBlockInfo*>(&block_info)); |
647 } | 742 } |
648 } | 743 } |
649 | 744 |
650 } // namespace proxy | 745 } // namespace proxy |
651 } // namespace ppapi | 746 } // namespace ppapi |
OLD | NEW |