mirror of
https://github.com/microsoft/playwright.git
synced 2024-12-14 13:45:36 +03:00
feat(webkit): use NSEvents for mouse event simulation (#180)
This commit is contained in:
parent
f9d5a18d05
commit
122837113b
@ -1 +1 @@
|
|||||||
1020
|
1021
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From ced6ff2b2f1fb64dda025d0a49b9a35ef39cf61d Mon Sep 17 00:00:00 2001
|
From ba883b0572c9da4ac17e2dc3d2f772e71f103274 Mon Sep 17 00:00:00 2001
|
||||||
From: Yury Semikhatsky <yurys@chromium.org>
|
From: Pavel Feldman <pavel.feldman@gmail.com>
|
||||||
Date: Sun, 8 Dec 2019 15:09:27 -0800
|
Date: Mon, 9 Dec 2019 12:19:23 -0800
|
||||||
Subject: [PATCH xserver] chore: bootstrap
|
Subject: [PATCH] chore: bootstrap
|
||||||
|
|
||||||
---
|
---
|
||||||
Source/JavaScriptCore/CMakeLists.txt | 4 +
|
Source/JavaScriptCore/CMakeLists.txt | 4 +
|
||||||
@ -38,7 +38,6 @@ Subject: [PATCH xserver] chore: bootstrap
|
|||||||
.../NetworkProcess/NetworkProcess.messages.in | 4 +
|
.../NetworkProcess/NetworkProcess.messages.in | 4 +
|
||||||
Source/WebKit/Shared/API/c/wpe/WebKit.h | 1 +
|
Source/WebKit/Shared/API/c/wpe/WebKit.h | 1 +
|
||||||
Source/WebKit/Shared/NativeWebKeyboardEvent.h | 5 +
|
Source/WebKit/Shared/NativeWebKeyboardEvent.h | 5 +
|
||||||
Source/WebKit/Shared/NativeWebMouseEvent.h | 4 +
|
|
||||||
Source/WebKit/Shared/WebEvent.h | 6 +-
|
Source/WebKit/Shared/WebEvent.h | 6 +-
|
||||||
Source/WebKit/Shared/WebKeyboardEvent.cpp | 22 +
|
Source/WebKit/Shared/WebKeyboardEvent.cpp | 22 +
|
||||||
.../Shared/gtk/NativeWebKeyboardEventGtk.cpp | 2 +-
|
.../Shared/gtk/NativeWebKeyboardEventGtk.cpp | 2 +-
|
||||||
@ -90,8 +89,8 @@ Subject: [PATCH xserver] chore: bootstrap
|
|||||||
.../UIProcess/WebPageInspectorController.h | 22 +
|
.../UIProcess/WebPageInspectorController.h | 22 +
|
||||||
.../WebPageInspectorEmulationAgent.cpp | 48 ++
|
.../WebPageInspectorEmulationAgent.cpp | 48 ++
|
||||||
.../WebPageInspectorEmulationAgent.h | 42 ++
|
.../WebPageInspectorEmulationAgent.h | 42 ++
|
||||||
.../UIProcess/WebPageInspectorInputAgent.cpp | 235 ++++++++
|
.../UIProcess/WebPageInspectorInputAgent.cpp | 236 ++++++++
|
||||||
.../UIProcess/WebPageInspectorInputAgent.h | 54 ++
|
.../UIProcess/WebPageInspectorInputAgent.h | 57 ++
|
||||||
.../UIProcess/WebPageInspectorTargetProxy.cpp | 109 ++++
|
.../UIProcess/WebPageInspectorTargetProxy.cpp | 109 ++++
|
||||||
.../UIProcess/WebPageInspectorTargetProxy.h | 45 ++
|
.../UIProcess/WebPageInspectorTargetProxy.h | 45 ++
|
||||||
Source/WebKit/UIProcess/WebPageProxy.cpp | 20 +-
|
Source/WebKit/UIProcess/WebPageProxy.cpp | 20 +-
|
||||||
@ -107,7 +106,7 @@ Subject: [PATCH xserver] chore: bootstrap
|
|||||||
.../WebKit/UIProcess/mac/PageClientImplMac.h | 2 +
|
.../WebKit/UIProcess/mac/PageClientImplMac.h | 2 +
|
||||||
.../WebKit/UIProcess/mac/PageClientImplMac.mm | 21 +
|
.../WebKit/UIProcess/mac/PageClientImplMac.mm | 21 +
|
||||||
.../mac/WebPageInspectorEmulationAgentMac.mm | 21 +
|
.../mac/WebPageInspectorEmulationAgentMac.mm | 21 +
|
||||||
.../mac/WebPageInspectorInputAgentMac.mm | 14 +
|
.../mac/WebPageInspectorInputAgentMac.mm | 68 +++
|
||||||
.../mac/WebPageInspectorTargetProxyMac.mm | 20 +
|
.../mac/WebPageInspectorTargetProxyMac.mm | 20 +
|
||||||
.../wpe/WebPageInspectorEmulationAgentWPE.cpp | 18 +
|
.../wpe/WebPageInspectorEmulationAgentWPE.cpp | 18 +
|
||||||
.../wpe/WebPageInspectorInputAgentWPE.cpp | 76 +++
|
.../wpe/WebPageInspectorInputAgentWPE.cpp | 76 +++
|
||||||
@ -123,7 +122,7 @@ Subject: [PATCH xserver] chore: bootstrap
|
|||||||
.../mac/WK2BrowserWindowController.h | 3 +
|
.../mac/WK2BrowserWindowController.h | 3 +
|
||||||
.../mac/WK2BrowserWindowController.m | 38 +-
|
.../mac/WK2BrowserWindowController.m | 38 +-
|
||||||
Tools/MiniBrowser/wpe/main.cpp | 37 ++
|
Tools/MiniBrowser/wpe/main.cpp | 37 ++
|
||||||
119 files changed, 4855 insertions(+), 92 deletions(-)
|
118 files changed, 4909 insertions(+), 92 deletions(-)
|
||||||
create mode 100644 Source/JavaScriptCore/inspector/protocol/Browser.json
|
create mode 100644 Source/JavaScriptCore/inspector/protocol/Browser.json
|
||||||
create mode 100644 Source/JavaScriptCore/inspector/protocol/Dialog.json
|
create mode 100644 Source/JavaScriptCore/inspector/protocol/Dialog.json
|
||||||
create mode 100644 Source/JavaScriptCore/inspector/protocol/Emulation.json
|
create mode 100644 Source/JavaScriptCore/inspector/protocol/Emulation.json
|
||||||
@ -2902,21 +2901,6 @@ index 05938ef3564..b050b30281c 100644
|
|||||||
#elif PLATFORM(IOS_FAMILY)
|
#elif PLATFORM(IOS_FAMILY)
|
||||||
enum class HandledByInputMethod : bool { No, Yes };
|
enum class HandledByInputMethod : bool { No, Yes };
|
||||||
NativeWebKeyboardEvent(::WebEvent *, HandledByInputMethod);
|
NativeWebKeyboardEvent(::WebEvent *, HandledByInputMethod);
|
||||||
diff --git a/Source/WebKit/Shared/NativeWebMouseEvent.h b/Source/WebKit/Shared/NativeWebMouseEvent.h
|
|
||||||
index 0fa557e9faa..db299d91de3 100644
|
|
||||||
--- a/Source/WebKit/Shared/NativeWebMouseEvent.h
|
|
||||||
+++ b/Source/WebKit/Shared/NativeWebMouseEvent.h
|
|
||||||
@@ -56,6 +56,10 @@ namespace WebKit {
|
|
||||||
|
|
||||||
class NativeWebMouseEvent : public WebMouseEvent {
|
|
||||||
public:
|
|
||||||
+ NativeWebMouseEvent(Type type, Button button, unsigned short buttons, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, float deltaX, float deltaY, float deltaZ, int clickCount, OptionSet<Modifier> modifiers, WallTime timestamp)
|
|
||||||
+ : WebMouseEvent(type, button, buttons, position, globalPosition, deltaX, deltaY, deltaZ, clickCount, modifiers, timestamp)
|
|
||||||
+ {
|
|
||||||
+ }
|
|
||||||
#if USE(APPKIT)
|
|
||||||
NativeWebMouseEvent(NSEvent *, NSEvent *lastPressureEvent, NSView *);
|
|
||||||
#elif PLATFORM(GTK)
|
|
||||||
diff --git a/Source/WebKit/Shared/WebEvent.h b/Source/WebKit/Shared/WebEvent.h
|
diff --git a/Source/WebKit/Shared/WebEvent.h b/Source/WebKit/Shared/WebEvent.h
|
||||||
index f77a16bef13..73f99282f08 100644
|
index f77a16bef13..73f99282f08 100644
|
||||||
--- a/Source/WebKit/Shared/WebEvent.h
|
--- a/Source/WebKit/Shared/WebEvent.h
|
||||||
@ -5293,10 +5277,10 @@ index 00000000000..0025b0be853
|
|||||||
+} // 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 00000000000..6bd5242c9c2
|
index 00000000000..276f3da57fa
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.cpp
|
+++ b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.cpp
|
||||||
@@ -0,0 +1,235 @@
|
@@ -0,0 +1,236 @@
|
||||||
+// Copyright (c) Microsoft Corporation.
|
+// Copyright (c) Microsoft Corporation.
|
||||||
+// Licensed under the MIT license.
|
+// Licensed under the MIT license.
|
||||||
+
|
+
|
||||||
@ -5508,8 +5492,9 @@ index 00000000000..6bd5242c9c2
|
|||||||
+ m_inputObserver->addMouseCallback(WTFMove(callback));
|
+ m_inputObserver->addMouseCallback(WTFMove(callback));
|
||||||
+#if PLATFORM(WPE)
|
+#if PLATFORM(WPE)
|
||||||
+ platformDispatchMouseEvent(type, in_x, in_y, button, modifiers);
|
+ platformDispatchMouseEvent(type, in_x, in_y, button, modifiers);
|
||||||
+#elif PLATFORM(GTK) || PLATFORM(MAC)
|
+#elif PLATFORM(MAC)
|
||||||
+ WallTime timestamp = WallTime::now();
|
+ platformDispatchMouseEvent(in_type, in_x, in_y, opt_in_modifiers, opt_in_button, opt_in_clickCount);
|
||||||
|
+#elif PLATFORM(GTK)
|
||||||
+ NativeWebMouseEvent event(
|
+ NativeWebMouseEvent event(
|
||||||
+ type,
|
+ type,
|
||||||
+ button,
|
+ button,
|
||||||
@ -5534,10 +5519,10 @@ index 00000000000..6bd5242c9c2
|
|||||||
+} // 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 00000000000..36531345add
|
index 00000000000..5804c52add6
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.h
|
+++ b/Source/WebKit/UIProcess/WebPageInspectorInputAgent.h
|
||||||
@@ -0,0 +1,54 @@
|
@@ -0,0 +1,57 @@
|
||||||
+// Copyright (c) Microsoft Corporation.
|
+// Copyright (c) Microsoft Corporation.
|
||||||
+// Licensed under the MIT license.
|
+// Licensed under the MIT license.
|
||||||
+
|
+
|
||||||
@ -5581,6 +5566,9 @@ index 00000000000..36531345add
|
|||||||
+#if PLATFORM(WPE)
|
+#if PLATFORM(WPE)
|
||||||
+ void platformDispatchMouseEvent(WebMouseEvent::Type type, int x, int y, WebMouseEvent::Button button, OptionSet<WebEvent::Modifier> modifiers);
|
+ void platformDispatchMouseEvent(WebMouseEvent::Type type, int x, int y, WebMouseEvent::Button button, OptionSet<WebEvent::Modifier> modifiers);
|
||||||
+#endif
|
+#endif
|
||||||
|
+#if PLATFORM(MAC)
|
||||||
|
+ void platformDispatchMouseEvent(const String& type, int x, int y, const int* modifier, const String* button, const int* clickCount);
|
||||||
|
+#endif
|
||||||
+
|
+
|
||||||
+ Ref<Inspector::InputBackendDispatcher> m_backendDispatcher;
|
+ Ref<Inspector::InputBackendDispatcher> m_backendDispatcher;
|
||||||
+ WebPageProxy& m_page;
|
+ WebPageProxy& m_page;
|
||||||
@ -6432,18 +6420,72 @@ index 00000000000..d364ca6d955
|
|||||||
+} // namespace WebKit
|
+} // namespace WebKit
|
||||||
diff --git a/Source/WebKit/UIProcess/mac/WebPageInspectorInputAgentMac.mm b/Source/WebKit/UIProcess/mac/WebPageInspectorInputAgentMac.mm
|
diff --git a/Source/WebKit/UIProcess/mac/WebPageInspectorInputAgentMac.mm b/Source/WebKit/UIProcess/mac/WebPageInspectorInputAgentMac.mm
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..7ce9b71b0fb
|
index 00000000000..9ce6d7bec29
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/Source/WebKit/UIProcess/mac/WebPageInspectorInputAgentMac.mm
|
+++ b/Source/WebKit/UIProcess/mac/WebPageInspectorInputAgentMac.mm
|
||||||
@@ -0,0 +1,14 @@
|
@@ -0,0 +1,68 @@
|
||||||
+// Copyright (c) Microsoft Corporation.
|
+// Copyright (c) Microsoft Corporation.
|
||||||
+// Licensed under the MIT license.
|
+// Licensed under the MIT license.
|
||||||
+
|
+
|
||||||
+#include "config.h"
|
+#import "config.h"
|
||||||
+#include "WebPageInspectorInputAgent.h"
|
+#import "NativeWebMouseEvent.h"
|
||||||
|
+#import "WebPageInspectorInputAgent.h"
|
||||||
|
+#import "WebPageProxy.h"
|
||||||
|
+#import <WebCore/IntPoint.h>
|
||||||
|
+#import <WebCore/IntSize.h>
|
||||||
+
|
+
|
||||||
+namespace WebKit {
|
+namespace WebKit {
|
||||||
+
|
+
|
||||||
|
+using namespace WebCore;
|
||||||
|
+
|
||||||
|
+void WebPageInspectorInputAgent::platformDispatchMouseEvent(const String& type, int x, int y, const int* optionalModifiers, const String* button, const int* optionalClickCount) {
|
||||||
|
+ IntPoint locationInWindow(x, y);
|
||||||
|
+
|
||||||
|
+ NSEventModifierFlags modifiers = optionalModifiers ? *optionalModifiers : 0;
|
||||||
|
+ int clickCount = optionalClickCount ? *optionalClickCount : 0;
|
||||||
|
+
|
||||||
|
+ NSTimeInterval timestamp = [NSDate timeIntervalSinceReferenceDate];
|
||||||
|
+ NSWindow *window = m_page.platformWindow();
|
||||||
|
+ NSInteger windowNumber = window.windowNumber;
|
||||||
|
+
|
||||||
|
+ NSEventType downEventType = (NSEventType)0;
|
||||||
|
+ NSEventType dragEventType = (NSEventType)0;
|
||||||
|
+ NSEventType upEventType = (NSEventType)0;
|
||||||
|
+
|
||||||
|
+ if (!button || *button == "none") {
|
||||||
|
+ downEventType = NSEventTypeMouseMoved;
|
||||||
|
+ dragEventType = NSEventTypeMouseMoved;
|
||||||
|
+ upEventType = NSEventTypeMouseMoved;
|
||||||
|
+ } else if (*button == "left") {
|
||||||
|
+ downEventType = NSEventTypeLeftMouseDown;
|
||||||
|
+ dragEventType = NSEventTypeLeftMouseDragged;
|
||||||
|
+ upEventType = NSEventTypeLeftMouseUp;
|
||||||
|
+ } else if (*button == "middle") {
|
||||||
|
+ downEventType = NSEventTypeOtherMouseDown;
|
||||||
|
+ dragEventType = NSEventTypeLeftMouseDragged;
|
||||||
|
+ upEventType = NSEventTypeOtherMouseUp;
|
||||||
|
+ } else if (*button == "right") {
|
||||||
|
+ downEventType = NSEventTypeRightMouseDown;
|
||||||
|
+ upEventType = NSEventTypeRightMouseUp;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ NSInteger eventNumber = 0;
|
||||||
|
+
|
||||||
|
+ NSEvent* event = nil;
|
||||||
|
+ if (type == "move") {
|
||||||
|
+ event = [NSEvent mouseEventWithType:dragEventType location:locationInWindow modifierFlags:modifiers timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:eventNumber clickCount:clickCount pressure:0.0f];
|
||||||
|
+ } else if (type == "down") {
|
||||||
|
+ event = [NSEvent mouseEventWithType:downEventType location:locationInWindow modifierFlags:modifiers timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:eventNumber clickCount:clickCount pressure:WebCore::ForceAtClick];
|
||||||
|
+ } else if (type == "up") {
|
||||||
|
+ event = [NSEvent mouseEventWithType:upEventType location:locationInWindow modifierFlags:modifiers timestamp:timestamp windowNumber:windowNumber context:nil eventNumber:eventNumber clickCount:clickCount pressure:0.0f];
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (event) {
|
||||||
|
+ NativeWebMouseEvent nativeEvent(event, nil, [window contentView]);
|
||||||
|
+ m_page.handleMouseEvent(nativeEvent);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
+void WebPageInspectorInputAgent::platformDispatchKeyEvent(WebKeyboardEvent::Type type, const String& text, const String& unmodifiedText, const String& key, const String& code, int windowsVirtualKeyCode, int nativeVirtualKeyCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, OptionSet<WebEvent::Modifier> modifiers, WallTime timestamp)
|
+void WebPageInspectorInputAgent::platformDispatchKeyEvent(WebKeyboardEvent::Type type, const String& text, const String& unmodifiedText, const String& key, const String& code, int windowsVirtualKeyCode, int nativeVirtualKeyCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, OptionSet<WebEvent::Modifier> modifiers, WallTime timestamp)
|
||||||
+{
|
+{
|
||||||
+ fprintf(stderr, "Mac does not support dispatching key events");
|
+ fprintf(stderr, "Mac does not support dispatching key events");
|
||||||
@ -7455,5 +7497,5 @@ index 2d183d39412..d94d4f06fc5 100644
|
|||||||
webkit_web_context_set_tls_errors_policy(webContext, WEBKIT_TLS_ERRORS_POLICY_IGNORE);
|
webkit_web_context_set_tls_errors_policy(webContext, WEBKIT_TLS_ERRORS_POLICY_IGNORE);
|
||||||
|
|
||||||
--
|
--
|
||||||
2.17.1
|
2.24.0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user