| Index: extensions/renderer/api_binding_hooks.cc
|
| diff --git a/extensions/renderer/api_binding_hooks.cc b/extensions/renderer/api_binding_hooks.cc
|
| index b46d785946a98b941d75f6c3d1cab2716160ecaf..c4bc12c42ccd07ca1ad15c64c43003480d421830 100644
|
| --- a/extensions/renderer/api_binding_hooks.cc
|
| +++ b/extensions/renderer/api_binding_hooks.cc
|
| @@ -164,6 +164,11 @@ v8::Local<v8::Object> GetJSHookInterfaceObject(
|
|
|
| } // namespace
|
|
|
| +APIBindingHooks::RequestResult::RequestResult(ResultCode code) : code(code) {}
|
| +APIBindingHooks::RequestResult::~RequestResult() {}
|
| +APIBindingHooks::RequestResult::RequestResult(const RequestResult& other) =
|
| + default;
|
| +
|
| APIBindingHooks::APIBindingHooks(const binding::RunJSFunctionSync& run_js)
|
| : run_js_(run_js) {}
|
| APIBindingHooks::~APIBindingHooks() {}
|
| @@ -195,7 +200,7 @@ APIBindingHooks::RequestResult APIBindingHooks::HandleRequest(
|
| signature, context, arguments, type_refs);
|
| // Right now, it doesn't make sense to register a request handler that
|
| // doesn't handle the request.
|
| - DCHECK_NE(RequestResult::NOT_HANDLED, result);
|
| + DCHECK_NE(RequestResult::NOT_HANDLED, result.code);
|
| return result;
|
| }
|
|
|
| @@ -204,7 +209,7 @@ APIBindingHooks::RequestResult APIBindingHooks::HandleRequest(
|
| v8::Local<v8::Object> hook_interface_object =
|
| GetJSHookInterfaceObject(api_name, context, false);
|
| if (hook_interface_object.IsEmpty())
|
| - return RequestResult::NOT_HANDLED;
|
| + return RequestResult(RequestResult::NOT_HANDLED);
|
|
|
| v8::Isolate* isolate = context->GetIsolate();
|
|
|
| @@ -223,7 +228,7 @@ APIBindingHooks::RequestResult APIBindingHooks::HandleRequest(
|
| UpdateArguments(pre_validate_hook, context, arguments);
|
| if (try_catch.HasCaught()) {
|
| try_catch.ReThrow();
|
| - return RequestResult::THROWN;
|
| + return RequestResult(RequestResult::THROWN);
|
| }
|
| }
|
|
|
| @@ -237,17 +242,25 @@ APIBindingHooks::RequestResult APIBindingHooks::HandleRequest(
|
| &parsed_v8_args, &error);
|
| if (try_catch.HasCaught()) {
|
| try_catch.ReThrow();
|
| - return RequestResult::THROWN;
|
| + return RequestResult(RequestResult::THROWN);
|
| }
|
| if (!success)
|
| - return RequestResult::INVALID_INVOCATION;
|
| + return RequestResult(RequestResult::INVALID_INVOCATION);
|
|
|
| - run_js_.Run(handle_request, context, parsed_v8_args.size(),
|
| - parsed_v8_args.data());
|
| - return RequestResult::HANDLED;
|
| + v8::Global<v8::Value> global_result =
|
| + run_js_.Run(handle_request, context, parsed_v8_args.size(),
|
| + parsed_v8_args.data());
|
| + if (try_catch.HasCaught()) {
|
| + try_catch.ReThrow();
|
| + return RequestResult(RequestResult::THROWN);
|
| + }
|
| + RequestResult result(RequestResult::HANDLED);
|
| + if (!global_result.IsEmpty())
|
| + result.return_value = global_result.Get(isolate);
|
| + return result;
|
| }
|
|
|
| - return RequestResult::NOT_HANDLED;
|
| + return RequestResult(RequestResult::NOT_HANDLED);
|
| }
|
|
|
| void APIBindingHooks::InitializeInContext(
|
|
|