diff --git a/devtools/server/actors/emulation/touch-simulator.js b/devtools/server/actors/emulation/touch-simulator.js index 0eeb9c474d4f..dbbc5adb1778 100644 --- a/devtools/server/actors/emulation/touch-simulator.js +++ b/devtools/server/actors/emulation/touch-simulator.js @@ -276,6 +276,8 @@ TouchSimulator.prototype = { this.getContent(evt.target), evt.clientX, evt.clientY, + evt.screenX, + evt.screenY, type ); } @@ -307,7 +309,7 @@ TouchSimulator.prototype = { }, /** - * Synthesizes a native tap gesture on a given target element. The `x` and `y` values + * Synthesizes a native touch action on a given target element. The `x` and `y` values * passed to this function should be relative to the layout viewport (what is returned * by `MouseEvent.clientX/clientY`) and are reported in CSS pixels. * @@ -317,59 +319,24 @@ TouchSimulator.prototype = { * The `x` CSS coordinate relative to the layout viewport. * @param {Number} y * The `y` CSS coordinate relative to the layout viewport. + * @param {Number} screenX + * The `x` screen coordinate relative to the screen origin. + * @param {Number} screenY + * The `y` screen coordinate relative to the screen origin. + * @param {String} type + * A key appearing in the TOUCH_STATES associative array. */ - synthesizeNativeTap(win, x, y) { - const pt = this.coordinatesRelativeToScreen(win, x, y); + synthesizeNativeTouch(win, x, y, screenX, screenY, type) { + // Native events work in device pixels, so calculate device coordinates from + // the screen coordinates. const utils = win.windowUtils; + const deviceScale = utils.screenPixelsPerCSSPixelNoOverride; + const pt = { x: screenX * deviceScale, y: screenY * deviceScale }; - // Bug 1619402: RDM has issues with full-zoom + resolution handling. Knowing this, - // it's possible the pt.x and pt.y values passed here will result in incorrect - // behavior when attempting to perform a native touch gesture. However, we know - // that setting the full-zoom to 100% will produce expected behavior. So let's - // leave this note here and revisit when this issue gets resolved. - utils.sendNativeTouchTap(pt.x, pt.y, false, null); - return true; - }, - - synthesizeNativeTouch(win, x, y, type) { - const pt = this.coordinatesRelativeToScreen(win, x, y); - const utils = win.windowUtils; utils.sendNativeTouchPoint(0, TOUCH_STATES[type], pt.x, pt.y, 1, 90, null); return true; }, - /** - * Calculates the given CSS coordinates into global screen coordinates, which are - * reported in device pixels. - * - * @param {Window} win - * The target window. - * @param {Number} x - * The `x` CSS coordinate relative to the layout viewport. - * @param {Number} y - * The `y` CSS coordinate relative to the layout viewport. - * - * @returns {Object} the `x` and `y` global screen coordinattes. - */ - coordinatesRelativeToScreen(win, x, y) { - const utils = win.windowUtils; - // Bug 1617741: Ignore RDM's override DPR. The physical size of content displayed - // in RDM is not scaled to the override DPR, so a workaround is to use the device - // scale of the physical device when calculating the cordinates. - const deviceScale = utils.screenPixelsPerCSSPixelNoOverride; - - const resolution = utils.getResolution(); - const offsetX = {}; - const offsetY = {}; - - utils.getVisualViewportOffsetRelativeToLayoutViewport(offsetX, offsetY); - - return { - x: (win.mozInnerScreenX + (x - offsetX.value) * resolution) * deviceScale, - y: (win.mozInnerScreenY + (y - offsetY.value) * resolution) * deviceScale, - }; - }, - sendTouchEvent(evt, target, name) { const win = target.ownerGlobal; const content = this.getContent(target);