1// Copyright (c) 2011 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/c/pp_errors.h" 6#include "ppapi/c/pp_input_event.h" 7#include "ppapi/c/ppb_var.h" 8#include "ppapi/c/trusted/ppb_instance_trusted.h" 9#include "ppapi/cpp/completion_callback.h" 10#include "ppapi/cpp/instance.h" 11#include "ppapi/cpp/module.h" 12#include "ppapi/cpp/private/var_private.h" 13 14class MyInstance : public pp::Instance { 15 public: 16 MyInstance(PP_Instance instance) : pp::Instance(instance) { 17 factory_.Initialize(this); 18 } 19 20 virtual ~MyInstance() { 21 } 22 23 virtual bool Init(uint32_t argc, const char* argn[], const char* argv[]) { 24 return true; 25 } 26 27 virtual bool HandleInputEvent(const PP_InputEvent& event) { 28 switch (event.type) { 29 case PP_INPUTEVENT_TYPE_MOUSEDOWN: 30 pp::Module::Get()->core()->CallOnMainThread(100, 31 factory_.NewCallback(&MyInstance::SayHello)); 32 return true; 33 case PP_INPUTEVENT_TYPE_MOUSEMOVE: 34 return true; 35 case PP_INPUTEVENT_TYPE_KEYDOWN: 36 return true; 37 default: 38 return false; 39 } 40 } 41 42 private: 43 void SayHello(int32_t) { 44 pp::Var code("deletePlugin()"); 45 /* 46 When scripting is removed from instance, this is the code that will do the 47 same thing: 48 const PPB_Instance_Trusted* inst = 49 (const PPB_Instance_Trusted*)pp::Module::Get()->GetBrowserInterface( 50 PPB_INSTANCE_TRUSTED_INTERFACE); 51 inst->ExecuteScript(pp_instance(), code.pp_var(), NULL); 52 */ 53 ExecuteScript(code); 54 } 55 56 pp::CompletionCallbackFactory<MyInstance> factory_; 57}; 58 59class MyModule : public pp::Module { 60 public: 61 MyModule() : pp::Module() {} 62 virtual ~MyModule() {} 63 64 virtual pp::Instance* CreateInstance(PP_Instance instance) { 65 return new MyInstance(instance); 66 } 67}; 68 69namespace pp { 70 71// Factory function for your specialization of the Module object. 72Module* CreateModule() { 73 return new MyModule(); 74} 75 76} // namespace pp 77