Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: dom/events/test/clipboard/browser.toml
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const kContentFileUrl =
kBaseUrlForContent + "simple_navigator_clipboard_readText.html";
// @param aBrowser browser object of the content tab.
// @param aContentElementId the ID of the element to be tapped.
function promiseTouchTapContent(aBrowser, aContentElementId) {
return SpecialPowers.spawn(
aBrowser,
[aContentElementId],
async _contentElementId => {
await content.wrappedJSObject.waitUntilApzStable();
const contentElement = content.document.getElementById(_contentElementId);
let promise = new Promise(resolve => {
contentElement.addEventListener(
"click",
function (e) {
resolve({ x: e.screenX, y: e.screenY });
},
{ once: true }
);
});
EventUtils.synthesizeTouchAtCenter(
contentElement,
{ asyncEnabled: true },
content.window
);
return promise;
}
);
}
add_task(async function test_paste_button_position_touch() {
if (
AppConstants.platform == "macosx" &&
Services.prefs.getBoolPref("widget.macos.native-anchored-menus", false)
) {
ok(true, "Skipping test_paste_button_position_touch with native menus");
return;
}
// Ensure there's text on the clipboard.
await promiseWritingRandomTextToClipboard();
await BrowserTestUtils.withNewTab(kContentFileUrl, async function (browser) {
const pasteButtonIsShown = promisePasteButtonIsShown();
const coordsOfClickInContentRelativeToScreenInDevicePixels =
await promiseTouchTapContent(browser, "invokeReadTextOnceId");
info(
"coordsOfClickInContentRelativeToScreenInDevicePixels: " +
coordsOfClickInContentRelativeToScreenInDevicePixels.x +
", " +
coordsOfClickInContentRelativeToScreenInDevicePixels.y
);
const pasteButtonCoordsRelativeToScreenInDevicePixels =
await pasteButtonIsShown;
info(
"pasteButtonCoordsRelativeToScreenInDevicePixels: " +
pasteButtonCoordsRelativeToScreenInDevicePixels.x +
", " +
pasteButtonCoordsRelativeToScreenInDevicePixels.y
);
const mouseCoordsRelativeToScreenInDevicePixels =
getMouseCoordsRelativeToScreenInDevicePixels();
info(
"mouseCoordsRelativeToScreenInDevicePixels: " +
mouseCoordsRelativeToScreenInDevicePixels.x +
", " +
mouseCoordsRelativeToScreenInDevicePixels.y
);
// Asserting not overlapping is important; otherwise, when the
// "Paste" button is shown via a `mousedown` event, the following
// `mouseup` event could accept the "Paste" button unnoticed by the
// user.
ok(
isCloselyLeftOnTopOf(
mouseCoordsRelativeToScreenInDevicePixels,
pasteButtonCoordsRelativeToScreenInDevicePixels
),
"'Paste' button is closely left on top of the mouse pointer."
);
ok(
isCloselyLeftOnTopOf(
coordsOfClickInContentRelativeToScreenInDevicePixels,
pasteButtonCoordsRelativeToScreenInDevicePixels
),
"Coords of click in content are closely left on top of the 'Paste' button."
);
// To avoid disturbing subsequent tests.
const pasteButtonIsHidden = promisePasteButtonIsHidden();
await promiseClickPasteButton();
await pasteButtonIsHidden;
});
});