| // Copyright 2014 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_find_proxy.h" |
| |
| #include "build/build_config.h" |
| #include "ppapi/proxy/host_dispatcher.h" |
| #include "ppapi/proxy/ppapi_messages.h" |
| #include "ppapi/shared_impl/api_id.h" |
| #include "ppapi/shared_impl/proxy_lock.h" |
| |
| namespace ppapi { |
| namespace proxy { |
| |
| namespace { |
| |
| #if !defined(OS_NACL) |
| PP_Bool StartFind(PP_Instance instance, |
| const char* text, |
| PP_Bool case_sensitive) { |
| DCHECK(case_sensitive == PP_FALSE); |
| HostDispatcher::GetForInstance(instance)->Send( |
| new PpapiPluginMsg_PPPFind_StartFind(API_ID_PPP_FIND_PRIVATE, |
| instance, |
| text)); |
| return PP_TRUE; |
| } |
| |
| void SelectFindResult(PP_Instance instance, |
| PP_Bool forward) { |
| HostDispatcher::GetForInstance(instance)->Send( |
| new PpapiPluginMsg_PPPFind_SelectFindResult(API_ID_PPP_FIND_PRIVATE, |
| instance, forward)); |
| } |
| |
| void StopFind(PP_Instance instance) { |
| HostDispatcher::GetForInstance(instance)->Send( |
| new PpapiPluginMsg_PPPFind_StopFind(API_ID_PPP_FIND_PRIVATE, instance)); |
| } |
| |
| const PPP_Find_Private ppp_find_interface = { |
| &StartFind, |
| &SelectFindResult, |
| &StopFind |
| }; |
| #else |
| // The NaCl plugin doesn't need the host side interface - stub it out. |
| const PPP_Find_Private ppp_find_interface = {}; |
| #endif |
| |
| } // namespace |
| |
| PPP_Find_Proxy::PPP_Find_Proxy(Dispatcher* dispatcher) |
| : InterfaceProxy(dispatcher), |
| ppp_find_(NULL) { |
| if (dispatcher->IsPlugin()) { |
| ppp_find_ = static_cast<const PPP_Find_Private*>( |
| dispatcher->local_get_interface()(PPP_FIND_PRIVATE_INTERFACE)); |
| } |
| } |
| |
| PPP_Find_Proxy::~PPP_Find_Proxy() { |
| } |
| |
| // static |
| const PPP_Find_Private* PPP_Find_Proxy::GetProxyInterface() { |
| return &ppp_find_interface; |
| } |
| |
| bool PPP_Find_Proxy::OnMessageReceived(const IPC::Message& msg) { |
| if (!dispatcher()->IsPlugin()) |
| return false; |
| |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(PPP_Find_Proxy, msg) |
| IPC_MESSAGE_HANDLER(PpapiPluginMsg_PPPFind_StartFind, OnPluginMsgStartFind) |
| IPC_MESSAGE_HANDLER(PpapiPluginMsg_PPPFind_SelectFindResult, |
| OnPluginMsgSelectFindResult) |
| IPC_MESSAGE_HANDLER(PpapiPluginMsg_PPPFind_StopFind, OnPluginMsgStopFind) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| } |
| |
| void PPP_Find_Proxy::OnPluginMsgStartFind(PP_Instance instance, |
| const std::string& text) { |
| if (ppp_find_) |
| CallWhileUnlocked(ppp_find_->StartFind, instance, text.c_str(), PP_FALSE); |
| } |
| |
| void PPP_Find_Proxy::OnPluginMsgSelectFindResult(PP_Instance instance, |
| PP_Bool forward) { |
| if (ppp_find_) |
| CallWhileUnlocked(ppp_find_->SelectFindResult, instance, forward); |
| } |
| |
| void PPP_Find_Proxy::OnPluginMsgStopFind(PP_Instance instance) { |
| if (ppp_find_) |
| CallWhileUnlocked(ppp_find_->StopFind, instance); |
| } |
| |
| } // namespace proxy |
| } // namespace ppapi |