Home | History | Annotate | Download | only in pepper
      1 // Copyright (c) 2011 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 "content/renderer/pepper/npobject_var.h"
      6 
      7 #include "base/logging.h"
      8 #include "content/renderer/pepper/host_globals.h"
      9 #include "content/renderer/pepper/host_var_tracker.h"
     10 #include "ppapi/c/pp_var.h"
     11 #include "third_party/WebKit/public/web/WebBindings.h"
     12 
     13 using WebKit::WebBindings;
     14 
     15 namespace ppapi {
     16 
     17 // NPObjectVar -----------------------------------------------------------------
     18 
     19 NPObjectVar::NPObjectVar(PP_Instance instance,
     20                          NPObject* np_object)
     21     : pp_instance_(instance),
     22       np_object_(np_object) {
     23   WebBindings::retainObject(np_object_);
     24   content::HostGlobals::Get()->host_var_tracker()->AddNPObjectVar(this);
     25 }
     26 
     27 NPObjectVar::~NPObjectVar() {
     28   if (pp_instance())
     29     content::HostGlobals::Get()->host_var_tracker()->RemoveNPObjectVar(this);
     30   WebBindings::releaseObject(np_object_);
     31 }
     32 
     33 NPObjectVar* NPObjectVar::AsNPObjectVar() {
     34   return this;
     35 }
     36 
     37 PP_VarType NPObjectVar::GetType() const {
     38   return PP_VARTYPE_OBJECT;
     39 }
     40 
     41 void NPObjectVar::InstanceDeleted() {
     42   DCHECK(pp_instance_);
     43   content::HostGlobals::Get()->host_var_tracker()->RemoveNPObjectVar(this);
     44   pp_instance_ = 0;
     45 }
     46 
     47 // static
     48 scoped_refptr<NPObjectVar> NPObjectVar::FromPPVar(PP_Var var) {
     49   if (var.type != PP_VARTYPE_OBJECT)
     50     return scoped_refptr<NPObjectVar>(NULL);
     51   scoped_refptr<Var> var_object(
     52       PpapiGlobals::Get()->GetVarTracker()->GetVar(var));
     53   if (!var_object.get())
     54     return scoped_refptr<NPObjectVar>();
     55   return scoped_refptr<NPObjectVar>(var_object->AsNPObjectVar());
     56 }
     57 
     58 }  // namespace ppapi
     59