| 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 "content/renderer/pepper/v8_var_converter.h" | 8 #include "content/renderer/pepper/v8_var_converter.h" |
| 9 #include "gin/converter.h" | 9 #include "gin/converter.h" |
| 10 #include "ppapi/shared_impl/ppapi_globals.h" | 10 #include "ppapi/shared_impl/ppapi_globals.h" |
| 11 #include "ppapi/shared_impl/var_tracker.h" | 11 #include "ppapi/shared_impl/var_tracker.h" |
| 12 | 12 |
| 13 namespace content { | 13 namespace content { |
| 14 | 14 |
| 15 namespace { | 15 namespace { |
| 16 | 16 |
| 17 const char kConversionException[] = | 17 const char kConversionException[] = |
| 18 "Error: Failed conversion between PP_Var and V8 value"; | 18 "Error: Failed conversion between PP_Var and V8 value"; |
| 19 const char kInvalidException[] = "Error: An invalid exception was thrown."; | 19 const char kInvalidException[] = "Error: An invalid exception was thrown."; |
| 20 | 20 |
| 21 } // namespace | 21 } // namespace |
| 22 | 22 |
| 23 PepperTryCatch::PepperTryCatch(PepperPluginInstanceImpl* instance, | 23 PepperTryCatch::PepperTryCatch(PepperPluginInstanceImpl* instance, |
| 24 V8VarConverter* var_converter) | 24 V8VarConverter* var_converter) |
| 25 : instance_(instance), var_converter_(var_converter) {} | 25 : instance_(instance), var_converter_(var_converter) {} |
| 26 | 26 |
| 27 PepperTryCatch::~PepperTryCatch() {} | 27 PepperTryCatch::~PepperTryCatch() {} |
| 28 | 28 |
| 29 v8::Handle<v8::Value> PepperTryCatch::ToV8(PP_Var var) { | 29 v8::Local<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::Local<v8::Value>(); |
| 33 } | 33 } |
| 34 | 34 |
| 35 v8::Handle<v8::Value> result; | 35 v8::Local<v8::Value> result; |
| 36 bool success = var_converter_->ToV8Value(var, GetContext(), &result); | 36 bool success = var_converter_->ToV8Value(var, GetContext(), &result); |
| 37 if (!success) { | 37 if (!success) { |
| 38 SetException(kConversionException); | 38 SetException(kConversionException); |
| 39 return v8::Handle<v8::Value>(); | 39 return v8::Local<v8::Value>(); |
| 40 } | 40 } |
| 41 return result; | 41 return result; |
| 42 } | 42 } |
| 43 | 43 |
| 44 ppapi::ScopedPPVar PepperTryCatch::FromV8(v8::Handle<v8::Value> v8_value) { | 44 ppapi::ScopedPPVar PepperTryCatch::FromV8(v8::Local<v8::Value> v8_value) { |
| 45 if (HasException() || v8_value.IsEmpty()) { | 45 if (HasException() || v8_value.IsEmpty()) { |
| 46 SetException(kConversionException); | 46 SetException(kConversionException); |
| 47 return ppapi::ScopedPPVar(); | 47 return ppapi::ScopedPPVar(); |
| 48 } | 48 } |
| 49 ppapi::ScopedPPVar result; | 49 ppapi::ScopedPPVar result; |
| 50 bool success = | 50 bool success = |
| 51 var_converter_->FromV8ValueSync(v8_value, GetContext(), &result); | 51 var_converter_->FromV8ValueSync(v8_value, GetContext(), &result); |
| 52 if (!success) { | 52 if (!success) { |
| 53 SetException(kConversionException); | 53 SetException(kConversionException); |
| 54 return ppapi::ScopedPPVar(); | 54 return ppapi::ScopedPPVar(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 72 } | 72 } |
| 73 | 73 |
| 74 PepperTryCatchV8::~PepperTryCatchV8() { | 74 PepperTryCatchV8::~PepperTryCatchV8() { |
| 75 ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(exception_); | 75 ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(exception_); |
| 76 } | 76 } |
| 77 | 77 |
| 78 bool PepperTryCatchV8::HasException() { | 78 bool PepperTryCatchV8::HasException() { |
| 79 return GetContext().IsEmpty() || exception_.type != PP_VARTYPE_UNDEFINED; | 79 return GetContext().IsEmpty() || exception_.type != PP_VARTYPE_UNDEFINED; |
| 80 } | 80 } |
| 81 | 81 |
| 82 v8::Handle<v8::Context> PepperTryCatchV8::GetContext() { | 82 v8::Local<v8::Context> PepperTryCatchV8::GetContext() { |
| 83 // When calling from JS into the plugin always use the current context. | 83 // When calling from JS into the plugin always use the current context. |
| 84 return instance_->GetIsolate()->GetCurrentContext(); | 84 return instance_->GetIsolate()->GetCurrentContext(); |
| 85 } | 85 } |
| 86 | 86 |
| 87 bool PepperTryCatchV8::ThrowException() { | 87 bool PepperTryCatchV8::ThrowException() { |
| 88 if (!HasException()) | 88 if (!HasException()) |
| 89 return false; | 89 return false; |
| 90 | 90 |
| 91 // If there is no context then we have an exception but we don't try to throw | 91 // If there is no context then we have an exception but we don't try to throw |
| 92 // it into v8. | 92 // it into v8. |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 | 157 |
| 158 if (!exception_message.empty()) { | 158 if (!exception_message.empty()) { |
| 159 exception_is_set_ = true; | 159 exception_is_set_ = true; |
| 160 if (exception_) | 160 if (exception_) |
| 161 *exception_ = ppapi::StringVar::StringToPPVar(exception_message); | 161 *exception_ = ppapi::StringVar::StringToPPVar(exception_message); |
| 162 } | 162 } |
| 163 | 163 |
| 164 return exception_is_set_; | 164 return exception_is_set_; |
| 165 } | 165 } |
| 166 | 166 |
| 167 v8::Handle<v8::Context> PepperTryCatchVar::GetContext() { | 167 v8::Local<v8::Context> PepperTryCatchVar::GetContext() { |
| 168 return context_; | 168 return context_; |
| 169 } | 169 } |
| 170 | 170 |
| 171 void PepperTryCatchVar::SetException(const char* message) { | 171 void PepperTryCatchVar::SetException(const char* message) { |
| 172 if (exception_is_set_) | 172 if (exception_is_set_) |
| 173 return; | 173 return; |
| 174 | 174 |
| 175 if (exception_) | 175 if (exception_) |
| 176 *exception_ = ppapi::StringVar::StringToPPVar(message, strlen(message)); | 176 *exception_ = ppapi::StringVar::StringToPPVar(message, strlen(message)); |
| 177 exception_is_set_ = true; | 177 exception_is_set_ = true; |
| 178 } | 178 } |
| 179 | 179 |
| 180 } // namespace content | 180 } // namespace content |
| OLD | NEW |