Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Unified Diff: extensions/renderer/api_binding_hooks.h

Issue 2598123002: [Extensions Bindings] Add support for updateArgumentsPreValidate (Closed)
Patch Set: jbroman II Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/renderer/api_binding_hooks.h
diff --git a/extensions/renderer/api_binding_hooks.h b/extensions/renderer/api_binding_hooks.h
index ffdd1686e1eab72629bc749f30e8cda1bc261413..d6620275017e656fc0182af51f7fdc2d69d78c12 100644
--- a/extensions/renderer/api_binding_hooks.h
+++ b/extensions/renderer/api_binding_hooks.h
@@ -32,6 +32,7 @@ class APIBindingHooks {
// The result of checking for hooks to handle a request.
enum class RequestResult {
HANDLED, // A custom hook handled the request.
+ THROWN, // An exception was thrown during parsing or handling.
INVALID_INVOCATION, // The request was called with invalid arguments.
NOT_HANDLED, // The request was not handled.
};
@@ -46,10 +47,11 @@ class APIBindingHooks {
// reference to the callback themselves.
using HandleRequestHook =
base::Callback<RequestResult(const APISignature*,
- gin::Arguments*,
+ v8::Local<v8::Context> context,
+ std::vector<v8::Local<v8::Value>>*,
const ArgumentSpec::RefMap&)>;
- explicit APIBindingHooks(const binding::RunJSFunction& run_js);
+ explicit APIBindingHooks(const binding::RunJSFunctionSync& run_js);
~APIBindingHooks();
// Register a custom binding to handle requests.
@@ -72,7 +74,7 @@ class APIBindingHooks {
const std::string& method_name,
v8::Local<v8::Context> context,
const APISignature* signature,
- gin::Arguments* arguments,
+ std::vector<v8::Local<v8::Value>>* arguments,
const ArgumentSpec::RefMap& type_refs);
// Returns a JS interface that can be used to register hooks.
@@ -80,6 +82,12 @@ class APIBindingHooks {
v8::Local<v8::Context> context);
private:
+ // Updates the |arguments| by running |function| and settings arguments to the
+ // returned result.
+ bool UpdateArguments(v8::Local<v8::Function> function,
+ v8::Local<v8::Context> context,
+ std::vector<v8::Local<v8::Value>>* arguments);
+
// Whether we've tried to use any hooks associated with this object.
bool hooks_used_ = false;
@@ -93,7 +101,10 @@ class APIBindingHooks {
// to make exception stack traces more readable.
v8::Global<v8::String> js_resource_name_;
- binding::RunJSFunction run_js_;
+ // We use synchronous JS execution here because at every point we execute JS,
+ // it's in direct response to JS calling in. There should be no reason that
+ // script is disabled.
+ binding::RunJSFunctionSync run_js_;
DISALLOW_COPY_AND_ASSIGN(APIBindingHooks);
};

Powered by Google App Engine
This is Rietveld 408576698