1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
content / renderer / pepper / v8object_var.cc [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/renderer/pepper/v8object_var.h"
#include "base/check.h"
#include "content/public/renderer/pepper_plugin_instance.h"
#include "content/renderer/pepper/host_globals.h"
#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
#include "ppapi/c/pp_var.h"
#include "v8/include/v8-object.h"
namespace ppapi {
// V8ObjectVar -----------------------------------------------------------------
V8ObjectVar::V8ObjectVar(PP_Instance instance,
v8::Local<v8::Object> v8_object)
: instance_(content::HostGlobals::Get()->GetInstance(instance)) {
v8_object_.Reset(instance_->GetIsolate(), v8_object);
content::HostGlobals::Get()->host_var_tracker()->AddV8ObjectVar(this);
}
V8ObjectVar::~V8ObjectVar() {
if (instance_)
content::HostGlobals::Get()->host_var_tracker()->RemoveV8ObjectVar(this);
v8_object_.Reset();
}
V8ObjectVar* V8ObjectVar::AsV8ObjectVar() {
return this;
}
PP_VarType V8ObjectVar::GetType() const {
return PP_VARTYPE_OBJECT;
}
v8::Local<v8::Object> V8ObjectVar::GetHandle() const {
if (instance_)
return v8::Local<v8::Object>::New(instance_->GetIsolate(), v8_object_);
return v8::Local<v8::Object>();
}
void V8ObjectVar::InstanceDeleted() {
// This is called by the HostVarTracker which will take care of removing us
// from its set.
DCHECK(instance_);
instance_ = nullptr;
}
// static
scoped_refptr<V8ObjectVar> V8ObjectVar::FromPPVar(PP_Var var) {
if (var.type != PP_VARTYPE_OBJECT)
return scoped_refptr<V8ObjectVar>(nullptr);
scoped_refptr<Var> var_object(
PpapiGlobals::Get()->GetVarTracker()->GetVar(var));
if (!var_object.get())
return scoped_refptr<V8ObjectVar>();
return scoped_refptr<V8ObjectVar>(var_object->AsV8ObjectVar());
}
} // namespace ppapi