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

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

Issue 635593004: PPAPI: Make V8VarConverter longer-lived (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 2014 The Chromium Authors. All rights reserved. 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 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/pepper_try_catch.h" 5 #include "content/renderer/pepper/pepper_try_catch.h"
6 6
7 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 7 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
8 #include "content/renderer/pepper/v8_var_converter.h"
8 #include "gin/converter.h" 9 #include "gin/converter.h"
9 #include "ppapi/shared_impl/ppapi_globals.h" 10 #include "ppapi/shared_impl/ppapi_globals.h"
10 #include "ppapi/shared_impl/var_tracker.h" 11 #include "ppapi/shared_impl/var_tracker.h"
11 12
12 namespace content { 13 namespace content {
13 14
14 namespace { 15 namespace {
15 16
16 const char kConversionException[] = 17 const char kConversionException[] =
17 "Error: Failed conversion between PP_Var and V8 value"; 18 "Error: Failed conversion between PP_Var and V8 value";
18 const char kInvalidException[] = "Error: An invalid exception was thrown."; 19 const char kInvalidException[] = "Error: An invalid exception was thrown.";
19 20
20 } // namespace 21 } // namespace
21 22
22 PepperTryCatch::PepperTryCatch(PepperPluginInstanceImpl* instance, 23 PepperTryCatch::PepperTryCatch(PepperPluginInstanceImpl* instance,
23 V8VarConverter::AllowObjectVars convert_objects) 24 V8VarConverter* var_converter)
24 : instance_(instance), 25 : instance_(instance), var_converter_(var_converter) {}
raymes 2014/10/09 22:04:42 nit, optional: since we know that the conversion m
dmichael (off chromium) 2014/10/09 22:45:37 You mean kAllowObjectVars? We don't know that here
raymes 2014/10/10 19:27:14 Sorry, yeah that's what I meant :)
25 convert_objects_(convert_objects) {}
26 26
27 PepperTryCatch::~PepperTryCatch() {} 27 PepperTryCatch::~PepperTryCatch() {}
28 28
29 v8::Handle<v8::Value> PepperTryCatch::ToV8(PP_Var var) { 29 v8::Handle<v8::Value> PepperTryCatch::ToV8(PP_Var var) {
30 if (HasException()) { 30 if (HasException()) {
31 SetException(kConversionException); 31 SetException(kConversionException);
32 return v8::Handle<v8::Value>(); 32 return v8::Handle<v8::Value>();
33 } 33 }
34 34
35 V8VarConverter converter(instance_->pp_instance(), convert_objects_);
36 v8::Handle<v8::Value> result; 35 v8::Handle<v8::Value> result;
37 bool success = converter.ToV8Value(var, GetContext(), &result); 36 bool success = var_converter_->ToV8Value(var, GetContext(), &result);
38 if (!success) { 37 if (!success) {
39 SetException(kConversionException); 38 SetException(kConversionException);
40 return v8::Handle<v8::Value>(); 39 return v8::Handle<v8::Value>();
41 } 40 }
42 return result; 41 return result;
43 } 42 }
44 43
45 ppapi::ScopedPPVar PepperTryCatch::FromV8(v8::Handle<v8::Value> v8_value) { 44 ppapi::ScopedPPVar PepperTryCatch::FromV8(v8::Handle<v8::Value> v8_value) {
46 if (HasException() || v8_value.IsEmpty()) { 45 if (HasException() || v8_value.IsEmpty()) {
47 SetException(kConversionException); 46 SetException(kConversionException);
48 return ppapi::ScopedPPVar(); 47 return ppapi::ScopedPPVar();
49 } 48 }
50 ppapi::ScopedPPVar result; 49 ppapi::ScopedPPVar result;
51 V8VarConverter converter(instance_->pp_instance(), convert_objects_); 50 bool success =
52 bool success = converter.FromV8ValueSync(v8_value, GetContext(), &result); 51 var_converter_->FromV8ValueSync(v8_value, GetContext(), &result);
53 if (!success) { 52 if (!success) {
54 SetException(kConversionException); 53 SetException(kConversionException);
55 return ppapi::ScopedPPVar(); 54 return ppapi::ScopedPPVar();
56 } 55 }
57 return result; 56 return result;
58 } 57 }
59 58
60 PepperTryCatchV8::PepperTryCatchV8( 59 PepperTryCatchV8::PepperTryCatchV8(PepperPluginInstanceImpl* instance,
61 PepperPluginInstanceImpl* instance, 60 V8VarConverter* var_converter,
62 V8VarConverter::AllowObjectVars convert_objects, 61 v8::Isolate* isolate)
63 v8::Isolate* isolate) 62 : PepperTryCatch(instance, var_converter),
64 : PepperTryCatch(instance, convert_objects),
65 exception_(PP_MakeUndefined()) { 63 exception_(PP_MakeUndefined()) {
66 // Typically when using PepperTryCatchV8 we are passed an isolate. We verify 64 // Typically when using PepperTryCatchV8 we are passed an isolate. We verify
67 // that this isolate is the same as the plugin isolate. 65 // that this isolate is the same as the plugin isolate.
68 DCHECK(isolate == instance_->GetIsolate()); 66 DCHECK(isolate == instance_->GetIsolate());
69 67
70 // We assume that a handle scope and context has been setup by the user of 68 // We assume that a handle scope and context has been setup by the user of
71 // this class. This is typically true because this class is used when calling 69 // this class. This is typically true because this class is used when calling
72 // into the plugin from JavaScript. We want to use whatever v8 context the 70 // into the plugin from JavaScript. We want to use whatever v8 context the
73 // caller is in. 71 // caller is in.
74 } 72 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 } 111 }
114 112
115 void PepperTryCatchV8::SetException(const char* message) { 113 void PepperTryCatchV8::SetException(const char* message) {
116 if (HasException()) 114 if (HasException())
117 return; 115 return;
118 116
119 exception_ = ppapi::StringVar::StringToPPVar(message); 117 exception_ = ppapi::StringVar::StringToPPVar(message);
120 } 118 }
121 119
122 PepperTryCatchVar::PepperTryCatchVar(PepperPluginInstanceImpl* instance, 120 PepperTryCatchVar::PepperTryCatchVar(PepperPluginInstanceImpl* instance,
121 V8VarConverter* var_converter,
123 PP_Var* exception) 122 PP_Var* exception)
124 : PepperTryCatch(instance, V8VarConverter::kAllowObjectVars), 123 : PepperTryCatch(instance, var_converter),
125 handle_scope_(instance_->GetIsolate()), 124 handle_scope_(instance_->GetIsolate()),
126 context_(GetContext()), 125 context_(GetContext()),
127 exception_(exception), 126 exception_(exception),
128 exception_is_set_(false) { 127 exception_is_set_(false) {
129 // We switch to the plugin context if it's not empty. 128 // We switch to the plugin context if it's not empty.
130 if (!context_.IsEmpty()) 129 if (!context_.IsEmpty())
131 context_->Enter(); 130 context_->Enter();
132 } 131 }
133 132
134 PepperTryCatchVar::~PepperTryCatchVar() { 133 PepperTryCatchVar::~PepperTryCatchVar() {
(...skipping 30 matching lines...) Expand all
165 void PepperTryCatchVar::SetException(const char* message) { 164 void PepperTryCatchVar::SetException(const char* message) {
166 if (exception_is_set_) 165 if (exception_is_set_)
167 return; 166 return;
168 167
169 if (exception_) 168 if (exception_)
170 *exception_ = ppapi::StringVar::StringToPPVar(message, strlen(message)); 169 *exception_ = ppapi::StringVar::StringToPPVar(message, strlen(message));
171 exception_is_set_ = true; 170 exception_is_set_ = true;
172 } 171 }
173 172
174 } // namespace content 173 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698