// Copyright (c) 2012 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/mouse_lock.h" #include "ppapi/c/ppb_mouse_lock.h" #include "ppapi/c/ppp_mouse_lock.h" #include "ppapi/cpp/completion_callback.h" #include "ppapi/cpp/instance.h" #include "ppapi/cpp/instance_handle.h" #include "ppapi/cpp/module.h" #include "ppapi/cpp/module_impl.h" namespace pp { namespace { static const char kPPPMouseLockInterface[] = PPP_MOUSELOCK_INTERFACE; void MouseLockLost(PP_Instance instance) { void* object = Instance::GetPerInstanceObject(instance, kPPPMouseLockInterface); if (!object) return; static_cast<MouseLock*>(object)->MouseLockLost(); } const PPP_MouseLock ppp_mouse_lock = { &MouseLockLost }; template <> const char* interface_name<PPB_MouseLock_1_0>() { return PPB_MOUSELOCK_INTERFACE_1_0; } } // namespace MouseLock::MouseLock(Instance* instance) : associated_instance_(instance) { Module::Get()->AddPluginInterface(kPPPMouseLockInterface, &ppp_mouse_lock); instance->AddPerInstanceObject(kPPPMouseLockInterface, this); } MouseLock::~MouseLock() { Instance::RemovePerInstanceObject(associated_instance_, kPPPMouseLockInterface, this); } int32_t MouseLock::LockMouse(const CompletionCallback& cc) { if (!has_interface<PPB_MouseLock_1_0>()) return cc.MayForce(PP_ERROR_NOINTERFACE); return get_interface<PPB_MouseLock_1_0>()->LockMouse( associated_instance_.pp_instance(), cc.pp_completion_callback()); } void MouseLock::UnlockMouse() { if (has_interface<PPB_MouseLock_1_0>()) { get_interface<PPB_MouseLock_1_0>()->UnlockMouse( associated_instance_.pp_instance()); } } } // namespace pp