diff options
Diffstat (limited to 'chromium/ppapi/cpp/private/find_private.cc')
-rw-r--r-- | chromium/ppapi/cpp/private/find_private.cc | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/chromium/ppapi/cpp/private/find_private.cc b/chromium/ppapi/cpp/private/find_private.cc new file mode 100644 index 00000000000..2765ae02eb1 --- /dev/null +++ b/chromium/ppapi/cpp/private/find_private.cc @@ -0,0 +1,99 @@ +// 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 |