Home | History | Annotate | Download | only in dev
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "ppapi/cpp/dev/find_dev.h"
      6 
      7 #include "ppapi/c/dev/ppb_find_dev.h"
      8 #include "ppapi/cpp/instance.h"
      9 #include "ppapi/cpp/module.h"
     10 #include "ppapi/cpp/module_impl.h"
     11 
     12 namespace pp {
     13 
     14 namespace {
     15 
     16 template <> const char* interface_name<PPB_Find_Dev>() {
     17   return PPB_FIND_DEV_INTERFACE;
     18 }
     19 
     20 static const char kPPPFindInterface[] = PPP_FIND_DEV_INTERFACE;
     21 
     22 PP_Bool StartFind(PP_Instance instance,
     23                   const char* text,
     24                   PP_Bool case_sensitive) {
     25   void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface);
     26   if (!object)
     27     return PP_FALSE;
     28   bool return_value = static_cast<Find_Dev*>(object)->StartFind(
     29       text, PP_ToBool(case_sensitive));
     30   return PP_FromBool(return_value);
     31 }
     32 
     33 void SelectFindResult(PP_Instance instance, PP_Bool forward) {
     34   void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface);
     35   if (object)
     36     static_cast<Find_Dev*>(object)->SelectFindResult(PP_ToBool(forward));
     37 }
     38 
     39 void StopFind(PP_Instance instance) {
     40   void* object = Instance::GetPerInstanceObject(instance, kPPPFindInterface);
     41   if (object)
     42     static_cast<Find_Dev*>(object)->StopFind();
     43 }
     44 
     45 const PPP_Find_Dev ppp_find = {
     46   &StartFind,
     47   &SelectFindResult,
     48   &StopFind
     49 };
     50 
     51 }  // namespace
     52 
     53 Find_Dev::Find_Dev(Instance* instance) : associated_instance_(instance) {
     54   Module::Get()->AddPluginInterface(kPPPFindInterface, &ppp_find);
     55   instance->AddPerInstanceObject(kPPPFindInterface, this);
     56 }
     57 
     58 Find_Dev::~Find_Dev() {
     59   Instance::RemovePerInstanceObject(associated_instance_,
     60                                     kPPPFindInterface, this);
     61 }
     62 
     63 void Find_Dev::NumberOfFindResultsChanged(int32_t total, bool final_result) {
     64   if (has_interface<PPB_Find_Dev>()) {
     65     get_interface<PPB_Find_Dev>()->NumberOfFindResultsChanged(
     66         associated_instance_.pp_instance(), total, PP_FromBool(final_result));
     67   }
     68 }
     69 
     70 void Find_Dev::SelectedFindResultChanged(int32_t index) {
     71   if (has_interface<PPB_Find_Dev>()) {
     72     get_interface<PPB_Find_Dev>()->SelectedFindResultChanged(
     73         associated_instance_.pp_instance(), index);
     74   }
     75 }
     76 
     77 }  // namespace pp
     78