mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
browser(webkit): scrolling (#8421)
This commit is contained in:
parent
1155ecf29a
commit
527cdfb55b
@ -1,2 +1,2 @@
|
|||||||
1534
|
1535
|
||||||
Changed: dkolesa@igalia.com Thu Aug 19 03:58:22 AM CEST 2021
|
Changed: joel.einbinder@gmail.com Tue 24 Aug 2021 12:05:10 PM PDT
|
||||||
|
@ -697,10 +697,10 @@ index 0000000000000000000000000000000000000000..347a01b3fdd1a8277cb4104558e8bbfa
|
|||||||
+}
|
+}
|
||||||
diff --git a/Source/JavaScriptCore/inspector/protocol/Input.json b/Source/JavaScriptCore/inspector/protocol/Input.json
|
diff --git a/Source/JavaScriptCore/inspector/protocol/Input.json b/Source/JavaScriptCore/inspector/protocol/Input.json
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..587287d52fde2735cbae34a27a0f673b7e38e1a7
|
index 0000000000000000000000000000000000000000..b9ab57a2b5739ed997231399b4bd4042a0cb0935
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/Source/JavaScriptCore/inspector/protocol/Input.json
|
+++ b/Source/JavaScriptCore/inspector/protocol/Input.json
|
||||||
@@ -0,0 +1,188 @@
|
@@ -0,0 +1,223 @@
|
||||||
+{
|
+{
|
||||||
+ "domain": "Input",
|
+ "domain": "Input",
|
||||||
+ "availability": ["web"],
|
+ "availability": ["web"],
|
||||||
@ -865,6 +865,41 @@ index 0000000000000000000000000000000000000000..587287d52fde2735cbae34a27a0f673b
|
|||||||
+ ]
|
+ ]
|
||||||
+ },
|
+ },
|
||||||
+ {
|
+ {
|
||||||
|
+ "name": "dispatchWheelEvent",
|
||||||
|
+ "description": "Dispatches a wheel event to the page.",
|
||||||
|
+ "async": true,
|
||||||
|
+ "parameters": [
|
||||||
|
+ {
|
||||||
|
+ "name": "x",
|
||||||
|
+ "description": "X coordinate of the event relative to the main frame's viewport in CSS pixels.",
|
||||||
|
+ "type": "integer"
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
+ "name": "y",
|
||||||
|
+ "description": "Y coordinate of the event relative to the main frame's viewport in CSS pixels. 0 refers to\nthe top of the viewport and Y increases as it proceeds towards the bottom of the viewport.",
|
||||||
|
+ "type": "integer"
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
+ "name": "modifiers",
|
||||||
|
+ "description": "Bit field representing pressed modifier keys. Alt=1, Ctrl=2, Meta/Command=4, Shift=8\n(default: 0).",
|
||||||
|
+ "optional": true,
|
||||||
|
+ "type": "integer"
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
+ "name": "deltaX",
|
||||||
|
+ "description": "X delta in CSS pixels for mouse wheel event (default: 0).",
|
||||||
|
+ "optional": true,
|
||||||
|
+ "type": "integer"
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
|
+ "name": "deltaY",
|
||||||
|
+ "description": "Y delta in CSS pixels for mouse wheel event (default: 0).",
|
||||||
|
+ "optional": true,
|
||||||
|
+ "type": "integer"
|
||||||
|
+ }
|
||||||
|
+ ]
|
||||||
|
+ },
|
||||||
|
+ {
|
||||||
+ "name": "dispatchTapEvent",
|
+ "name": "dispatchTapEvent",
|
||||||
+ "description": "Dispatches a tap event to the page.",
|
+ "description": "Dispatches a tap event to the page.",
|
||||||
+ "async": true,
|
+ "async": true,
|
||||||
@ -10046,6 +10081,20 @@ index 001558dd58f4d85f360d5711caa03db33889011e..1e0898f985f1d13036d31e3e284258a3
|
|||||||
#if USE(APPKIT)
|
#if USE(APPKIT)
|
||||||
NSEvent* nativeEvent() const { return m_nativeEvent.get(); }
|
NSEvent* nativeEvent() const { return m_nativeEvent.get(); }
|
||||||
#elif PLATFORM(GTK)
|
#elif PLATFORM(GTK)
|
||||||
|
diff --git a/Source/WebKit/Shared/NativeWebWheelEvent.h b/Source/WebKit/Shared/NativeWebWheelEvent.h
|
||||||
|
index f48dc00755b6847f2c13e5f7dac652c2a91f66ea..eb9c890c52f47913a8dc7950d6d3fa1e037e5aca 100644
|
||||||
|
--- a/Source/WebKit/Shared/NativeWebWheelEvent.h
|
||||||
|
+++ b/Source/WebKit/Shared/NativeWebWheelEvent.h
|
||||||
|
@@ -67,7 +67,8 @@ public:
|
||||||
|
#elif PLATFORM(WIN)
|
||||||
|
NativeWebWheelEvent(HWND, UINT message, WPARAM, LPARAM);
|
||||||
|
#endif
|
||||||
|
-
|
||||||
|
+ NativeWebWheelEvent(const WebWheelEvent & webWheelEvent)
|
||||||
|
+ : WebWheelEvent(webWheelEvent) { }
|
||||||
|
#if USE(APPKIT)
|
||||||
|
NSEvent* nativeEvent() const { return m_nativeEvent.get(); }
|
||||||
|
#elif PLATFORM(GTK)
|
||||||
diff --git a/Source/WebKit/Shared/SandboxExtension.h b/Source/WebKit/Shared/SandboxExtension.h
|
diff --git a/Source/WebKit/Shared/SandboxExtension.h b/Source/WebKit/Shared/SandboxExtension.h
|
||||||
index c359eeaa440586fa61d3bc31def069ffcfa6e771..311cc74c62bdda4d147c221f85b3e55ed4ee481c 100644
|
index c359eeaa440586fa61d3bc31def069ffcfa6e771..311cc74c62bdda4d147c221f85b3e55ed4ee481c 100644
|
||||||
--- a/Source/WebKit/Shared/SandboxExtension.h
|
--- a/Source/WebKit/Shared/SandboxExtension.h
|
||||||
@ -16891,10 +16940,10 @@ index 0000000000000000000000000000000000000000..b3bb4880a866ee6132b8b26acf8dad81
|
|||||||
+} // namespace WebKit
|
+} // namespace WebKit
|
||||||
diff --git a/Source/WebKit/UIProcess/WebPageInspectorInputAgent.cpp b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.cpp
|
diff --git a/Source/WebKit/UIProcess/WebPageInspectorInputAgent.cpp b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.cpp
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..61d1f18d8b7ba5eda1ec1e3c7fd59f3dd90f546d
|
index 0000000000000000000000000000000000000000..64a07aecf03b294abdafec044b235c84f6fe9016
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.cpp
|
+++ b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.cpp
|
||||||
@@ -0,0 +1,288 @@
|
@@ -0,0 +1,329 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Copyright (C) 2019 Microsoft Corporation.
|
+ * Copyright (C) 2019 Microsoft Corporation.
|
||||||
+ *
|
+ *
|
||||||
@ -16925,6 +16974,8 @@ index 0000000000000000000000000000000000000000..61d1f18d8b7ba5eda1ec1e3c7fd59f3d
|
|||||||
+
|
+
|
||||||
+#include "NativeWebKeyboardEvent.h"
|
+#include "NativeWebKeyboardEvent.h"
|
||||||
+#include "NativeWebMouseEvent.h"
|
+#include "NativeWebMouseEvent.h"
|
||||||
|
+#include "NativeWebWheelEvent.h"
|
||||||
|
+#include "WebWheelEvent.h"
|
||||||
+#include "WebPageProxy.h"
|
+#include "WebPageProxy.h"
|
||||||
+#include <wtf/MathExtras.h>
|
+#include <wtf/MathExtras.h>
|
||||||
+#include <wtf/HexNumber.h>
|
+#include <wtf/HexNumber.h>
|
||||||
@ -16971,6 +17022,9 @@ index 0000000000000000000000000000000000000000..61d1f18d8b7ba5eda1ec1e3c7fd59f3d
|
|||||||
+class WebPageInspectorInputAgent::MouseCallbacks : public CallbackList<Inspector::InputBackendDispatcherHandler::DispatchMouseEventCallback> {
|
+class WebPageInspectorInputAgent::MouseCallbacks : public CallbackList<Inspector::InputBackendDispatcherHandler::DispatchMouseEventCallback> {
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
|
+class WebPageInspectorInputAgent::WheelCallbacks : public CallbackList<Inspector::InputBackendDispatcherHandler::DispatchWheelEventCallback> {
|
||||||
|
+};
|
||||||
|
+
|
||||||
+WebPageInspectorInputAgent::WebPageInspectorInputAgent(Inspector::BackendDispatcher& backendDispatcher, WebPageProxy& page)
|
+WebPageInspectorInputAgent::WebPageInspectorInputAgent(Inspector::BackendDispatcher& backendDispatcher, WebPageProxy& page)
|
||||||
+ : InspectorAgentBase("Input"_s)
|
+ : InspectorAgentBase("Input"_s)
|
||||||
+ , m_backendDispatcher(InputBackendDispatcher::create(backendDispatcher, this))
|
+ , m_backendDispatcher(InputBackendDispatcher::create(backendDispatcher, this))
|
||||||
@ -16991,16 +17045,23 @@ index 0000000000000000000000000000000000000000..61d1f18d8b7ba5eda1ec1e3c7fd59f3d
|
|||||||
+ m_mouseCallbacks->sendSuccess();
|
+ m_mouseCallbacks->sendSuccess();
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+void WebPageInspectorInputAgent::didProcessAllPendingWheelEvents()
|
||||||
|
+{
|
||||||
|
+ m_wheelCallbacks->sendSuccess();
|
||||||
|
+}
|
||||||
|
+
|
||||||
+void WebPageInspectorInputAgent::didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*)
|
+void WebPageInspectorInputAgent::didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*)
|
||||||
+{
|
+{
|
||||||
+ m_keyboardCallbacks = makeUnique<KeyboardCallbacks>();
|
+ m_keyboardCallbacks = makeUnique<KeyboardCallbacks>();
|
||||||
+ m_mouseCallbacks = makeUnique<MouseCallbacks>();
|
+ m_mouseCallbacks = makeUnique<MouseCallbacks>();
|
||||||
|
+ m_wheelCallbacks = makeUnique<WheelCallbacks>();
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+void WebPageInspectorInputAgent::willDestroyFrontendAndBackend(Inspector::DisconnectReason)
|
+void WebPageInspectorInputAgent::willDestroyFrontendAndBackend(Inspector::DisconnectReason)
|
||||||
+{
|
+{
|
||||||
+ m_keyboardCallbacks = nullptr;
|
+ m_keyboardCallbacks = nullptr;
|
||||||
+ m_mouseCallbacks = nullptr;
|
+ m_mouseCallbacks = nullptr;
|
||||||
|
+ m_wheelCallbacks = nullptr;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static String keyIdentifierForKey(const String& key)
|
+static String keyIdentifierForKey(const String& key)
|
||||||
@ -17182,13 +17243,42 @@ index 0000000000000000000000000000000000000000..61d1f18d8b7ba5eda1ec1e3c7fd59f3d
|
|||||||
+ callback->sendSuccess();
|
+ callback->sendSuccess();
|
||||||
+ });
|
+ });
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
|
+void WebPageInspectorInputAgent::dispatchWheelEvent(int x, int y, std::optional<int>&& modifiers, std::optional<int>&& deltaX, std::optional<int>&& deltaY, Ref<DispatchWheelEventCallback>&& callback)
|
||||||
|
+{
|
||||||
|
+ OptionSet<WebEvent::Modifier> eventModifiers;
|
||||||
|
+ if (modifiers)
|
||||||
|
+ eventModifiers = eventModifiers.fromRaw(*modifiers);
|
||||||
|
+
|
||||||
|
+ float eventDeltaX = 0.0f;
|
||||||
|
+ if (deltaX)
|
||||||
|
+ eventDeltaX = *deltaX;
|
||||||
|
+ float eventDeltaY = 0.0f;
|
||||||
|
+ if (deltaY)
|
||||||
|
+ eventDeltaY = *deltaY;
|
||||||
|
+ m_wheelCallbacks->append(WTFMove(callback));
|
||||||
|
+
|
||||||
|
+ // Convert css coordinates to view coordinates (dip).
|
||||||
|
+ double totalScale = m_page.pageScaleFactor() * m_page.viewScaleFactor();
|
||||||
|
+ x = clampToInteger(roundf(x * totalScale));
|
||||||
|
+ y = clampToInteger(roundf(y * totalScale));
|
||||||
|
+
|
||||||
|
+ WallTime timestamp = WallTime::now();
|
||||||
|
+ WebCore::FloatSize delta = {eventDeltaX, eventDeltaY};
|
||||||
|
+ WebCore::FloatSize wheelTicks = delta;
|
||||||
|
+ wheelTicks.scale(1.0f / WebCore::Scrollbar::pixelsPerLineStep());
|
||||||
|
+ WebWheelEvent webEvent(WebEvent::Wheel, {x, y}, {x, y}, delta, wheelTicks, WebWheelEvent::ScrollByPixelWheelEvent, eventModifiers, timestamp);
|
||||||
|
+ NativeWebWheelEvent event(webEvent);
|
||||||
|
+ m_page.handleWheelEvent(event);
|
||||||
|
+}
|
||||||
|
+
|
||||||
+} // namespace WebKit
|
+} // namespace WebKit
|
||||||
diff --git a/Source/WebKit/UIProcess/WebPageInspectorInputAgent.h b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.h
|
diff --git a/Source/WebKit/UIProcess/WebPageInspectorInputAgent.h b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000000000000000000000000000000000000..fb4855b939efdd36acd011a41244a579152bf574
|
index 0000000000000000000000000000000000000000..48c9ccc420c1b4ae3259e1d5ba17fd8fbea24b96
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.h
|
+++ b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.h
|
||||||
@@ -0,0 +1,82 @@
|
@@ -0,0 +1,86 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Copyright (C) 2019 Microsoft Corporation.
|
+ * Copyright (C) 2019 Microsoft Corporation.
|
||||||
+ *
|
+ *
|
||||||
@ -17244,6 +17334,7 @@ index 0000000000000000000000000000000000000000..fb4855b939efdd36acd011a41244a579
|
|||||||
+
|
+
|
||||||
+ void didProcessAllPendingKeyboardEvents();
|
+ void didProcessAllPendingKeyboardEvents();
|
||||||
+ void didProcessAllPendingMouseEvents();
|
+ void didProcessAllPendingMouseEvents();
|
||||||
|
+ void didProcessAllPendingWheelEvents();
|
||||||
+
|
+
|
||||||
+ void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
|
+ void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
|
||||||
+ void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
|
+ void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
|
||||||
@ -17252,6 +17343,7 @@ index 0000000000000000000000000000000000000000..fb4855b939efdd36acd011a41244a579
|
|||||||
+ void dispatchKeyEvent(const String& type, std::optional<int>&& modifiers, const String& text, const String& unmodifiedText, const String& code, const String& key, std::optional<int>&& windowsVirtualKeyCode, std::optional<int>&& nativeVirtualKeyCode, std::optional<bool>&& autoRepeat, std::optional<bool>&& isKeypad, std::optional<bool>&& isSystemKey, RefPtr<JSON::Array>&&, Ref<DispatchKeyEventCallback>&& callback) override;
|
+ void dispatchKeyEvent(const String& type, std::optional<int>&& modifiers, const String& text, const String& unmodifiedText, const String& code, const String& key, std::optional<int>&& windowsVirtualKeyCode, std::optional<int>&& nativeVirtualKeyCode, std::optional<bool>&& autoRepeat, std::optional<bool>&& isKeypad, std::optional<bool>&& isSystemKey, RefPtr<JSON::Array>&&, Ref<DispatchKeyEventCallback>&& callback) override;
|
||||||
+ void dispatchMouseEvent(const String& type, int x, int y, std::optional<int>&& modifiers, const String& button, std::optional<int>&& buttons, std::optional<int>&& clickCount, std::optional<int>&& deltaX, std::optional<int>&& deltaY, Ref<DispatchMouseEventCallback>&& callback) override;
|
+ void dispatchMouseEvent(const String& type, int x, int y, std::optional<int>&& modifiers, const String& button, std::optional<int>&& buttons, std::optional<int>&& clickCount, std::optional<int>&& deltaX, std::optional<int>&& deltaY, Ref<DispatchMouseEventCallback>&& callback) override;
|
||||||
+ void dispatchTapEvent(int x, int y, std::optional<int>&& modifiers, Ref<DispatchTapEventCallback>&& callback) override;
|
+ void dispatchTapEvent(int x, int y, std::optional<int>&& modifiers, Ref<DispatchTapEventCallback>&& callback) override;
|
||||||
|
+ void dispatchWheelEvent(int x, int y, std::optional<int>&& modifiers, std::optional<int>&& deltaX, std::optional<int>&& deltaY, Ref<DispatchWheelEventCallback>&& callback) override;
|
||||||
+
|
+
|
||||||
+private:
|
+private:
|
||||||
+ void platformDispatchKeyEvent(WebKeyboardEvent::Type type, const String& text, const String& unmodifiedText, const String& key, const String& code, const String& keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, OptionSet<WebEvent::Modifier> modifiers, Vector<String>& commands, WallTime timestamp);
|
+ void platformDispatchKeyEvent(WebKeyboardEvent::Type type, const String& text, const String& unmodifiedText, const String& key, const String& code, const String& keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, OptionSet<WebEvent::Modifier> modifiers, Vector<String>& commands, WallTime timestamp);
|
||||||
@ -17268,6 +17360,8 @@ index 0000000000000000000000000000000000000000..fb4855b939efdd36acd011a41244a579
|
|||||||
+ std::unique_ptr<KeyboardCallbacks> m_keyboardCallbacks;
|
+ std::unique_ptr<KeyboardCallbacks> m_keyboardCallbacks;
|
||||||
+ class MouseCallbacks;
|
+ class MouseCallbacks;
|
||||||
+ std::unique_ptr<MouseCallbacks> m_mouseCallbacks;
|
+ std::unique_ptr<MouseCallbacks> m_mouseCallbacks;
|
||||||
|
+ class WheelCallbacks;
|
||||||
|
+ std::unique_ptr<WheelCallbacks> m_wheelCallbacks;
|
||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+} // namespace WebKit
|
+} // namespace WebKit
|
||||||
|
Loading…
x
Reference in New Issue
Block a user