OLD | NEW |
---|---|
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 "gin/converter.h" | 8 #include "gin/converter.h" |
9 #include "ppapi/shared_impl/ppapi_globals.h" | 9 #include "ppapi/shared_impl/ppapi_globals.h" |
10 #include "ppapi/shared_impl/var_tracker.h" | 10 #include "ppapi/shared_impl/var_tracker.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
63 | 63 |
64 PepperTryCatchV8::PepperTryCatchV8( | 64 PepperTryCatchV8::PepperTryCatchV8( |
65 PepperPluginInstanceImpl* instance, | 65 PepperPluginInstanceImpl* instance, |
66 V8VarConverter::AllowObjectVars convert_objects, | 66 V8VarConverter::AllowObjectVars convert_objects, |
67 v8::Isolate* isolate) | 67 v8::Isolate* isolate) |
68 : PepperTryCatch(instance, convert_objects), | 68 : PepperTryCatch(instance, convert_objects), |
69 exception_(PP_MakeUndefined()) { | 69 exception_(PP_MakeUndefined()) { |
70 // Typically when using PepperTryCatchV8 we are passed an isolate. We verify | 70 // Typically when using PepperTryCatchV8 we are passed an isolate. We verify |
71 // that this isolate is the same as the plugin isolate. | 71 // that this isolate is the same as the plugin isolate. |
72 DCHECK(isolate == instance_->GetIsolate()); | 72 DCHECK(isolate == instance_->GetIsolate()); |
73 // We assume we are already in the plugin context for PepperTryCatchV8. | 73 |
74 DCHECK(GetContext() == isolate->GetCurrentContext()); | 74 // We switch to the plugin context. We may be in a different context if we |
75 // called into the plugin from a frame that differs from the plugin's frame. | |
dmichael (off chromium)
2014/09/09 21:38:06
d'oh...
I don't think this is the right thing to
| |
76 v8::Handle<v8::Context> context = GetContext(); | |
77 if (!context.IsEmpty()) | |
78 context->Enter(); | |
75 } | 79 } |
76 | 80 |
77 PepperTryCatchV8::~PepperTryCatchV8() { | 81 PepperTryCatchV8::~PepperTryCatchV8() { |
82 v8::Handle<v8::Context> context = GetContext(); | |
83 if (!context.IsEmpty()) | |
84 context->Exit(); | |
85 | |
78 ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(exception_); | 86 ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(exception_); |
79 } | 87 } |
80 | 88 |
81 bool PepperTryCatchV8::HasException() { | 89 bool PepperTryCatchV8::HasException() { |
82 return GetContext().IsEmpty() || exception_.type != PP_VARTYPE_UNDEFINED; | 90 return GetContext().IsEmpty() || exception_.type != PP_VARTYPE_UNDEFINED; |
83 } | 91 } |
84 | 92 |
85 bool PepperTryCatchV8::ThrowException() { | 93 bool PepperTryCatchV8::ThrowException() { |
86 if (!HasException()) | 94 if (!HasException()) |
87 return false; | 95 return false; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
159 if (exception_is_set_) { | 167 if (exception_is_set_) { |
160 NOTREACHED(); | 168 NOTREACHED(); |
161 return; | 169 return; |
162 } | 170 } |
163 if (exception_) | 171 if (exception_) |
164 *exception_ = ppapi::StringVar::StringToPPVar(message, strlen(message)); | 172 *exception_ = ppapi::StringVar::StringToPPVar(message, strlen(message)); |
165 exception_is_set_ = true; | 173 exception_is_set_ = true; |
166 } | 174 } |
167 | 175 |
168 } // namespace content | 176 } // namespace content |
OLD | NEW |