Index: extensions/renderer/v8_context_native_handler.cc |
diff --git a/extensions/renderer/v8_context_native_handler.cc b/extensions/renderer/v8_context_native_handler.cc |
index 6fbc8b246b37e16cfd3382bcdc24ec1f0169be5c..a1a9a4d0ac84e83884fe4aa29c2343a465aa5d8e 100644 |
--- a/extensions/renderer/v8_context_native_handler.cc |
+++ b/extensions/renderer/v8_context_native_handler.cc |
@@ -8,6 +8,7 @@ |
#include "extensions/common/features/feature.h" |
#include "extensions/renderer/dispatcher.h" |
#include "extensions/renderer/script_context.h" |
+#include "extensions/renderer/v8_maybe_helpers.h" |
namespace extensions { |
@@ -32,16 +33,18 @@ void V8ContextNativeHandler::GetAvailability( |
const v8::FunctionCallbackInfo<v8::Value>& args) { |
CHECK_EQ(args.Length(), 1); |
v8::Isolate* isolate = args.GetIsolate(); |
+ v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
std::string api_name = *v8::String::Utf8Value(args[0]); |
Feature::Availability availability = context_->GetAvailability(api_name); |
+ v8::Local<v8::String> v8_availability = |
+ ToV8String(isolate, availability.message().c_str()); |
v8::Local<v8::Object> ret = v8::Object::New(isolate); |
- ret->Set(v8::String::NewFromUtf8(isolate, "is_available"), |
- v8::Boolean::New(isolate, availability.is_available())); |
- ret->Set(v8::String::NewFromUtf8(isolate, "message"), |
- v8::String::NewFromUtf8(isolate, availability.message().c_str())); |
- ret->Set(v8::String::NewFromUtf8(isolate, "result"), |
- v8::Integer::New(isolate, availability.result())); |
+ SetProperty(context, ret, ToV8String(isolate, "is_available"), |
+ v8::Boolean::New(isolate, availability.is_available())); |
+ SetProperty(context, ret, ToV8String(isolate, "message"), v8_availability); |
+ SetProperty(context, ret, ToV8String(isolate, "result"), |
+ v8::Integer::New(isolate, availability.result())); |
args.GetReturnValue().Set(ret); |
} |
@@ -53,15 +56,19 @@ void V8ContextNativeHandler::GetModuleSystem( |
v8::Local<v8::Object>::Cast(args[0])->CreationContext(); |
ScriptContext* context = |
dispatcher_->script_context_set().GetByV8Context(v8_context); |
- args.GetReturnValue().Set(context->module_system()->NewInstance()); |
+ v8::Local<v8::Object> instance; |
+ if (context->module_system()->NewInstance().ToLocal(&instance)) |
+ args.GetReturnValue().Set(instance); |
} |
void V8ContextNativeHandler::RunWithNativesEnabledModuleSystem( |
const v8::FunctionCallbackInfo<v8::Value>& args) { |
CHECK_EQ(args.Length(), 1); |
CHECK(args[0]->IsFunction()); |
- v8::Local<v8::Value> call_with_args[] = { |
- context()->module_system()->NewInstance()}; |
+ v8::Local<v8::Object> instance; |
+ if (!context()->module_system()->NewInstance().ToLocal(&instance)) |
+ return; |
+ v8::Local<v8::Value> call_with_args[] = { instance }; |
ModuleSystem::NativesEnabledScope natives_enabled(context()->module_system()); |
context()->CallFunction(v8::Local<v8::Function>::Cast(args[0]), 1, |
call_with_args); |