| 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/ppb_instance_proxy.h" | 5 #include "ppapi/proxy/ppb_instance_proxy.h" |
| 6 | 6 |
| 7 #include "ppapi/c/pp_errors.h" | 7 #include "ppapi/c/pp_errors.h" |
| 8 #include "ppapi/c/pp_time.h" | 8 #include "ppapi/c/pp_time.h" |
| 9 #include "ppapi/c/pp_var.h" | 9 #include "ppapi/c/pp_var.h" |
| 10 #include "ppapi/c/ppb_audio_config.h" | 10 #include "ppapi/c/ppb_audio_config.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "ppapi/shared_impl/ppb_view_shared.h" | 23 #include "ppapi/shared_impl/ppb_view_shared.h" |
| 24 #include "ppapi/shared_impl/var.h" | 24 #include "ppapi/shared_impl/var.h" |
| 25 #include "ppapi/thunk/enter.h" | 25 #include "ppapi/thunk/enter.h" |
| 26 #include "ppapi/thunk/thunk.h" | 26 #include "ppapi/thunk/thunk.h" |
| 27 | 27 |
| 28 // Windows headers interfere with this file. | 28 // Windows headers interfere with this file. |
| 29 #ifdef PostMessage | 29 #ifdef PostMessage |
| 30 #undef PostMessage | 30 #undef PostMessage |
| 31 #endif | 31 #endif |
| 32 | 32 |
| 33 using ppapi::thunk::EnterFunctionNoLock; | 33 using ppapi::thunk::EnterInstanceNoLock; |
| 34 using ppapi::thunk::EnterResourceNoLock; | 34 using ppapi::thunk::EnterResourceNoLock; |
| 35 using ppapi::thunk::PPB_Instance_FunctionAPI; | 35 using ppapi::thunk::PPB_Instance_FunctionAPI; |
| 36 | 36 |
| 37 namespace ppapi { | 37 namespace ppapi { |
| 38 namespace proxy { | 38 namespace proxy { |
| 39 | 39 |
| 40 namespace { | 40 namespace { |
| 41 | 41 |
| 42 typedef EnterFunctionNoLock<PPB_Instance_FunctionAPI> EnterInstanceNoLock; | |
| 43 | |
| 44 InterfaceProxy* CreateInstanceProxy(Dispatcher* dispatcher) { | 42 InterfaceProxy* CreateInstanceProxy(Dispatcher* dispatcher) { |
| 45 return new PPB_Instance_Proxy(dispatcher); | 43 return new PPB_Instance_Proxy(dispatcher); |
| 46 } | 44 } |
| 47 | 45 |
| 46 void RequestSurroundingText(PP_Instance instance) { |
| 47 PluginDispatcher* dispatcher = PluginDispatcher::GetForInstance(instance); |
| 48 if (!dispatcher) |
| 49 return; // Instance has gone away while message was pending. |
| 50 |
| 51 // Just fake out a RequestSurroundingText message to the proxy for the PPP |
| 52 // interface. |
| 53 InterfaceProxy* proxy = dispatcher->GetInterfaceProxy(API_ID_PPB_TEXT_INPUT); |
| 54 if (!proxy) |
| 55 return; |
| 56 proxy->OnMessageReceived(PpapiMsg_PPPTextInput_RequestSurroundingText( |
| 57 API_ID_PPP_TEXT_INPUT, instance, |
| 58 PPB_Instance_Shared::kExtraCharsForTextInput)); |
| 59 } |
| 60 |
| 48 } // namespace | 61 } // namespace |
| 49 | 62 |
| 50 PPB_Instance_Proxy::PPB_Instance_Proxy(Dispatcher* dispatcher) | 63 PPB_Instance_Proxy::PPB_Instance_Proxy(Dispatcher* dispatcher) |
| 51 : InterfaceProxy(dispatcher), | 64 : InterfaceProxy(dispatcher), |
| 52 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 65 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| 53 } | 66 } |
| 54 | 67 |
| 55 PPB_Instance_Proxy::~PPB_Instance_Proxy() { | 68 PPB_Instance_Proxy::~PPB_Instance_Proxy() { |
| 56 } | 69 } |
| 57 | 70 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_ClearInputEvents, | 119 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_ClearInputEvents, |
| 107 OnHostMsgClearInputEvents) | 120 OnHostMsgClearInputEvents) |
| 108 IPC_MESSAGE_HANDLER(PpapiMsg_PPPInputEvent_HandleInputEvent_ACK, | 121 IPC_MESSAGE_HANDLER(PpapiMsg_PPPInputEvent_HandleInputEvent_ACK, |
| 109 OnMsgHandleInputEventAck) | 122 OnMsgHandleInputEventAck) |
| 110 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_LockMouse, | 123 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_LockMouse, |
| 111 OnHostMsgLockMouse) | 124 OnHostMsgLockMouse) |
| 112 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_UnlockMouse, | 125 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_UnlockMouse, |
| 113 OnHostMsgUnlockMouse) | 126 OnHostMsgUnlockMouse) |
| 114 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SetCursor, | 127 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SetCursor, |
| 115 OnHostMsgSetCursor) | 128 OnHostMsgSetCursor) |
| 129 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SetTextInputType, |
| 130 OnHostMsgSetTextInputType) |
| 131 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_UpdateCaretPosition, |
| 132 OnHostMsgUpdateCaretPosition) |
| 133 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_CancelCompositionText, |
| 134 OnHostMsgCancelCompositionText) |
| 135 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_UpdateSurroundingText, |
| 136 OnHostMsgUpdateSurroundingText) |
| 116 #if !defined(OS_NACL) | 137 #if !defined(OS_NACL) |
| 117 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_ResolveRelativeToDocument, | 138 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_ResolveRelativeToDocument, |
| 118 OnHostMsgResolveRelativeToDocument) | 139 OnHostMsgResolveRelativeToDocument) |
| 119 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DocumentCanRequest, | 140 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DocumentCanRequest, |
| 120 OnHostMsgDocumentCanRequest) | 141 OnHostMsgDocumentCanRequest) |
| 121 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DocumentCanAccessDocument, | 142 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DocumentCanAccessDocument, |
| 122 OnHostMsgDocumentCanAccessDocument) | 143 OnHostMsgDocumentCanAccessDocument) |
| 123 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetDocumentURL, | 144 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetDocumentURL, |
| 124 OnHostMsgGetDocumentURL) | 145 OnHostMsgGetDocumentURL) |
| 125 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetPluginInstanceURL, | 146 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetPluginInstanceURL, |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 dispatcher()->Send(new PpapiHostMsg_PPBInstance_LockMouse( | 451 dispatcher()->Send(new PpapiHostMsg_PPBInstance_LockMouse( |
| 431 API_ID_PPB_INSTANCE, instance)); | 452 API_ID_PPB_INSTANCE, instance)); |
| 432 return PP_OK_COMPLETIONPENDING; | 453 return PP_OK_COMPLETIONPENDING; |
| 433 } | 454 } |
| 434 | 455 |
| 435 void PPB_Instance_Proxy::UnlockMouse(PP_Instance instance) { | 456 void PPB_Instance_Proxy::UnlockMouse(PP_Instance instance) { |
| 436 dispatcher()->Send(new PpapiHostMsg_PPBInstance_UnlockMouse( | 457 dispatcher()->Send(new PpapiHostMsg_PPBInstance_UnlockMouse( |
| 437 API_ID_PPB_INSTANCE, instance)); | 458 API_ID_PPB_INSTANCE, instance)); |
| 438 } | 459 } |
| 439 | 460 |
| 461 void PPB_Instance_Proxy::SetTextInputType(PP_Instance instance, |
| 462 PP_TextInput_Type type) { |
| 463 dispatcher()->Send(new PpapiHostMsg_PPBInstance_SetTextInputType( |
| 464 API_ID_PPB_INSTANCE, instance, type)); |
| 465 } |
| 466 |
| 467 void PPB_Instance_Proxy::UpdateCaretPosition(PP_Instance instance, |
| 468 const PP_Rect& caret, |
| 469 const PP_Rect& bounding_box) { |
| 470 dispatcher()->Send(new PpapiHostMsg_PPBInstance_UpdateCaretPosition( |
| 471 API_ID_PPB_INSTANCE, instance, caret, bounding_box)); |
| 472 } |
| 473 |
| 474 void PPB_Instance_Proxy::CancelCompositionText(PP_Instance instance) { |
| 475 dispatcher()->Send(new PpapiHostMsg_PPBInstance_CancelCompositionText( |
| 476 API_ID_PPB_INSTANCE, instance)); |
| 477 } |
| 478 |
| 479 void PPB_Instance_Proxy::SelectionChanged(PP_Instance instance) { |
| 480 // The "right" way to do this is to send the message to the host. However, |
| 481 // all it will do it call RequestSurroundingText with a hardcoded number of |
| 482 // characters in response, which is an entire IPC round-trip. |
| 483 // |
| 484 // We can avoid this round-trip by just implementing the |
| 485 // RequestSurroundingText logic in the plugin process. If the logic in the |
| 486 // host becomes more complex (like a more adaptive number of characters), |
| 487 // we'll need to reevanuate whether we want to do the round trip instead. |
| 488 // |
| 489 // Be careful to post a task to avoid reentering the plugin. |
| 490 MessageLoop::current()->PostTask( |
| 491 FROM_HERE, |
| 492 base::Bind(&RequestSurroundingText, instance)); |
| 493 } |
| 494 |
| 495 void PPB_Instance_Proxy::UpdateSurroundingText(PP_Instance instance, |
| 496 const char* text, |
| 497 uint32_t caret, |
| 498 uint32_t anchor) { |
| 499 dispatcher()->Send(new PpapiHostMsg_PPBInstance_UpdateSurroundingText( |
| 500 API_ID_PPB_INSTANCE, instance, text, caret, anchor)); |
| 501 } |
| 502 |
| 440 void PPB_Instance_Proxy::OnHostMsgGetWindowObject( | 503 void PPB_Instance_Proxy::OnHostMsgGetWindowObject( |
| 441 PP_Instance instance, | 504 PP_Instance instance, |
| 442 SerializedVarReturnValue result) { | 505 SerializedVarReturnValue result) { |
| 443 EnterInstanceNoLock enter(instance, false); | 506 EnterInstanceNoLock enter(instance); |
| 444 if (enter.succeeded()) | 507 if (enter.succeeded()) |
| 445 result.Return(dispatcher(), enter.functions()->GetWindowObject(instance)); | 508 result.Return(dispatcher(), enter.functions()->GetWindowObject(instance)); |
| 446 } | 509 } |
| 447 | 510 |
| 448 void PPB_Instance_Proxy::OnHostMsgGetOwnerElementObject( | 511 void PPB_Instance_Proxy::OnHostMsgGetOwnerElementObject( |
| 449 PP_Instance instance, | 512 PP_Instance instance, |
| 450 SerializedVarReturnValue result) { | 513 SerializedVarReturnValue result) { |
| 451 EnterInstanceNoLock enter(instance, false); | 514 EnterInstanceNoLock enter(instance); |
| 452 if (enter.succeeded()) { | 515 if (enter.succeeded()) { |
| 453 result.Return(dispatcher(), | 516 result.Return(dispatcher(), |
| 454 enter.functions()->GetOwnerElementObject(instance)); | 517 enter.functions()->GetOwnerElementObject(instance)); |
| 455 } | 518 } |
| 456 } | 519 } |
| 457 | 520 |
| 458 void PPB_Instance_Proxy::OnHostMsgBindGraphics(PP_Instance instance, | 521 void PPB_Instance_Proxy::OnHostMsgBindGraphics(PP_Instance instance, |
| 459 const HostResource& device, | 522 const HostResource& device, |
| 460 PP_Bool* result) { | 523 PP_Bool* result) { |
| 461 EnterInstanceNoLock enter(instance, false); | 524 EnterInstanceNoLock enter(instance); |
| 462 if (enter.succeeded()) { | 525 if (enter.succeeded()) { |
| 463 *result = enter.functions()->BindGraphics(instance, | 526 *result = enter.functions()->BindGraphics(instance, |
| 464 device.host_resource()); | 527 device.host_resource()); |
| 465 } | 528 } |
| 466 } | 529 } |
| 467 | 530 |
| 468 void PPB_Instance_Proxy::OnHostMsgGetAudioHardwareOutputSampleRate( | 531 void PPB_Instance_Proxy::OnHostMsgGetAudioHardwareOutputSampleRate( |
| 469 PP_Instance instance, uint32_t* result) { | 532 PP_Instance instance, uint32_t* result) { |
| 470 EnterInstanceNoLock enter(instance, false); | 533 EnterInstanceNoLock enter(instance); |
| 471 if (enter.succeeded()) | 534 if (enter.succeeded()) |
| 472 *result = enter.functions()->GetAudioHardwareOutputSampleRate(instance); | 535 *result = enter.functions()->GetAudioHardwareOutputSampleRate(instance); |
| 473 } | 536 } |
| 474 | 537 |
| 475 void PPB_Instance_Proxy::OnHostMsgGetAudioHardwareOutputBufferSize( | 538 void PPB_Instance_Proxy::OnHostMsgGetAudioHardwareOutputBufferSize( |
| 476 PP_Instance instance, uint32_t* result) { | 539 PP_Instance instance, uint32_t* result) { |
| 477 EnterInstanceNoLock enter(instance, false); | 540 EnterInstanceNoLock enter(instance); |
| 478 if (enter.succeeded()) | 541 if (enter.succeeded()) |
| 479 *result = enter.functions()->GetAudioHardwareOutputBufferSize(instance); | 542 *result = enter.functions()->GetAudioHardwareOutputBufferSize(instance); |
| 480 } | 543 } |
| 481 | 544 |
| 482 void PPB_Instance_Proxy::OnHostMsgIsFullFrame(PP_Instance instance, | 545 void PPB_Instance_Proxy::OnHostMsgIsFullFrame(PP_Instance instance, |
| 483 PP_Bool* result) { | 546 PP_Bool* result) { |
| 484 EnterInstanceNoLock enter(instance, false); | 547 EnterInstanceNoLock enter(instance); |
| 485 if (enter.succeeded()) | 548 if (enter.succeeded()) |
| 486 *result = enter.functions()->IsFullFrame(instance); | 549 *result = enter.functions()->IsFullFrame(instance); |
| 487 } | 550 } |
| 488 | 551 |
| 489 void PPB_Instance_Proxy::OnHostMsgExecuteScript( | 552 void PPB_Instance_Proxy::OnHostMsgExecuteScript( |
| 490 PP_Instance instance, | 553 PP_Instance instance, |
| 491 SerializedVarReceiveInput script, | 554 SerializedVarReceiveInput script, |
| 492 SerializedVarOutParam out_exception, | 555 SerializedVarOutParam out_exception, |
| 493 SerializedVarReturnValue result) { | 556 SerializedVarReturnValue result) { |
| 494 EnterInstanceNoLock enter(instance, false); | 557 EnterInstanceNoLock enter(instance); |
| 495 if (enter.failed()) | 558 if (enter.failed()) |
| 496 return; | 559 return; |
| 497 | 560 |
| 498 if (dispatcher()->IsPlugin()) | 561 if (dispatcher()->IsPlugin()) |
| 499 NOTREACHED(); | 562 NOTREACHED(); |
| 500 else | 563 else |
| 501 static_cast<HostDispatcher*>(dispatcher())->set_allow_plugin_reentrancy(); | 564 static_cast<HostDispatcher*>(dispatcher())->set_allow_plugin_reentrancy(); |
| 502 | 565 |
| 503 result.Return(dispatcher(), enter.functions()->ExecuteScript( | 566 result.Return(dispatcher(), enter.functions()->ExecuteScript( |
| 504 instance, | 567 instance, |
| 505 script.Get(dispatcher()), | 568 script.Get(dispatcher()), |
| 506 out_exception.OutParam(dispatcher()))); | 569 out_exception.OutParam(dispatcher()))); |
| 507 } | 570 } |
| 508 | 571 |
| 509 void PPB_Instance_Proxy::OnHostMsgGetDefaultCharSet( | 572 void PPB_Instance_Proxy::OnHostMsgGetDefaultCharSet( |
| 510 PP_Instance instance, | 573 PP_Instance instance, |
| 511 SerializedVarReturnValue result) { | 574 SerializedVarReturnValue result) { |
| 512 EnterInstanceNoLock enter(instance, false); | 575 EnterInstanceNoLock enter(instance); |
| 513 if (enter.succeeded()) | 576 if (enter.succeeded()) |
| 514 result.Return(dispatcher(), enter.functions()->GetDefaultCharSet(instance)); | 577 result.Return(dispatcher(), enter.functions()->GetDefaultCharSet(instance)); |
| 515 } | 578 } |
| 516 | 579 |
| 517 void PPB_Instance_Proxy::OnHostMsgSetFullscreen(PP_Instance instance, | 580 void PPB_Instance_Proxy::OnHostMsgSetFullscreen(PP_Instance instance, |
| 518 PP_Bool fullscreen, | 581 PP_Bool fullscreen, |
| 519 PP_Bool* result) { | 582 PP_Bool* result) { |
| 520 EnterInstanceNoLock enter(instance, false); | 583 EnterInstanceNoLock enter(instance); |
| 521 if (enter.succeeded()) | 584 if (enter.succeeded()) |
| 522 *result = enter.functions()->SetFullscreen(instance, fullscreen); | 585 *result = enter.functions()->SetFullscreen(instance, fullscreen); |
| 523 } | 586 } |
| 524 | 587 |
| 525 | 588 |
| 526 void PPB_Instance_Proxy::OnHostMsgGetScreenSize(PP_Instance instance, | 589 void PPB_Instance_Proxy::OnHostMsgGetScreenSize(PP_Instance instance, |
| 527 PP_Bool* result, | 590 PP_Bool* result, |
| 528 PP_Size* size) { | 591 PP_Size* size) { |
| 529 EnterInstanceNoLock enter(instance, false); | 592 EnterInstanceNoLock enter(instance); |
| 530 if (enter.succeeded()) | 593 if (enter.succeeded()) |
| 531 *result = enter.functions()->GetScreenSize(instance, size); | 594 *result = enter.functions()->GetScreenSize(instance, size); |
| 532 } | 595 } |
| 533 | 596 |
| 534 void PPB_Instance_Proxy::OnHostMsgRequestInputEvents(PP_Instance instance, | 597 void PPB_Instance_Proxy::OnHostMsgRequestInputEvents(PP_Instance instance, |
| 535 bool is_filtering, | 598 bool is_filtering, |
| 536 uint32_t event_classes) { | 599 uint32_t event_classes) { |
| 537 EnterInstanceNoLock enter(instance, false); | 600 EnterInstanceNoLock enter(instance); |
| 538 if (enter.succeeded()) { | 601 if (enter.succeeded()) { |
| 539 if (is_filtering) | 602 if (is_filtering) |
| 540 enter.functions()->RequestFilteringInputEvents(instance, event_classes); | 603 enter.functions()->RequestFilteringInputEvents(instance, event_classes); |
| 541 else | 604 else |
| 542 enter.functions()->RequestInputEvents(instance, event_classes); | 605 enter.functions()->RequestInputEvents(instance, event_classes); |
| 543 } | 606 } |
| 544 } | 607 } |
| 545 | 608 |
| 546 void PPB_Instance_Proxy::OnHostMsgClearInputEvents(PP_Instance instance, | 609 void PPB_Instance_Proxy::OnHostMsgClearInputEvents(PP_Instance instance, |
| 547 uint32_t event_classes) { | 610 uint32_t event_classes) { |
| 548 EnterInstanceNoLock enter(instance, false); | 611 EnterInstanceNoLock enter(instance); |
| 549 if (enter.succeeded()) | 612 if (enter.succeeded()) |
| 550 enter.functions()->ClearInputEventRequest(instance, event_classes); | 613 enter.functions()->ClearInputEventRequest(instance, event_classes); |
| 551 } | 614 } |
| 552 | 615 |
| 553 void PPB_Instance_Proxy::OnMsgHandleInputEventAck(PP_Instance instance, | 616 void PPB_Instance_Proxy::OnMsgHandleInputEventAck(PP_Instance instance, |
| 554 PP_TimeTicks timestamp) { | 617 PP_TimeTicks timestamp) { |
| 555 EnterInstanceNoLock enter(instance, false); | 618 EnterInstanceNoLock enter(instance); |
| 556 if (enter.succeeded()) | 619 if (enter.succeeded()) |
| 557 enter.functions()->ClosePendingUserGesture(instance, timestamp); | 620 enter.functions()->ClosePendingUserGesture(instance, timestamp); |
| 558 } | 621 } |
| 559 | 622 |
| 560 void PPB_Instance_Proxy::OnHostMsgPostMessage( | 623 void PPB_Instance_Proxy::OnHostMsgPostMessage( |
| 561 PP_Instance instance, | 624 PP_Instance instance, |
| 562 SerializedVarReceiveInput message) { | 625 SerializedVarReceiveInput message) { |
| 563 EnterInstanceNoLock enter(instance, false); | 626 EnterInstanceNoLock enter(instance); |
| 564 if (enter.succeeded()) | 627 if (enter.succeeded()) |
| 565 enter.functions()->PostMessage(instance, message.Get(dispatcher())); | 628 enter.functions()->PostMessage(instance, message.Get(dispatcher())); |
| 566 } | 629 } |
| 567 | 630 |
| 568 void PPB_Instance_Proxy::OnHostMsgLockMouse(PP_Instance instance) { | 631 void PPB_Instance_Proxy::OnHostMsgLockMouse(PP_Instance instance) { |
| 569 EnterHostFunctionForceCallback<PPB_Instance_FunctionAPI> enter( | 632 EnterHostFunctionForceCallback<PPB_Instance_FunctionAPI> enter( |
| 570 instance, | 633 instance, |
| 571 callback_factory_.NewCallback( | 634 callback_factory_.NewCallback( |
| 572 &PPB_Instance_Proxy::MouseLockCompleteInHost, | 635 &PPB_Instance_Proxy::MouseLockCompleteInHost, |
| 573 instance)); | 636 instance)); |
| 574 if (enter.succeeded()) | 637 if (enter.succeeded()) |
| 575 enter.SetResult(enter.functions()->LockMouse(instance, enter.callback())); | 638 enter.SetResult(enter.functions()->LockMouse(instance, enter.callback())); |
| 576 } | 639 } |
| 577 | 640 |
| 578 void PPB_Instance_Proxy::OnHostMsgUnlockMouse(PP_Instance instance) { | 641 void PPB_Instance_Proxy::OnHostMsgUnlockMouse(PP_Instance instance) { |
| 579 EnterFunctionNoLock<PPB_Instance_FunctionAPI> enter(instance, true); | 642 EnterInstanceNoLock enter(instance); |
| 580 if (enter.succeeded()) | 643 if (enter.succeeded()) |
| 581 enter.functions()->UnlockMouse(instance); | 644 enter.functions()->UnlockMouse(instance); |
| 582 } | 645 } |
| 583 | 646 |
| 584 #if !defined(OS_NACL) | 647 #if !defined(OS_NACL) |
| 585 void PPB_Instance_Proxy::OnHostMsgResolveRelativeToDocument( | 648 void PPB_Instance_Proxy::OnHostMsgResolveRelativeToDocument( |
| 586 PP_Instance instance, | 649 PP_Instance instance, |
| 587 SerializedVarReceiveInput relative, | 650 SerializedVarReceiveInput relative, |
| 588 SerializedVarReturnValue result) { | 651 SerializedVarReturnValue result) { |
| 589 EnterFunctionNoLock<PPB_Instance_FunctionAPI> enter(instance, true); | 652 EnterInstanceNoLock enter(instance); |
| 590 if (enter.succeeded()) { | 653 if (enter.succeeded()) { |
| 591 result.Return(dispatcher(), | 654 result.Return(dispatcher(), |
| 592 enter.functions()->ResolveRelativeToDocument( | 655 enter.functions()->ResolveRelativeToDocument( |
| 593 instance, relative.Get(dispatcher()), NULL)); | 656 instance, relative.Get(dispatcher()), NULL)); |
| 594 } | 657 } |
| 595 } | 658 } |
| 596 | 659 |
| 597 void PPB_Instance_Proxy::OnHostMsgDocumentCanRequest( | 660 void PPB_Instance_Proxy::OnHostMsgDocumentCanRequest( |
| 598 PP_Instance instance, | 661 PP_Instance instance, |
| 599 SerializedVarReceiveInput url, | 662 SerializedVarReceiveInput url, |
| 600 PP_Bool* result) { | 663 PP_Bool* result) { |
| 601 EnterFunctionNoLock<PPB_Instance_FunctionAPI> enter(instance, true); | 664 EnterInstanceNoLock enter(instance); |
| 602 if (enter.succeeded()) { | 665 if (enter.succeeded()) { |
| 603 *result = enter.functions()->DocumentCanRequest(instance, | 666 *result = enter.functions()->DocumentCanRequest(instance, |
| 604 url.Get(dispatcher())); | 667 url.Get(dispatcher())); |
| 605 } | 668 } |
| 606 } | 669 } |
| 607 | 670 |
| 608 void PPB_Instance_Proxy::OnHostMsgDocumentCanAccessDocument(PP_Instance active, | 671 void PPB_Instance_Proxy::OnHostMsgDocumentCanAccessDocument(PP_Instance active, |
| 609 PP_Instance target, | 672 PP_Instance target, |
| 610 PP_Bool* result) { | 673 PP_Bool* result) { |
| 611 EnterFunctionNoLock<PPB_Instance_FunctionAPI> enter(active, true); | 674 EnterInstanceNoLock enter(active); |
| 612 if (enter.succeeded()) | 675 if (enter.succeeded()) |
| 613 *result = enter.functions()->DocumentCanAccessDocument(active, target); | 676 *result = enter.functions()->DocumentCanAccessDocument(active, target); |
| 614 } | 677 } |
| 615 | 678 |
| 616 void PPB_Instance_Proxy::OnHostMsgGetDocumentURL(PP_Instance instance, | 679 void PPB_Instance_Proxy::OnHostMsgGetDocumentURL(PP_Instance instance, |
| 617 SerializedVarReturnValue result
) { | 680 SerializedVarReturnValue result
) { |
| 618 EnterFunctionNoLock<PPB_Instance_FunctionAPI> enter(instance, true); | 681 EnterInstanceNoLock enter(instance); |
| 619 if (enter.succeeded()) { | 682 if (enter.succeeded()) { |
| 620 result.Return(dispatcher(), | 683 result.Return(dispatcher(), |
| 621 enter.functions()->GetDocumentURL(instance, NULL)); | 684 enter.functions()->GetDocumentURL(instance, NULL)); |
| 622 } | 685 } |
| 623 } | 686 } |
| 624 | 687 |
| 625 void PPB_Instance_Proxy::OnHostMsgGetPluginInstanceURL( | 688 void PPB_Instance_Proxy::OnHostMsgGetPluginInstanceURL( |
| 626 PP_Instance instance, | 689 PP_Instance instance, |
| 627 SerializedVarReturnValue result) { | 690 SerializedVarReturnValue result) { |
| 628 EnterFunctionNoLock<PPB_Instance_FunctionAPI> enter(instance, true); | 691 EnterInstanceNoLock enter(instance); |
| 629 if (enter.succeeded()) { | 692 if (enter.succeeded()) { |
| 630 result.Return(dispatcher(), | 693 result.Return(dispatcher(), |
| 631 enter.functions()->GetPluginInstanceURL(instance, NULL)); | 694 enter.functions()->GetPluginInstanceURL(instance, NULL)); |
| 632 } | 695 } |
| 633 } | 696 } |
| 634 #endif // !defined(OS_NACL) | 697 #endif // !defined(OS_NACL) |
| 635 | 698 |
| 636 void PPB_Instance_Proxy::OnHostMsgSetCursor( | 699 void PPB_Instance_Proxy::OnHostMsgSetCursor( |
| 637 PP_Instance instance, | 700 PP_Instance instance, |
| 638 int32_t type, | 701 int32_t type, |
| 639 const ppapi::HostResource& custom_image, | 702 const ppapi::HostResource& custom_image, |
| 640 const PP_Point& hot_spot) { | 703 const PP_Point& hot_spot) { |
| 641 EnterInstanceNoLock enter(instance, true); | 704 EnterInstanceNoLock enter(instance); |
| 642 if (enter.succeeded()) { | 705 if (enter.succeeded()) { |
| 643 enter.functions()->SetCursor( | 706 enter.functions()->SetCursor( |
| 644 instance, static_cast<PP_MouseCursor_Type>(type), | 707 instance, static_cast<PP_MouseCursor_Type>(type), |
| 645 custom_image.host_resource(), &hot_spot); | 708 custom_image.host_resource(), &hot_spot); |
| 646 } | 709 } |
| 647 } | 710 } |
| 648 | 711 |
| 712 void PPB_Instance_Proxy::OnHostMsgSetTextInputType(PP_Instance instance, |
| 713 PP_TextInput_Type type) { |
| 714 EnterInstanceNoLock enter(instance); |
| 715 if (enter.succeeded()) |
| 716 enter.functions()->SetTextInputType(instance, type); |
| 717 } |
| 718 |
| 719 void PPB_Instance_Proxy::OnHostMsgUpdateCaretPosition( |
| 720 PP_Instance instance, |
| 721 const PP_Rect& caret, |
| 722 const PP_Rect& bounding_box) { |
| 723 EnterInstanceNoLock enter(instance); |
| 724 if (enter.succeeded()) |
| 725 enter.functions()->UpdateCaretPosition(instance, caret, bounding_box); |
| 726 } |
| 727 |
| 728 void PPB_Instance_Proxy::OnHostMsgCancelCompositionText(PP_Instance instance) { |
| 729 EnterInstanceNoLock enter(instance); |
| 730 if (enter.succeeded()) |
| 731 enter.functions()->CancelCompositionText(instance); |
| 732 } |
| 733 |
| 734 void PPB_Instance_Proxy::OnHostMsgUpdateSurroundingText( |
| 735 PP_Instance instance, |
| 736 const std::string& text, |
| 737 uint32_t caret, |
| 738 uint32_t anchor) { |
| 739 EnterInstanceNoLock enter(instance); |
| 740 if (enter.succeeded()) { |
| 741 enter.functions()->UpdateSurroundingText(instance, text.c_str(), caret, |
| 742 anchor); |
| 743 } |
| 744 } |
| 745 |
| 649 void PPB_Instance_Proxy::OnPluginMsgMouseLockComplete(PP_Instance instance, | 746 void PPB_Instance_Proxy::OnPluginMsgMouseLockComplete(PP_Instance instance, |
| 650 int32_t result) { | 747 int32_t result) { |
| 651 // Save the mouse callback on the instance data. | 748 // Save the mouse callback on the instance data. |
| 652 InstanceData* data = static_cast<PluginDispatcher*>(dispatcher())-> | 749 InstanceData* data = static_cast<PluginDispatcher*>(dispatcher())-> |
| 653 GetInstanceData(instance); | 750 GetInstanceData(instance); |
| 654 if (!data) | 751 if (!data) |
| 655 return; // Instance was probably deleted. | 752 return; // Instance was probably deleted. |
| 656 if (!data->mouse_lock_callback.func) { | 753 if (!data->mouse_lock_callback.func) { |
| 657 NOTREACHED(); | 754 NOTREACHED(); |
| 658 return; | 755 return; |
| 659 } | 756 } |
| 660 PP_RunAndClearCompletionCallback(&data->mouse_lock_callback, result); | 757 PP_RunAndClearCompletionCallback(&data->mouse_lock_callback, result); |
| 661 } | 758 } |
| 662 | 759 |
| 663 void PPB_Instance_Proxy::MouseLockCompleteInHost(int32_t result, | 760 void PPB_Instance_Proxy::MouseLockCompleteInHost(int32_t result, |
| 664 PP_Instance instance) { | 761 PP_Instance instance) { |
| 665 dispatcher()->Send(new PpapiMsg_PPBInstance_MouseLockComplete( | 762 dispatcher()->Send(new PpapiMsg_PPBInstance_MouseLockComplete( |
| 666 API_ID_PPB_INSTANCE, instance, result)); | 763 API_ID_PPB_INSTANCE, instance, result)); |
| 667 } | 764 } |
| 668 | 765 |
| 669 } // namespace proxy | 766 } // namespace proxy |
| 670 } // namespace ppapi | 767 } // namespace ppapi |
| OLD | NEW |