// 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 "content/renderer/pepper/npobject_var.h" #include "base/logging.h" #include "content/renderer/pepper/host_globals.h" #include "content/renderer/pepper/host_var_tracker.h" #include "ppapi/c/pp_var.h" #include "third_party/WebKit/public/web/WebBindings.h" using WebKit::WebBindings; namespace ppapi { // NPObjectVar ----------------------------------------------------------------- NPObjectVar::NPObjectVar(PP_Instance instance, NPObject* np_object) : pp_instance_(instance), np_object_(np_object) { WebBindings::retainObject(np_object_); content::HostGlobals::Get()->host_var_tracker()->AddNPObjectVar(this); } NPObjectVar::~NPObjectVar() { if (pp_instance()) content::HostGlobals::Get()->host_var_tracker()->RemoveNPObjectVar(this); WebBindings::releaseObject(np_object_); } NPObjectVar* NPObjectVar::AsNPObjectVar() { return this; } PP_VarType NPObjectVar::GetType() const { return PP_VARTYPE_OBJECT; } void NPObjectVar::InstanceDeleted() { DCHECK(pp_instance_); content::HostGlobals::Get()->host_var_tracker()->RemoveNPObjectVar(this); pp_instance_ = 0; } // static scoped_refptr NPObjectVar::FromPPVar(PP_Var var) { if (var.type != PP_VARTYPE_OBJECT) return scoped_refptr(NULL); scoped_refptr var_object( PpapiGlobals::Get()->GetVarTracker()->GetVar(var)); if (!var_object.get()) return scoped_refptr(); return scoped_refptr(var_object->AsNPObjectVar()); } } // namespace ppapi