Index: third_party/WebKit/Source/bindings/core/v8/V8BindingForCore.h |
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8BindingForCore.h b/third_party/WebKit/Source/bindings/core/v8/V8BindingForCore.h |
index a5433d25adaa8db5013332de1ea20bb8d19c1c55..a8bdd423856eeaedc604926c1c1dea938ef031e1 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8BindingForCore.h |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8BindingForCore.h |
@@ -40,6 +40,7 @@ |
#include "bindings/core/v8/ScriptState.h" |
#include "bindings/core/v8/ScriptValue.h" |
#include "bindings/core/v8/ScriptWrappable.h" |
+#include "bindings/core/v8/ToV8ForCore.h" |
#include "bindings/core/v8/V8Binding.h" |
#include "bindings/core/v8/V8BindingMacros.h" |
#include "bindings/core/v8/V8PerIsolateData.h" |
@@ -49,6 +50,7 @@ |
#include "bindings/core/v8/V8ValueCache.h" |
#include "core/CoreExport.h" |
#include "core/dom/ArrayBufferViewHelpers.h" |
+#include "core/dom/Node.h" |
#include "platform/heap/Handle.h" |
#include "platform/wtf/text/AtomicString.h" |
#include "platform/wtf/text/StringView.h" |
@@ -63,6 +65,7 @@ namespace blink { |
class DOMWindow; |
class EventListener; |
+class EventTarget; |
class ExceptionState; |
class ExecutionContext; |
class FlexibleArrayBufferView; |
@@ -72,6 +75,88 @@ class LocalFrame; |
class NodeFilter; |
class XPathNSResolver; |
+template <typename CallbackInfo> |
+inline void V8SetReturnValue(const CallbackInfo& callback_info, |
+ DOMWindow* impl) { |
+ V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(), |
+ callback_info.GetIsolate())); |
+} |
+ |
+template <typename CallbackInfo> |
+inline void V8SetReturnValue(const CallbackInfo& callback_info, |
+ EventTarget* impl) { |
+ V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(), |
+ callback_info.GetIsolate())); |
+} |
+ |
+template <typename CallbackInfo> |
+inline void V8SetReturnValue(const CallbackInfo& callback_info, Node* impl) { |
+ V8SetReturnValue(callback_info, static_cast<ScriptWrappable*>(impl)); |
+} |
+ |
+template <typename CallbackInfo> |
+inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info, |
+ DOMWindow* impl) { |
+ V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(), |
+ callback_info.GetIsolate())); |
+} |
+ |
+template <typename CallbackInfo> |
+inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info, |
+ EventTarget* impl) { |
+ V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(), |
+ callback_info.GetIsolate())); |
+} |
+ |
+template <typename CallbackInfo> |
+inline void V8SetReturnValueForMainWorld(const CallbackInfo& callback_info, |
+ Node* impl) { |
+ // Since EventTarget has a special version of ToV8 and V8EventTarget.h |
+ // defines its own v8SetReturnValue family, which are slow, we need to |
+ // override them with optimized versions for Node and its subclasses. |
+ // Without this overload, V8SetReturnValueForMainWorld for Node would be |
+ // very slow. |
+ // |
+ // class hierarchy: |
+ // ScriptWrappable <-- EventTarget <--+-- Node <-- ... |
+ // +-- Window |
+ // overloads: |
+ // V8SetReturnValueForMainWorld(ScriptWrappable*) |
+ // Optimized and very fast. |
+ // V8SetReturnValueForMainWorld(EventTarget*) |
+ // Uses custom ToV8 function and slow. |
+ // V8SetReturnValueForMainWorld(Node*) |
+ // Optimized and very fast. |
+ // V8SetReturnValueForMainWorld(Window*) |
+ // Uses custom ToV8 function and slow. |
+ V8SetReturnValueForMainWorld(callback_info, |
+ static_cast<ScriptWrappable*>(impl)); |
+} |
+ |
+template <typename CallbackInfo> |
+inline void V8SetReturnValueFast(const CallbackInfo& callback_info, |
+ DOMWindow* impl, |
+ const ScriptWrappable*) { |
+ V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(), |
+ callback_info.GetIsolate())); |
+} |
+ |
+template <typename CallbackInfo> |
+inline void V8SetReturnValueFast(const CallbackInfo& callback_info, |
+ EventTarget* impl, |
+ const ScriptWrappable*) { |
+ V8SetReturnValue(callback_info, ToV8(impl, callback_info.Holder(), |
+ callback_info.GetIsolate())); |
+} |
+ |
+template <typename CallbackInfo> |
+inline void V8SetReturnValueFast(const CallbackInfo& callback_info, |
+ Node* impl, |
+ const ScriptWrappable* wrappable) { |
+ V8SetReturnValueFast(callback_info, static_cast<ScriptWrappable*>(impl), |
+ wrappable); |
+} |
+ |
template <typename CallbackInfo, typename T> |
inline void V8SetReturnValue(const CallbackInfo& callbackInfo, |
NotShared<T> notShared) { |