| 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);
|
|
|