1 // Copyright 2014 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/v8object_var.h" 6 7 #include "base/logging.h" 8 #include "content/public/renderer/pepper_plugin_instance.h" 9 #include "content/renderer/pepper/host_globals.h" 10 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 11 #include "ppapi/c/pp_var.h" 12 13 namespace ppapi { 14 15 // V8ObjectVar ----------------------------------------------------------------- 16 V8ObjectVar(PP_Instance instance,v8::Handle<v8::Object> v8_object)17V8ObjectVar::V8ObjectVar(PP_Instance instance, 18 v8::Handle<v8::Object> v8_object) 19 : instance_(content::HostGlobals::Get()->GetInstance(instance)) { 20 v8_object_.Reset(instance_->GetIsolate(), v8_object); 21 content::HostGlobals::Get()->host_var_tracker()->AddV8ObjectVar(this); 22 } 23 ~V8ObjectVar()24V8ObjectVar::~V8ObjectVar() { 25 if (instance_) 26 content::HostGlobals::Get()->host_var_tracker()->RemoveV8ObjectVar(this); 27 v8_object_.Reset(); 28 } 29 AsV8ObjectVar()30V8ObjectVar* V8ObjectVar::AsV8ObjectVar() { 31 return this; 32 } 33 GetType() const34PP_VarType V8ObjectVar::GetType() const { 35 return PP_VARTYPE_OBJECT; 36 } 37 GetHandle() const38v8::Local<v8::Object> V8ObjectVar::GetHandle() const { 39 if (instance_) 40 return v8::Local<v8::Object>::New(instance_->GetIsolate(), v8_object_); 41 return v8::Local<v8::Object>(); 42 } 43 InstanceDeleted()44void V8ObjectVar::InstanceDeleted() { 45 // This is called by the HostVarTracker which will take care of removing us 46 // from its set. 47 DCHECK(instance_); 48 instance_ = NULL; 49 } 50 51 // static FromPPVar(PP_Var var)52scoped_refptr<V8ObjectVar> V8ObjectVar::FromPPVar(PP_Var var) { 53 if (var.type != PP_VARTYPE_OBJECT) 54 return scoped_refptr<V8ObjectVar>(NULL); 55 scoped_refptr<Var> var_object( 56 PpapiGlobals::Get()->GetVarTracker()->GetVar(var)); 57 if (!var_object.get()) 58 return scoped_refptr<V8ObjectVar>(); 59 return scoped_refptr<V8ObjectVar>(var_object->AsV8ObjectVar()); 60 } 61 62 } // namespace ppapi 63