browser(firefox): Page.dispatchTapEvent (#4101)
This commit is contained in:
parent
5804131c99
commit
a4474f6752
|
|
@ -1,2 +1,2 @@
|
||||||
1189
|
1190
|
||||||
Changed: lushnikov@chromium.org Mon Oct 12 22:21:30 PDT 2020
|
Changed: joel.einbinder@gmail.com Tue 13 Oct 2020 09:08:57 AM PDT
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,7 @@ class PageAgent {
|
||||||
dispatchKeyEvent: this._dispatchKeyEvent.bind(this),
|
dispatchKeyEvent: this._dispatchKeyEvent.bind(this),
|
||||||
dispatchMouseEvent: this._dispatchMouseEvent.bind(this),
|
dispatchMouseEvent: this._dispatchMouseEvent.bind(this),
|
||||||
dispatchTouchEvent: this._dispatchTouchEvent.bind(this),
|
dispatchTouchEvent: this._dispatchTouchEvent.bind(this),
|
||||||
|
dispatchTapEvent: this._dispatchTapEvent.bind(this),
|
||||||
getBoundingBox: this._getBoundingBox.bind(this),
|
getBoundingBox: this._getBoundingBox.bind(this),
|
||||||
getContentQuads: this._getContentQuads.bind(this),
|
getContentQuads: this._getContentQuads.bind(this),
|
||||||
getFullAXTree: this._getFullAXTree.bind(this),
|
getFullAXTree: this._getFullAXTree.bind(this),
|
||||||
|
|
@ -708,6 +709,70 @@ class PageAgent {
|
||||||
return {defaultPrevented};
|
return {defaultPrevented};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _dispatchTapEvent({x, y, modifiers}) {
|
||||||
|
const {defaultPrevented: startPrevented} = await this._dispatchTouchEvent({
|
||||||
|
type: 'touchstart',
|
||||||
|
modifiers,
|
||||||
|
touchPoints: [{x, y}]
|
||||||
|
});
|
||||||
|
const {defaultPrevented: endPrevented} = await this._dispatchTouchEvent({
|
||||||
|
type: 'touchend',
|
||||||
|
modifiers,
|
||||||
|
touchPoints: [{x, y}]
|
||||||
|
});
|
||||||
|
if (startPrevented || endPrevented)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const frame = this._frameTree.mainFrame();
|
||||||
|
frame.domWindow().windowUtils.sendMouseEvent(
|
||||||
|
'mousemove',
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
0 /*button*/,
|
||||||
|
0 /*clickCount*/,
|
||||||
|
modifiers,
|
||||||
|
false /*aIgnoreRootScrollFrame*/,
|
||||||
|
undefined /*pressure*/,
|
||||||
|
5 /*inputSource*/,
|
||||||
|
undefined /*isDOMEventSynthesized*/,
|
||||||
|
false /*isWidgetEventSynthesized*/,
|
||||||
|
0 /*buttons*/,
|
||||||
|
undefined /*pointerIdentifier*/,
|
||||||
|
true /*disablePointerEvent*/);
|
||||||
|
|
||||||
|
frame.domWindow().windowUtils.sendMouseEvent(
|
||||||
|
'mousedown',
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
0 /*button*/,
|
||||||
|
1 /*clickCount*/,
|
||||||
|
modifiers,
|
||||||
|
false /*aIgnoreRootScrollFrame*/,
|
||||||
|
undefined /*pressure*/,
|
||||||
|
5 /*inputSource*/,
|
||||||
|
undefined /*isDOMEventSynthesized*/,
|
||||||
|
false /*isWidgetEventSynthesized*/,
|
||||||
|
1 /*buttons*/,
|
||||||
|
undefined /*pointerIdentifier*/,
|
||||||
|
true /*disablePointerEvent*/);
|
||||||
|
|
||||||
|
frame.domWindow().windowUtils.sendMouseEvent(
|
||||||
|
'mouseup',
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
0 /*button*/,
|
||||||
|
1 /*clickCount*/,
|
||||||
|
modifiers,
|
||||||
|
false /*aIgnoreRootScrollFrame*/,
|
||||||
|
undefined /*pressure*/,
|
||||||
|
5 /*inputSource*/,
|
||||||
|
undefined /*isDOMEventSynthesized*/,
|
||||||
|
false /*isWidgetEventSynthesized*/,
|
||||||
|
0 /*buttons*/,
|
||||||
|
undefined /*pointerIdentifier*/,
|
||||||
|
true /*disablePointerEvent*/);
|
||||||
|
}
|
||||||
|
|
||||||
_startDragSessionIfNeeded() {
|
_startDragSessionIfNeeded() {
|
||||||
const sess = dragService.getCurrentSession();
|
const sess = dragService.getCurrentSession();
|
||||||
if (sess) return;
|
if (sess) return;
|
||||||
|
|
|
||||||
|
|
@ -308,6 +308,10 @@ class PageHandler {
|
||||||
return await this._contentPage.send('dispatchTouchEvent', options);
|
return await this._contentPage.send('dispatchTouchEvent', options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async ['Page.dispatchTapEvent'](options) {
|
||||||
|
return await this._contentPage.send('dispatchTapEvent', options);
|
||||||
|
}
|
||||||
|
|
||||||
async ['Page.dispatchMouseEvent'](options) {
|
async ['Page.dispatchMouseEvent'](options) {
|
||||||
return await this._contentPage.send('dispatchMouseEvent', options);
|
return await this._contentPage.send('dispatchMouseEvent', options);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -819,6 +819,13 @@ const Page = {
|
||||||
defaultPrevented: t.Boolean,
|
defaultPrevented: t.Boolean,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'dispatchTapEvent': {
|
||||||
|
params: {
|
||||||
|
x: t.Number,
|
||||||
|
y: t.Number,
|
||||||
|
modifiers: t.Number,
|
||||||
|
}
|
||||||
|
},
|
||||||
'dispatchMouseEvent': {
|
'dispatchMouseEvent': {
|
||||||
params: {
|
params: {
|
||||||
type: t.String,
|
type: t.String,
|
||||||
|
|
|
||||||
|
|
@ -695,6 +695,91 @@ index 9e898052f8eebd8331b46b105bc8b6eeff3a2e84..994243e99814a3f8882c9fe425ecab52
|
||||||
|
|
||||||
dom::MediaCapabilities* MediaCapabilities();
|
dom::MediaCapabilities* MediaCapabilities();
|
||||||
dom::MediaSession* MediaSession();
|
dom::MediaSession* MediaSession();
|
||||||
|
diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
|
||||||
|
index dbe02dd6082c7fea5d161328d55fd003adbfe853..ba410cdc1677234665d95f6ea984b7af8b9d34d2 100644
|
||||||
|
--- a/dom/base/nsContentUtils.cpp
|
||||||
|
+++ b/dom/base/nsContentUtils.cpp
|
||||||
|
@@ -7837,7 +7837,8 @@ nsresult nsContentUtils::SendMouseEvent(
|
||||||
|
bool aIgnoreRootScrollFrame, float aPressure,
|
||||||
|
unsigned short aInputSourceArg, uint32_t aIdentifier, bool aToWindow,
|
||||||
|
bool* aPreventDefault, bool aIsDOMEventSynthesized,
|
||||||
|
- bool aIsWidgetEventSynthesized) {
|
||||||
|
+ bool aIsWidgetEventSynthesized,
|
||||||
|
+ bool convertToPointer) {
|
||||||
|
nsPoint offset;
|
||||||
|
nsCOMPtr<nsIWidget> widget = GetWidget(aPresShell, &offset);
|
||||||
|
if (!widget) return NS_ERROR_FAILURE;
|
||||||
|
@@ -7893,6 +7894,7 @@ nsresult nsContentUtils::SendMouseEvent(
|
||||||
|
event.mTime = PR_IntervalNow();
|
||||||
|
event.mFlags.mIsSynthesizedForTests = aIsDOMEventSynthesized;
|
||||||
|
event.mExitFrom = exitFrom;
|
||||||
|
+ event.convertToPointer = convertToPointer;
|
||||||
|
|
||||||
|
nsPresContext* presContext = aPresShell->GetPresContext();
|
||||||
|
if (!presContext) return NS_ERROR_FAILURE;
|
||||||
|
diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h
|
||||||
|
index f4b25288a8183ceaa92c39ba6f55ae6d91948b96..1c5645c4f4bc81d79e815d9fb0520c0b0410c8b7 100644
|
||||||
|
--- a/dom/base/nsContentUtils.h
|
||||||
|
+++ b/dom/base/nsContentUtils.h
|
||||||
|
@@ -2897,7 +2897,7 @@ class nsContentUtils {
|
||||||
|
int32_t aModifiers, bool aIgnoreRootScrollFrame, float aPressure,
|
||||||
|
unsigned short aInputSourceArg, uint32_t aIdentifier, bool aToWindow,
|
||||||
|
bool* aPreventDefault, bool aIsDOMEventSynthesized,
|
||||||
|
- bool aIsWidgetEventSynthesized);
|
||||||
|
+ bool aIsWidgetEventSynthesized, bool convertToPointer = true);
|
||||||
|
|
||||||
|
static void FirePageShowEventForFrameLoaderSwap(
|
||||||
|
nsIDocShellTreeItem* aItem,
|
||||||
|
diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp
|
||||||
|
index 657577f2bdfcacbcc2f038080a9c3bf10ed46c24..11b26095373d848862bed1d77f3b8e527de68199 100644
|
||||||
|
--- a/dom/base/nsDOMWindowUtils.cpp
|
||||||
|
+++ b/dom/base/nsDOMWindowUtils.cpp
|
||||||
|
@@ -647,7 +647,7 @@ nsDOMWindowUtils::SendMouseEvent(
|
||||||
|
int32_t aClickCount, int32_t aModifiers, bool aIgnoreRootScrollFrame,
|
||||||
|
float aPressure, unsigned short aInputSourceArg,
|
||||||
|
bool aIsDOMEventSynthesized, bool aIsWidgetEventSynthesized,
|
||||||
|
- int32_t aButtons, uint32_t aIdentifier, uint8_t aOptionalArgCount,
|
||||||
|
+ int32_t aButtons, uint32_t aIdentifier, bool aDisablePointerEvent, uint8_t aOptionalArgCount,
|
||||||
|
bool* aPreventDefault) {
|
||||||
|
return SendMouseEventCommon(
|
||||||
|
aType, aX, aY, aButton, aClickCount, aModifiers, aIgnoreRootScrollFrame,
|
||||||
|
@@ -655,7 +655,7 @@ nsDOMWindowUtils::SendMouseEvent(
|
||||||
|
aOptionalArgCount >= 7 ? aIdentifier : DEFAULT_MOUSE_POINTER_ID, false,
|
||||||
|
aPreventDefault, aOptionalArgCount >= 4 ? aIsDOMEventSynthesized : true,
|
||||||
|
aOptionalArgCount >= 5 ? aIsWidgetEventSynthesized : false,
|
||||||
|
- aOptionalArgCount >= 6 ? aButtons : MOUSE_BUTTONS_NOT_SPECIFIED);
|
||||||
|
+ aOptionalArgCount >= 6 ? aButtons : MOUSE_BUTTONS_NOT_SPECIFIED, !aDisablePointerEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
@@ -682,12 +682,12 @@ nsDOMWindowUtils::SendMouseEventCommon(
|
||||||
|
int32_t aClickCount, int32_t aModifiers, bool aIgnoreRootScrollFrame,
|
||||||
|
float aPressure, unsigned short aInputSourceArg, uint32_t aPointerId,
|
||||||
|
bool aToWindow, bool* aPreventDefault, bool aIsDOMEventSynthesized,
|
||||||
|
- bool aIsWidgetEventSynthesized, int32_t aButtons) {
|
||||||
|
+ bool aIsWidgetEventSynthesized, int32_t aButtons, bool aConvertToPointer) {
|
||||||
|
RefPtr<PresShell> presShell = GetPresShell();
|
||||||
|
return nsContentUtils::SendMouseEvent(
|
||||||
|
presShell, aType, aX, aY, aButton, aButtons, aClickCount, aModifiers,
|
||||||
|
aIgnoreRootScrollFrame, aPressure, aInputSourceArg, aPointerId, aToWindow,
|
||||||
|
- aPreventDefault, aIsDOMEventSynthesized, aIsWidgetEventSynthesized);
|
||||||
|
+ aPreventDefault, aIsDOMEventSynthesized, aIsWidgetEventSynthesized, aConvertToPointer);
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
diff --git a/dom/base/nsDOMWindowUtils.h b/dom/base/nsDOMWindowUtils.h
|
||||||
|
index 08e81b1c24a17729ec7b6c9e048c2febe57e18dc..cb09fe30de0a42c89da220e3bf8afe5f05923084 100644
|
||||||
|
--- a/dom/base/nsDOMWindowUtils.h
|
||||||
|
+++ b/dom/base/nsDOMWindowUtils.h
|
||||||
|
@@ -93,7 +93,7 @@ class nsDOMWindowUtils final : public nsIDOMWindowUtils,
|
||||||
|
int32_t aClickCount, int32_t aModifiers, bool aIgnoreRootScrollFrame,
|
||||||
|
float aPressure, unsigned short aInputSourceArg, uint32_t aIdentifier,
|
||||||
|
bool aToWindow, bool* aPreventDefault, bool aIsDOMEventSynthesized,
|
||||||
|
- bool aIsWidgetEventSynthesized, int32_t aButtons);
|
||||||
|
+ bool aIsWidgetEventSynthesized, int32_t aButtons, bool aConvertToPointer = true);
|
||||||
|
|
||||||
|
MOZ_CAN_RUN_SCRIPT
|
||||||
|
nsresult SendTouchEventCommon(
|
||||||
diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp
|
diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp
|
||||||
index 264b2509a71d85124079f6855c5ac19ce72082ef..3c45db6ad2151bc1454a5b1eb570774c81a2c7d8 100644
|
index 264b2509a71d85124079f6855c5ac19ce72082ef..3c45db6ad2151bc1454a5b1eb570774c81a2c7d8 100644
|
||||||
--- a/dom/base/nsFocusManager.cpp
|
--- a/dom/base/nsFocusManager.cpp
|
||||||
|
|
@ -996,6 +1081,20 @@ index ad9ad3692022c7eb5e38fac5242b41943ee05dee..b2d34d4daa28a1f6ebff083452196820
|
||||||
if (IsPopupBlocked()) {
|
if (IsPopupBlocked()) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
diff --git a/dom/interfaces/base/nsIDOMWindowUtils.idl b/dom/interfaces/base/nsIDOMWindowUtils.idl
|
||||||
|
index 6728f7f4e4fbc6ace1a674bebfe179af0da087e1..e1147cb7e810c8fac743145aae10937c7fbc8f4b 100644
|
||||||
|
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
|
||||||
|
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
|
||||||
|
@@ -347,7 +347,8 @@ interface nsIDOMWindowUtils : nsISupports {
|
||||||
|
[optional] in boolean aIsDOMEventSynthesized,
|
||||||
|
[optional] in boolean aIsWidgetEventSynthesized,
|
||||||
|
[optional] in long aButtons,
|
||||||
|
- [optional] in unsigned long aIdentifier);
|
||||||
|
+ [optional] in unsigned long aIdentifier,
|
||||||
|
+ [optional] in boolean aDisablePointerEvent);
|
||||||
|
|
||||||
|
/** Synthesize a touch event. The event types supported are:
|
||||||
|
* touchstart, touchend, touchmove, and touchcancel
|
||||||
diff --git a/dom/ipc/BrowserChild.cpp b/dom/ipc/BrowserChild.cpp
|
diff --git a/dom/ipc/BrowserChild.cpp b/dom/ipc/BrowserChild.cpp
|
||||||
index bb336902d2303223d14b07cb7dbc7aba1347490b..ac37b7e8b09683d077d4467c74487b137e541ebb 100644
|
index bb336902d2303223d14b07cb7dbc7aba1347490b..ac37b7e8b09683d077d4467c74487b137e541ebb 100644
|
||||||
--- a/dom/ipc/BrowserChild.cpp
|
--- a/dom/ipc/BrowserChild.cpp
|
||||||
|
|
@ -2197,3 +2296,16 @@ index c375629d4a954f872a2abdd6983ae38dbb98f4ca..1857a4874ac9f8a3d7e402b5707a9ea5
|
||||||
private:
|
private:
|
||||||
~HeadlessWidget();
|
~HeadlessWidget();
|
||||||
bool mEnabled;
|
bool mEnabled;
|
||||||
|
diff --git a/xpcom/reflect/xptinfo/xptinfo.h b/xpcom/reflect/xptinfo/xptinfo.h
|
||||||
|
index 33b1f25411fd6a8d02edca9198054347289a1501..ee6ea48f3986a8d7c0e2f351b6d30b9fb706524e 100644
|
||||||
|
--- a/xpcom/reflect/xptinfo/xptinfo.h
|
||||||
|
+++ b/xpcom/reflect/xptinfo/xptinfo.h
|
||||||
|
@@ -513,7 +513,7 @@ static_assert(sizeof(nsXPTMethodInfo) == 8, "wrong size");
|
||||||
|
#if defined(MOZ_THUNDERBIRD) || defined(MOZ_SUITE)
|
||||||
|
# define PARAM_BUFFER_COUNT 18
|
||||||
|
#else
|
||||||
|
-# define PARAM_BUFFER_COUNT 14
|
||||||
|
+# define PARAM_BUFFER_COUNT 15
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue