16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/renderer/pepper/v8object_var.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/logging.h" 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/renderer/pepper_plugin_instance.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/renderer/pepper/host_globals.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/renderer/pepper/pepper_plugin_instance_impl.h" 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ppapi/c/pp_var.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace ppapi { 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// V8ObjectVar ----------------------------------------------------------------- 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)V8ObjectVar::V8ObjectVar(PP_Instance instance, 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) v8::Handle<v8::Object> v8_object) 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : instance_(content::HostGlobals::Get()->GetInstance(instance)) { 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) v8_object_.Reset(instance_->GetIsolate(), v8_object); 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::HostGlobals::Get()->host_var_tracker()->AddV8ObjectVar(this); 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)V8ObjectVar::~V8ObjectVar() { 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (instance_) 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::HostGlobals::Get()->host_var_tracker()->RemoveV8ObjectVar(this); 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) v8_object_.Reset(); 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)V8ObjectVar* V8ObjectVar::AsV8ObjectVar() { 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return this; 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)PP_VarType V8ObjectVar::GetType() const { 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return PP_VARTYPE_OBJECT; 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)v8::Local<v8::Object> V8ObjectVar::GetHandle() const { 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (instance_) 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return v8::Local<v8::Object>::New(instance_->GetIsolate(), v8_object_); 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return v8::Local<v8::Object>(); 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void V8ObjectVar::InstanceDeleted() { 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // This is called by the HostVarTracker which will take care of removing us 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // from its set. 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK(instance_); 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) instance_ = NULL; 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// static 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)scoped_refptr<V8ObjectVar> V8ObjectVar::FromPPVar(PP_Var var) { 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (var.type != PP_VARTYPE_OBJECT) 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return scoped_refptr<V8ObjectVar>(NULL); 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<Var> var_object( 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) PpapiGlobals::Get()->GetVarTracker()->GetVar(var)); 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (!var_object.get()) 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return scoped_refptr<V8ObjectVar>(); 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return scoped_refptr<V8ObjectVar>(var_object->AsV8ObjectVar()); 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace ppapi 63