16f56ab789cb470620554d624c37f488285b3b04eDan Albert// Copyright 2014 The Chromium Authors. All rights reserved. 26f56ab789cb470620554d624c37f488285b3b04eDan Albert// Use of this source code is governed by a BSD-style license that can be 36f56ab789cb470620554d624c37f488285b3b04eDan Albert// found in the LICENSE file. 46f56ab789cb470620554d624c37f488285b3b04eDan Albert 56f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "ppapi/cpp/private/find_private.h" 66f56ab789cb470620554d624c37f488285b3b04eDan Albert 76f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "ppapi/c/private/ppb_find_private.h" 86f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "ppapi/cpp/instance.h" 96f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "ppapi/cpp/module.h" 106f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "ppapi/cpp/module_impl.h" 116f56ab789cb470620554d624c37f488285b3b04eDan Albert#include "ppapi/cpp/rect.h" 126f56ab789cb470620554d624c37f488285b3b04eDan Albert 136f56ab789cb470620554d624c37f488285b3b04eDan Albertnamespace pp { 146f56ab789cb470620554d624c37f488285b3b04eDan Albert 156f56ab789cb470620554d624c37f488285b3b04eDan Albertnamespace { 166f56ab789cb470620554d624c37f488285b3b04eDan Albert 176f56ab789cb470620554d624c37f488285b3b04eDan Alberttemplate <> const char* interface_name<PPB_Find_Private>() { 186f56ab789cb470620554d624c37f488285b3b04eDan Albert return PPB_FIND_PRIVATE_INTERFACE; 196f56ab789cb470620554d624c37f488285b3b04eDan Albert} 206f56ab789cb470620554d624c37f488285b3b04eDan Albert 216f56ab789cb470620554d624c37f488285b3b04eDan Albertstatic const char kPPPFindInterface[] = PPP_FIND_PRIVATE_INTERFACE; 226f56ab789cb470620554d624c37f488285b3b04eDan Albert 236f56ab789cb470620554d624c37f488285b3b04eDan AlbertPP_Bool StartFind(PP_Instance instance, 24 const char* text, 25 PP_Bool case_sensitive) { 26 void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface); 27 if (!object) 28 return PP_FALSE; 29 bool return_value = static_cast<Find_Private*>(object)->StartFind( 30 text, PP_ToBool(case_sensitive)); 31 return PP_FromBool(return_value); 32} 33 34void SelectFindResult(PP_Instance instance, PP_Bool forward) { 35 void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface); 36 if (object) 37 static_cast<Find_Private*>(object)->SelectFindResult(PP_ToBool(forward)); 38} 39 40void StopFind(PP_Instance instance) { 41 void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface); 42 if (object) 43 static_cast<Find_Private*>(object)->StopFind(); 44} 45 46const PPP_Find_Private ppp_find = { 47 &StartFind, 48 &SelectFindResult, 49 &StopFind 50}; 51 52} // namespace 53 54Find_Private::Find_Private(Instance* instance) 55 : associated_instance_(instance) { 56 Module::Get()->AddPluginInterface(kPPPFindInterface, &ppp_find); 57 instance->AddPerInstanceObject(kPPPFindInterface, this); 58} 59 60Find_Private::~Find_Private() { 61 Instance::RemovePerInstanceObject(associated_instance_, 62 kPPPFindInterface, this); 63} 64 65void Find_Private::SetPluginToHandleFindRequests() { 66 if (has_interface<PPB_Find_Private>()) { 67 get_interface<PPB_Find_Private>()->SetPluginToHandleFindRequests( 68 associated_instance_.pp_instance()); 69 } 70} 71 72void Find_Private::NumberOfFindResultsChanged(int32_t total, 73 bool final_result) { 74 if (has_interface<PPB_Find_Private>()) { 75 get_interface<PPB_Find_Private>()->NumberOfFindResultsChanged( 76 associated_instance_.pp_instance(), total, PP_FromBool(final_result)); 77 } 78} 79 80void Find_Private::SelectedFindResultChanged(int32_t index) { 81 if (has_interface<PPB_Find_Private>()) { 82 get_interface<PPB_Find_Private>()->SelectedFindResultChanged( 83 associated_instance_.pp_instance(), index); 84 } 85} 86 87void Find_Private::SetTickmarks(const std::vector<pp::Rect>& tickmarks) { 88 if (has_interface<PPB_Find_Private>()) { 89 std::vector<PP_Rect> tickmarks_converted(tickmarks.begin(), 90 tickmarks.end()); 91 PP_Rect* array = 92 tickmarks_converted.empty() ? NULL : &tickmarks_converted[0]; 93 get_interface<PPB_Find_Private>()->SetTickmarks( 94 associated_instance_.pp_instance(), array, 95 static_cast<uint32_t>(tickmarks.size())); 96 } 97} 98 99} // namespace pp 100