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 3 // found in the LICENSE file. 4 5 #include "ppapi/proxy/ppp_text_input_proxy.h" 6 7 #include "ppapi/c/dev/ppp_text_input_dev.h" 8 #include "ppapi/proxy/host_dispatcher.h" 9 #include "ppapi/proxy/ppapi_messages.h" 10 #include "ppapi/shared_impl/proxy_lock.h" 11 12 namespace ppapi { 13 namespace proxy { 14 15 namespace { 16 17 #if !defined(OS_NACL) 18 void RequestSurroundingText(PP_Instance instance, 19 uint32_t desired_number_of_characters) { 20 proxy::HostDispatcher* dispatcher = 21 proxy::HostDispatcher::GetForInstance(instance); 22 if (!dispatcher) { 23 // The dispatcher should always be valid. 24 NOTREACHED(); 25 return; 26 } 27 28 dispatcher->Send(new PpapiMsg_PPPTextInput_RequestSurroundingText( 29 API_ID_PPP_TEXT_INPUT, instance, desired_number_of_characters)); 30 } 31 32 const PPP_TextInput_Dev g_ppp_text_input_thunk = { 33 &RequestSurroundingText 34 }; 35 #else 36 // The NaCl plugin doesn't need the host side interface - stub it out. 37 static const PPP_TextInput_Dev g_ppp_text_input_thunk = {}; 38 #endif // !defined(OS_NACL) 39 40 } // namespace 41 42 // static 43 const PPP_TextInput_Dev* PPP_TextInput_Proxy::GetProxyInterface() { 44 return &g_ppp_text_input_thunk; 45 } 46 47 PPP_TextInput_Proxy::PPP_TextInput_Proxy(Dispatcher* dispatcher) 48 : InterfaceProxy(dispatcher), 49 ppp_text_input_impl_(NULL) { 50 if (dispatcher->IsPlugin()) { 51 ppp_text_input_impl_ = static_cast<const PPP_TextInput_Dev*>( 52 dispatcher->local_get_interface()(PPP_TEXTINPUT_DEV_INTERFACE)); 53 } 54 } 55 56 PPP_TextInput_Proxy::~PPP_TextInput_Proxy() { 57 } 58 59 bool PPP_TextInput_Proxy::OnMessageReceived(const IPC::Message& msg) { 60 if (!dispatcher()->IsPlugin()) 61 return false; 62 63 bool handled = true; 64 IPC_BEGIN_MESSAGE_MAP(PPP_TextInput_Proxy, msg) 65 IPC_MESSAGE_HANDLER(PpapiMsg_PPPTextInput_RequestSurroundingText, 66 OnMsgRequestSurroundingText) 67 IPC_MESSAGE_UNHANDLED(handled = false) 68 IPC_END_MESSAGE_MAP() 69 return handled; 70 } 71 72 void PPP_TextInput_Proxy::OnMsgRequestSurroundingText( 73 PP_Instance instance, uint32_t desired_number_of_characters) { 74 if (ppp_text_input_impl_) { 75 CallWhileUnlocked(ppp_text_input_impl_->RequestSurroundingText, 76 instance, desired_number_of_characters); 77 } 78 } 79 80 } // namespace proxy 81 } // namespace ppapi 82