Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Side by Side Diff: content/renderer/pepper/plugin_object.cc

Issue 635593004: PPAPI: Make V8VarConverter longer-lived (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 bool PluginObject::SetNamedProperty(v8::Isolate* isolate, 93 bool PluginObject::SetNamedProperty(v8::Isolate* isolate,
92 const std::string& identifier, 94 const std::string& identifier,
93 v8::Local<v8::Value> value) { 95 v8::Local<v8::Value> value) {
94 if (!instance_) 96 if (!instance_)
95 return false; 97 return false;
96 ScopedPPVar identifier_var(ScopedPPVar::PassRef(), 98 ScopedPPVar identifier_var(ScopedPPVar::PassRef(),
97 StringVar::StringToPPVar(identifier)); 99 StringVar::StringToPPVar(identifier));
98 PepperTryCatchV8 try_catch(instance_, V8VarConverter::kAllowObjectVars, 100 V8VarConverter var_converter(instance_->pp_instance(),
99 isolate); 101 V8VarConverter::kAllowObjectVars);
102 PepperTryCatchV8 try_catch(instance_, &var_converter, isolate);
100 103
101 bool has_property = 104 bool has_property =
102 ppp_class_->HasProperty(ppp_class_data_, identifier_var.get(), 105 ppp_class_->HasProperty(ppp_class_data_, identifier_var.get(),
103 try_catch.exception()); 106 try_catch.exception());
104 if (try_catch.ThrowException()) 107 if (try_catch.ThrowException())
105 return false; 108 return false;
106 109
107 if (!has_property) 110 if (!has_property)
108 return false; 111 return false;
109 112
(...skipping 10 matching lines...) Expand all
120 try_catch.ThrowException(); 123 try_catch.ThrowException();
121 return true; 124 return true;
122 } 125 }
123 126
124 std::vector<std::string> PluginObject::EnumerateNamedProperties( 127 std::vector<std::string> PluginObject::EnumerateNamedProperties(
125 v8::Isolate* isolate) { 128 v8::Isolate* isolate) {
126 std::vector<std::string> result; 129 std::vector<std::string> result;
127 if (!instance_) 130 if (!instance_)
128 return result; 131 return result;
129 132
130 PepperTryCatchV8 try_catch(instance_, V8VarConverter::kAllowObjectVars, 133 V8VarConverter var_converter(instance_->pp_instance(),
131 isolate); 134 V8VarConverter::kAllowObjectVars);
135 PepperTryCatchV8 try_catch(instance_, &var_converter, isolate);
132 136
133 PP_Var* name_vars; 137 PP_Var* name_vars;
134 uint32_t count = 0; 138 uint32_t count = 0;
135 ppp_class_->GetAllPropertyNames(ppp_class_data_, &count, &name_vars, 139 ppp_class_->GetAllPropertyNames(ppp_class_data_, &count, &name_vars,
136 try_catch.exception()); 140 try_catch.exception());
137 ScopedPPVarArray scoped_name_vars( 141 ScopedPPVarArray scoped_name_vars(
138 ScopedPPVarArray::PassPPBMemoryAllocatedArray(), name_vars, count); 142 ScopedPPVarArray::PassPPBMemoryAllocatedArray(), name_vars, count);
139 143
140 if (try_catch.ThrowException()) 144 if (try_catch.ThrowException())
141 return result; 145 return result;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 v8::Isolate* isolate) { 177 v8::Isolate* isolate) {
174 return Wrappable<PluginObject>::GetObjectTemplateBuilder(isolate) 178 return Wrappable<PluginObject>::GetObjectTemplateBuilder(isolate)
175 .AddNamedPropertyInterceptor(); 179 .AddNamedPropertyInterceptor();
176 } 180 }
177 181
178 v8::Local<v8::Value> PluginObject::GetPropertyOrMethod(v8::Isolate* isolate, 182 v8::Local<v8::Value> PluginObject::GetPropertyOrMethod(v8::Isolate* isolate,
179 PP_Var identifier_var) { 183 PP_Var identifier_var) {
180 if (!instance_) 184 if (!instance_)
181 return v8::Local<v8::Value>(); 185 return v8::Local<v8::Value>();
182 186
183 PepperTryCatchV8 try_catch(instance_, V8VarConverter::kAllowObjectVars, 187 V8VarConverter var_converter(instance_->pp_instance(),
184 isolate); 188 V8VarConverter::kAllowObjectVars);
189 PepperTryCatchV8 try_catch(instance_, &var_converter, isolate);
185 bool has_property = 190 bool has_property =
186 ppp_class_->HasProperty(ppp_class_data_, identifier_var, 191 ppp_class_->HasProperty(ppp_class_data_, identifier_var,
187 try_catch.exception()); 192 try_catch.exception());
188 if (try_catch.ThrowException()) 193 if (try_catch.ThrowException())
189 return v8::Local<v8::Value>(); 194 return v8::Local<v8::Value>();
190 195
191 if (has_property) { 196 if (has_property) {
192 ScopedPPVar result_var(ScopedPPVar::PassRef(), 197 ScopedPPVar result_var(ScopedPPVar::PassRef(),
193 ppp_class_->GetProperty(ppp_class_data_, identifier_var, 198 ppp_class_->GetProperty(ppp_class_data_, identifier_var,
194 try_catch.exception())); 199 try_catch.exception()));
(...skipping 23 matching lines...) Expand all
218 } 223 }
219 224
220 return v8::Local<v8::Value>(); 225 return v8::Local<v8::Value>();
221 } 226 }
222 227
223 void PluginObject::Call(const std::string& identifier, 228 void PluginObject::Call(const std::string& identifier,
224 gin::Arguments* args) { 229 gin::Arguments* args) {
225 if (!instance_) 230 if (!instance_)
226 return; 231 return;
227 232
228 PepperTryCatchV8 try_catch(instance_, V8VarConverter::kAllowObjectVars, 233 V8VarConverter var_converter(instance_->pp_instance(),
229 args->isolate()); 234 V8VarConverter::kAllowObjectVars);
235 PepperTryCatchV8 try_catch(instance_, &var_converter, args->isolate());
230 ScopedPPVar identifier_var(ScopedPPVar::PassRef(), 236 ScopedPPVar identifier_var(ScopedPPVar::PassRef(),
231 StringVar::StringToPPVar(identifier)); 237 StringVar::StringToPPVar(identifier));
232 ScopedPPVarArray argument_vars(args->Length()); 238 ScopedPPVarArray argument_vars(args->Length());
233 239
234 for (uint32_t i = 0; i < argument_vars.size(); ++i) { 240 for (uint32_t i = 0; i < argument_vars.size(); ++i) {
235 v8::Handle<v8::Value> arg; 241 v8::Handle<v8::Value> arg;
236 if (!args->GetNext(&arg)) { 242 if (!args->GetNext(&arg)) {
237 NOTREACHED(); 243 NOTREACHED();
238 } 244 }
239 245
(...skipping 16 matching lines...) Expand all
256 return; 262 return;
257 263
258 v8::Handle<v8::Value> result = try_catch.ToV8(result_var.get()); 264 v8::Handle<v8::Value> result = try_catch.ToV8(result_var.get());
259 if (try_catch.ThrowException()) 265 if (try_catch.ThrowException())
260 return; 266 return;
261 267
262 args->Return(result); 268 args->Return(result);
263 } 269 }
264 270
265 } // namespace content 271 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/pepper_try_catch.cc ('k') | content/renderer/pepper/ppb_var_deprecated_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698