From 8cef2068010fa12968211e3721d60d4d5fd3d4e9 Mon Sep 17 00:00:00 2001 From: "dmichael@chromium.org" Date: Tue, 19 Apr 2011 14:49:32 +0000 Subject: Rename Instance_Trusted to Instance_Private, wire it up in Chrome. Add C++ InstancePrivate. BUG=None TEST=PPAPI tests Review URL: http://codereview.chromium.org/6871040 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@82104 0039d316-1c4b-4281-b951-d872f2087c98 --- ppapi/cpp/private/instance_private.cc | 72 +++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ppapi/cpp/private/instance_private.cc (limited to 'ppapi/cpp/private/instance_private.cc') diff --git a/ppapi/cpp/private/instance_private.cc b/ppapi/cpp/private/instance_private.cc new file mode 100644 index 0000000..2a924a3 --- /dev/null +++ b/ppapi/cpp/private/instance_private.cc @@ -0,0 +1,72 @@ +// Copyright (c) 2011 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/private/instance_private.h" + +#include "ppapi/c/private/ppb_instance_private.h" +#include "ppapi/c/private/ppp_instance_private.h" +#include "ppapi/cpp/module_impl.h" +#include "ppapi/cpp/private/var_private.h" + +namespace pp { + +namespace { + +template <> const char* interface_name() { + return PPB_INSTANCE_PRIVATE_INTERFACE; +} + +PP_Var GetInstanceObject(PP_Instance pp_instance) { + Module* module_singleton = Module::Get(); + if (!module_singleton) + return Var().Detach(); + InstancePrivate* instance_private = static_cast( + module_singleton->InstanceForPPInstance(pp_instance)); + if (!instance_private) + return Var().Detach(); + return instance_private->GetInstanceObject().Detach(); +} + +const PPP_Instance_Private ppp_instance_private = { + &GetInstanceObject +}; + +} // namespace + +InstancePrivate::InstancePrivate(PP_Instance instance) : Instance(instance) { + // If at least 1 InstancePrivate is created, register the PPP_INSTANCE_PRIVATE + // interface. + Module::Get()->AddPluginInterface(PPP_INSTANCE_PRIVATE_INTERFACE, + &ppp_instance_private); +} + +InstancePrivate::~InstancePrivate() {} + +VarPrivate InstancePrivate::GetWindowObject() { + if (!has_interface()) + return VarPrivate(); + return VarPrivate(Var::PassRef(), + get_interface()->GetWindowObject(pp_instance())); +} + +VarPrivate InstancePrivate::GetOwnerElementObject() { + if (!has_interface()) + return VarPrivate(); + return VarPrivate(Var::PassRef(), + get_interface()->GetOwnerElementObject( + pp_instance())); +} + +VarPrivate InstancePrivate::ExecuteScript(const VarPrivate& script, + VarPrivate* exception) { + if (!has_interface()) + return VarPrivate(); + return VarPrivate(Var::PassRef(), + get_interface()->ExecuteScript( + pp_instance(), + script.pp_var(), + VarPrivate::OutException(exception).get())); +} + +} // namespace pp -- cgit v1.1