Index: third_party/WebKit/Source/bindings/core/v8/V8BindingMacros.h |
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8BindingMacros.h b/third_party/WebKit/Source/bindings/core/v8/V8BindingMacros.h |
index 3b55b06f35914fa096a57ab701b88beba9dff105..1b5bfba84b631827d893e7eb8957264f4eae9c43 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8BindingMacros.h |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8BindingMacros.h |
@@ -31,6 +31,10 @@ |
#ifndef V8BindingMacros_h |
#define V8BindingMacros_h |
+#include "bindings/core/v8/ScriptState.h" |
+#include "bindings/core/v8/ScriptValue.h" |
yhirano
2016/01/17 23:59:55
Not used?
domenic
2016/01/19 21:41:00
It turns out getExtrasExports returns a ScriptValu
|
+#include <v8.h> |
+ |
namespace blink { |
// type is an instance of class template V8StringResource<>, |
@@ -103,6 +107,30 @@ inline v8::Local<T> v8CallOrCrash(v8::MaybeLocal<T> maybeLocal) |
return maybeLocal.ToLocalChecked(); |
} |
+// These are utiltiies for calling functions added to the V8 extras binding object. |
+ |
+inline v8::MaybeLocal<v8::Value> v8CallExtraHelper(ScriptState* scriptState, const char* name, size_t numArgs, v8::Local<v8::Value>* args) |
+{ |
+ v8::Isolate* isolate = scriptState->isolate(); |
+ v8::Local<v8::Context> context = scriptState->context(); |
+ v8::Local<v8::Value> undefined = v8::Undefined(isolate); |
+ v8::Local<v8::Value> functionValue = scriptState->getFromExtrasExports(name).v8Value(); |
+ v8::Local<v8::Function> function = functionValue.As<v8::Function>(); |
+ return function->Call(context, undefined, numArgs, args); |
haraken
2016/01/16 03:54:31
We want to unify all Function::Calls into V8Script
domenic
2016/01/19 21:41:00
Done; PTAL.
|
+} |
+ |
+template <size_t N> |
+v8::MaybeLocal<v8::Value> v8CallExtra(ScriptState* scriptState, const char* name, v8::Local<v8::Value>(&args)[N]) |
+{ |
+ return v8CallExtraHelper(scriptState, name, N, args); |
+} |
+ |
+template <size_t N> |
+v8::Local<v8::Value> v8CallExtraOrCrash(ScriptState* scriptState, const char* name, v8::Local<v8::Value>(&args)[N]) |
+{ |
+ return v8CallOrCrash(v8CallExtraHelper(scriptState, name, N, args)); |
+} |
+ |
// The last "else" is to avoid dangling else problem. |
#define V8_CALL(outVariable, handle, methodCall, failureExpression) \ |
if (handle.IsEmpty() || !v8Call(handle->methodCall, outVariable)) { \ |