OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/pepper/plugin_object.h" | 5 #include "content/renderer/pepper/plugin_object.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 gin::ConvertFromV8(isolate, v8_object, &plugin_object)) { | 64 gin::ConvertFromV8(isolate, v8_object, &plugin_object)) { |
65 return plugin_object; | 65 return plugin_object; |
66 } | 66 } |
67 return NULL; | 67 return NULL; |
68 } | 68 } |
69 | 69 |
70 // static | 70 // static |
71 PP_Var PluginObject::Create(PepperPluginInstanceImpl* instance, | 71 PP_Var PluginObject::Create(PepperPluginInstanceImpl* instance, |
72 const PPP_Class_Deprecated* ppp_class, | 72 const PPP_Class_Deprecated* ppp_class, |
73 void* ppp_class_data) { | 73 void* ppp_class_data) { |
74 PepperTryCatchVar try_catch(instance, NULL); | 74 V8VarConverter var_converter(instance->pp_instance(), |
| 75 V8VarConverter::kAllowObjectVars); |
| 76 PepperTryCatchVar try_catch(instance, &var_converter, NULL); |
75 gin::Handle<PluginObject> object = | 77 gin::Handle<PluginObject> object = |
76 gin::CreateHandle(instance->GetIsolate(), | 78 gin::CreateHandle(instance->GetIsolate(), |
77 new PluginObject(instance, ppp_class, ppp_class_data)); | 79 new PluginObject(instance, ppp_class, ppp_class_data)); |
78 ScopedPPVar result = try_catch.FromV8(object.ToV8()); | 80 ScopedPPVar result = try_catch.FromV8(object.ToV8()); |
79 DCHECK(!try_catch.HasException()); | 81 DCHECK(!try_catch.HasException()); |
80 return result.Release(); | 82 return result.Release(); |
81 } | 83 } |
82 | 84 |
83 v8::Local<v8::Value> PluginObject::GetNamedProperty( | 85 v8::Local<v8::Value> PluginObject::GetNamedProperty( |
84 v8::Isolate* isolate, | 86 v8::Isolate* isolate, |
85 const std::string& identifier) { | 87 const std::string& identifier) { |
86 ScopedPPVar identifier_var(ScopedPPVar::PassRef(), | 88 ScopedPPVar identifier_var(ScopedPPVar::PassRef(), |
87 StringVar::StringToPPVar(identifier)); | 89 StringVar::StringToPPVar(identifier)); |
88 return GetPropertyOrMethod(instance_->GetIsolate(), identifier_var.get()); | 90 return GetPropertyOrMethod(instance_->GetIsolate(), identifier_var.get()); |
89 } | 91 } |
90 | 92 |
91 std::vector<std::string> PluginObject::EnumerateNamedProperties( | 93 std::vector<std::string> PluginObject::EnumerateNamedProperties( |
92 v8::Isolate* isolate) { | 94 v8::Isolate* isolate) { |
93 std::vector<std::string> result; | 95 std::vector<std::string> result; |
94 if (!instance_) | 96 if (!instance_) |
95 return result; | 97 return result; |
96 | 98 |
97 PepperTryCatchV8 try_catch(instance_, V8VarConverter::kAllowObjectVars, | 99 V8VarConverter var_converter(instance_->pp_instance(), |
98 isolate); | 100 V8VarConverter::kAllowObjectVars); |
| 101 PepperTryCatchV8 try_catch(instance_, &var_converter, isolate); |
99 | 102 |
100 PP_Var* name_vars; | 103 PP_Var* name_vars; |
101 uint32_t count = 0; | 104 uint32_t count = 0; |
102 ppp_class_->GetAllPropertyNames(ppp_class_data_, &count, &name_vars, | 105 ppp_class_->GetAllPropertyNames(ppp_class_data_, &count, &name_vars, |
103 try_catch.exception()); | 106 try_catch.exception()); |
104 ScopedPPVarArray scoped_name_vars( | 107 ScopedPPVarArray scoped_name_vars( |
105 ScopedPPVarArray::PassPPBMemoryAllocatedArray(), name_vars, count); | 108 ScopedPPVarArray::PassPPBMemoryAllocatedArray(), name_vars, count); |
106 | 109 |
107 if (try_catch.ThrowException()) | 110 if (try_catch.ThrowException()) |
108 return result; | 111 return result; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 v8::Isolate* isolate) { | 143 v8::Isolate* isolate) { |
141 return Wrappable<PluginObject>::GetObjectTemplateBuilder(isolate) | 144 return Wrappable<PluginObject>::GetObjectTemplateBuilder(isolate) |
142 .AddNamedPropertyInterceptor(); | 145 .AddNamedPropertyInterceptor(); |
143 } | 146 } |
144 | 147 |
145 v8::Local<v8::Value> PluginObject::GetPropertyOrMethod(v8::Isolate* isolate, | 148 v8::Local<v8::Value> PluginObject::GetPropertyOrMethod(v8::Isolate* isolate, |
146 PP_Var identifier_var) { | 149 PP_Var identifier_var) { |
147 if (!instance_) | 150 if (!instance_) |
148 return v8::Local<v8::Value>(); | 151 return v8::Local<v8::Value>(); |
149 | 152 |
150 PepperTryCatchV8 try_catch(instance_, V8VarConverter::kAllowObjectVars, | 153 V8VarConverter var_converter(instance_->pp_instance(), |
151 isolate); | 154 V8VarConverter::kAllowObjectVars); |
| 155 PepperTryCatchV8 try_catch(instance_, &var_converter, isolate); |
152 bool has_property = | 156 bool has_property = |
153 ppp_class_->HasProperty(ppp_class_data_, identifier_var, | 157 ppp_class_->HasProperty(ppp_class_data_, identifier_var, |
154 try_catch.exception()); | 158 try_catch.exception()); |
155 if (try_catch.ThrowException()) | 159 if (try_catch.ThrowException()) |
156 return v8::Local<v8::Value>(); | 160 return v8::Local<v8::Value>(); |
157 | 161 |
158 if (has_property) { | 162 if (has_property) { |
159 ScopedPPVar result_var(ScopedPPVar::PassRef(), | 163 ScopedPPVar result_var(ScopedPPVar::PassRef(), |
160 ppp_class_->GetProperty(ppp_class_data_, identifier_var, | 164 ppp_class_->GetProperty(ppp_class_data_, identifier_var, |
161 try_catch.exception())); | 165 try_catch.exception())); |
(...skipping 23 matching lines...) Expand all Loading... |
185 } | 189 } |
186 | 190 |
187 return v8::Local<v8::Value>(); | 191 return v8::Local<v8::Value>(); |
188 } | 192 } |
189 | 193 |
190 void PluginObject::Call(const std::string& identifier, | 194 void PluginObject::Call(const std::string& identifier, |
191 gin::Arguments* args) { | 195 gin::Arguments* args) { |
192 if (!instance_) | 196 if (!instance_) |
193 return; | 197 return; |
194 | 198 |
195 PepperTryCatchV8 try_catch(instance_, V8VarConverter::kAllowObjectVars, | 199 V8VarConverter var_converter(instance_->pp_instance(), |
196 args->isolate()); | 200 V8VarConverter::kAllowObjectVars); |
| 201 PepperTryCatchV8 try_catch(instance_, &var_converter, args->isolate()); |
197 ScopedPPVar identifier_var(ScopedPPVar::PassRef(), | 202 ScopedPPVar identifier_var(ScopedPPVar::PassRef(), |
198 StringVar::StringToPPVar(identifier)); | 203 StringVar::StringToPPVar(identifier)); |
199 ScopedPPVarArray argument_vars(args->Length()); | 204 ScopedPPVarArray argument_vars(args->Length()); |
200 | 205 |
201 for (uint32_t i = 0; i < argument_vars.size(); ++i) { | 206 for (uint32_t i = 0; i < argument_vars.size(); ++i) { |
202 v8::Handle<v8::Value> arg; | 207 v8::Handle<v8::Value> arg; |
203 if (!args->GetNext(&arg)) { | 208 if (!args->GetNext(&arg)) { |
204 NOTREACHED(); | 209 NOTREACHED(); |
205 } | 210 } |
206 | 211 |
(...skipping 16 matching lines...) Expand all Loading... |
223 return; | 228 return; |
224 | 229 |
225 v8::Handle<v8::Value> result = try_catch.ToV8(result_var.get()); | 230 v8::Handle<v8::Value> result = try_catch.ToV8(result_var.get()); |
226 if (try_catch.ThrowException()) | 231 if (try_catch.ThrowException()) |
227 return; | 232 return; |
228 | 233 |
229 args->Return(result); | 234 args->Return(result); |
230 } | 235 } |
231 | 236 |
232 } // namespace content | 237 } // namespace content |
OLD | NEW |