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/private/instance_private.h" 6 7#include "ppapi/c/private/ppb_instance_private.h" 8#include "ppapi/c/private/ppp_instance_private.h" 9#include "ppapi/cpp/module_impl.h" 10#include "ppapi/cpp/private/var_private.h" 11 12namespace pp { 13 14namespace { 15 16template <> const char* interface_name<PPB_Instance_Private>() { 17 return PPB_INSTANCE_PRIVATE_INTERFACE; 18} 19 20PP_Var GetInstanceObject(PP_Instance pp_instance) { 21 Module* module_singleton = Module::Get(); 22 if (!module_singleton) 23 return Var().Detach(); 24 InstancePrivate* instance_private = static_cast<InstancePrivate*>( 25 module_singleton->InstanceForPPInstance(pp_instance)); 26 if (!instance_private) 27 return Var().Detach(); 28 return instance_private->GetInstanceObject().Detach(); 29} 30 31const PPP_Instance_Private ppp_instance_private = { 32 &GetInstanceObject 33}; 34 35} // namespace 36 37InstancePrivate::InstancePrivate(PP_Instance instance) : Instance(instance) { 38 // If at least 1 InstancePrivate is created, register the PPP_INSTANCE_PRIVATE 39 // interface. 40 Module::Get()->AddPluginInterface(PPP_INSTANCE_PRIVATE_INTERFACE, 41 &ppp_instance_private); 42} 43 44InstancePrivate::~InstancePrivate() {} 45 46Var InstancePrivate::GetInstanceObject() { 47 return Var(); 48} 49 50VarPrivate InstancePrivate::GetWindowObject() { 51 if (!has_interface<PPB_Instance_Private>()) 52 return VarPrivate(); 53 return VarPrivate(PASS_REF, 54 get_interface<PPB_Instance_Private>()->GetWindowObject(pp_instance())); 55} 56 57VarPrivate InstancePrivate::GetOwnerElementObject() { 58 if (!has_interface<PPB_Instance_Private>()) 59 return VarPrivate(); 60 return VarPrivate(PASS_REF, 61 get_interface<PPB_Instance_Private>()->GetOwnerElementObject( 62 pp_instance())); 63} 64 65VarPrivate InstancePrivate::ExecuteScript(const Var& script, Var* exception) { 66 if (!has_interface<PPB_Instance_Private>()) 67 return VarPrivate(); 68 return VarPrivate(PASS_REF, 69 get_interface<PPB_Instance_Private>()->ExecuteScript( 70 pp_instance(), 71 script.pp_var(), 72 VarPrivate::OutException(exception).get())); 73} 74 75} // namespace pp 76