1 // Copyright (c) 2012 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/mouse_lock.h" 6 7 #include "ppapi/c/ppb_mouse_lock.h" 8 #include "ppapi/c/ppp_mouse_lock.h" 9 #include "ppapi/cpp/completion_callback.h" 10 #include "ppapi/cpp/instance.h" 11 #include "ppapi/cpp/instance_handle.h" 12 #include "ppapi/cpp/module.h" 13 #include "ppapi/cpp/module_impl.h" 14 15 namespace pp { 16 17 namespace { 18 19 static const char kPPPMouseLockInterface[] = PPP_MOUSELOCK_INTERFACE; 20 MouseLockLost(PP_Instance instance)21void MouseLockLost(PP_Instance instance) { 22 void* object = 23 Instance::GetPerInstanceObject(instance, kPPPMouseLockInterface); 24 if (!object) 25 return; 26 static_cast<MouseLock*>(object)->MouseLockLost(); 27 } 28 29 const PPP_MouseLock ppp_mouse_lock = { 30 &MouseLockLost 31 }; 32 interface_name()33template <> const char* interface_name<PPB_MouseLock_1_0>() { 34 return PPB_MOUSELOCK_INTERFACE_1_0; 35 } 36 37 } // namespace 38 MouseLock(Instance * instance)39MouseLock::MouseLock(Instance* instance) 40 : associated_instance_(instance) { 41 Module::Get()->AddPluginInterface(kPPPMouseLockInterface, &ppp_mouse_lock); 42 instance->AddPerInstanceObject(kPPPMouseLockInterface, this); 43 } 44 ~MouseLock()45MouseLock::~MouseLock() { 46 Instance::RemovePerInstanceObject(associated_instance_, 47 kPPPMouseLockInterface, this); 48 } 49 LockMouse(const CompletionCallback & cc)50int32_t MouseLock::LockMouse(const CompletionCallback& cc) { 51 if (!has_interface<PPB_MouseLock_1_0>()) 52 return cc.MayForce(PP_ERROR_NOINTERFACE); 53 return get_interface<PPB_MouseLock_1_0>()->LockMouse( 54 associated_instance_.pp_instance(), cc.pp_completion_callback()); 55 } 56 UnlockMouse()57void MouseLock::UnlockMouse() { 58 if (has_interface<PPB_MouseLock_1_0>()) { 59 get_interface<PPB_MouseLock_1_0>()->UnlockMouse( 60 associated_instance_.pp_instance()); 61 } 62 } 63 64 } // namespace pp 65