// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ppapi/proxy/ppp_text_input_proxy.h" #include "build/build_config.h" #include "ppapi/c/dev/ppp_text_input_dev.h" #include "ppapi/proxy/host_dispatcher.h" #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/shared_impl/proxy_lock.h" namespace ppapi { namespace proxy { namespace { #if !defined(OS_NACL) void RequestSurroundingText(PP_Instance instance, uint32_t desired_number_of_characters) { proxy::HostDispatcher* dispatcher = proxy::HostDispatcher::GetForInstance(instance); if (!dispatcher) { // The dispatcher should always be valid. NOTREACHED(); return; } dispatcher->Send(new PpapiMsg_PPPTextInput_RequestSurroundingText( API_ID_PPP_TEXT_INPUT, instance, desired_number_of_characters)); } const PPP_TextInput_Dev g_ppp_text_input_thunk = { &RequestSurroundingText }; #else // The NaCl plugin doesn't need the host side interface - stub it out. static const PPP_TextInput_Dev g_ppp_text_input_thunk = {}; #endif // !defined(OS_NACL) } // namespace // static const PPP_TextInput_Dev* PPP_TextInput_Proxy::GetProxyInterface() { return &g_ppp_text_input_thunk; } PPP_TextInput_Proxy::PPP_TextInput_Proxy(Dispatcher* dispatcher) : InterfaceProxy(dispatcher), ppp_text_input_impl_(NULL) { if (dispatcher->IsPlugin()) { ppp_text_input_impl_ = static_cast( dispatcher->local_get_interface()(PPP_TEXTINPUT_DEV_INTERFACE)); } } PPP_TextInput_Proxy::~PPP_TextInput_Proxy() { } bool PPP_TextInput_Proxy::OnMessageReceived(const IPC::Message& msg) { if (!dispatcher()->IsPlugin()) return false; bool handled = true; IPC_BEGIN_MESSAGE_MAP(PPP_TextInput_Proxy, msg) IPC_MESSAGE_HANDLER(PpapiMsg_PPPTextInput_RequestSurroundingText, OnMsgRequestSurroundingText) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; } void PPP_TextInput_Proxy::OnMsgRequestSurroundingText( PP_Instance instance, uint32_t desired_number_of_characters) { if (ppp_text_input_impl_) { CallWhileUnlocked(ppp_text_input_impl_->RequestSurroundingText, instance, desired_number_of_characters); } } } // namespace proxy } // namespace ppapi