| // 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/cpp/private/find_private.h" |
| |
| #include "ppapi/c/private/ppb_find_private.h" |
| #include "ppapi/cpp/instance.h" |
| #include "ppapi/cpp/module.h" |
| #include "ppapi/cpp/module_impl.h" |
| #include "ppapi/cpp/rect.h" |
| |
| namespace pp { |
| |
| namespace { |
| |
| template <> const char* interface_name<PPB_Find_Private>() { |
| return PPB_FIND_PRIVATE_INTERFACE; |
| } |
| |
| static const char kPPPFindInterface[] = PPP_FIND_PRIVATE_INTERFACE; |
| |
| PP_Bool StartFind(PP_Instance instance, |
| const char* text, |
| PP_Bool case_sensitive) { |
| void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface); |
| if (!object) |
| return PP_FALSE; |
| bool return_value = static_cast<Find_Private*>(object)->StartFind( |
| text, PP_ToBool(case_sensitive)); |
| return PP_FromBool(return_value); |
| } |
| |
| void SelectFindResult(PP_Instance instance, PP_Bool forward) { |
| void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface); |
| if (object) |
| static_cast<Find_Private*>(object)->SelectFindResult(PP_ToBool(forward)); |
| } |
| |
| void StopFind(PP_Instance instance) { |
| void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface); |
| if (object) |
| static_cast<Find_Private*>(object)->StopFind(); |
| } |
| |
| const PPP_Find_Private ppp_find = { |
| &StartFind, |
| &SelectFindResult, |
| &StopFind |
| }; |
| |
| } // namespace |
| |
| Find_Private::Find_Private(Instance* instance) |
| : associated_instance_(instance) { |
| Module::Get()->AddPluginInterface(kPPPFindInterface, &ppp_find); |
| instance->AddPerInstanceObject(kPPPFindInterface, this); |
| } |
| |
| Find_Private::~Find_Private() { |
| Instance::RemovePerInstanceObject(associated_instance_, |
| kPPPFindInterface, this); |
| } |
| |
| void Find_Private::SetPluginToHandleFindRequests() { |
| if (has_interface<PPB_Find_Private>()) { |
| get_interface<PPB_Find_Private>()->SetPluginToHandleFindRequests( |
| associated_instance_.pp_instance()); |
| } |
| } |
| |
| void Find_Private::NumberOfFindResultsChanged(int32_t total, |
| bool final_result) { |
| if (has_interface<PPB_Find_Private>()) { |
| get_interface<PPB_Find_Private>()->NumberOfFindResultsChanged( |
| associated_instance_.pp_instance(), total, PP_FromBool(final_result)); |
| } |
| } |
| |
| void Find_Private::SelectedFindResultChanged(int32_t index) { |
| if (has_interface<PPB_Find_Private>()) { |
| get_interface<PPB_Find_Private>()->SelectedFindResultChanged( |
| associated_instance_.pp_instance(), index); |
| } |
| } |
| |
| void Find_Private::SetTickmarks(const std::vector<pp::Rect>& tickmarks) { |
| if (has_interface<PPB_Find_Private>()) { |
| std::vector<PP_Rect> tickmarks_converted(tickmarks.begin(), |
| tickmarks.end()); |
| PP_Rect* array = |
| tickmarks_converted.empty() ? NULL : &tickmarks_converted[0]; |
| get_interface<PPB_Find_Private>()->SetTickmarks( |
| associated_instance_.pp_instance(), array, |
| static_cast<uint32_t>(tickmarks.size())); |
| } |
| } |
| |
| } // namespace pp |