106 lines
3 KiB
JavaScript
106 lines
3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const BASE = getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content",
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
"http://example.com"
|
|
);
|
|
const TEST_URL = BASE + "empty.html";
|
|
|
|
async function synthesizeKeyAndTest(aBrowser, aKey, aEvent, aIsActive) {
|
|
let promise = SpecialPowers.spawn(
|
|
aBrowser,
|
|
[aKey, aEvent, aIsActive],
|
|
async (key, event, isActive) => {
|
|
return new Promise(aResolve => {
|
|
content.document.clearUserGestureActivation();
|
|
content.document.addEventListener(
|
|
"keydown",
|
|
function (e) {
|
|
e.preventDefault();
|
|
is(
|
|
content.document.hasBeenUserGestureActivated,
|
|
isActive,
|
|
`check has-been-user-activated for ${key} with ${JSON.stringify(event)}`
|
|
);
|
|
is(
|
|
content.document.hasValidTransientUserGestureActivation,
|
|
isActive,
|
|
`check has-valid-transient-user-activation for ${key} with ${JSON.stringify(event)}`
|
|
);
|
|
aResolve();
|
|
},
|
|
{ once: true }
|
|
);
|
|
});
|
|
}
|
|
);
|
|
// Ensure the event listener has registered on the remote.
|
|
await SpecialPowers.spawn(aBrowser, [], () => {
|
|
return new Promise(resolve => {
|
|
SpecialPowers.executeSoon(resolve);
|
|
});
|
|
});
|
|
EventUtils.synthesizeKey(aKey, aEvent);
|
|
return promise;
|
|
}
|
|
|
|
let browser;
|
|
add_setup(async function setup() {
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URL);
|
|
browser = tab.linkedBrowser;
|
|
registerCleanupFunction(async () => {
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
});
|
|
|
|
add_task(async function TestPrintableKey() {
|
|
let tests = ["a", "b", "c", "A", "B", "1", "2", "3"];
|
|
|
|
for (let key of tests) {
|
|
await synthesizeKeyAndTest(browser, key, {}, true);
|
|
}
|
|
});
|
|
|
|
add_task(async function TestNonPrintableKey() {
|
|
let tests = [
|
|
["KEY_Backspace", false],
|
|
["KEY_Control", false],
|
|
["KEY_Shift", false],
|
|
["KEY_Escape", false],
|
|
// Treat as user input
|
|
["KEY_Tab", true],
|
|
["KEY_Enter", true],
|
|
[" ", true],
|
|
];
|
|
|
|
for (let [key, expectedResult] of tests) {
|
|
await synthesizeKeyAndTest(browser, key, {}, expectedResult);
|
|
}
|
|
});
|
|
|
|
add_task(async function TestModifier() {
|
|
let tests = [
|
|
["a", { accelKey: true }, false],
|
|
["z", { accelKey: true }, false],
|
|
["a", { metaKey: true }, !navigator.platform.includes("Mac")],
|
|
// Treat as user input
|
|
["a", { altGraphKey: true }, true],
|
|
["a", { fnKey: true }, true],
|
|
["a", { altKey: true }, true],
|
|
["a", { shiftKey: true }, true],
|
|
["c", { altKey: true }, true],
|
|
["c", { accelKey: true }, true],
|
|
["v", { altKey: true }, true],
|
|
["v", { accelKey: true }, true],
|
|
["x", { altKey: true }, true],
|
|
["x", { accelKey: true }, true],
|
|
];
|
|
|
|
for (let [key, event, expectedResult] of tests) {
|
|
await synthesizeKeyAndTest(browser, key, event, expectedResult);
|
|
}
|
|
});
|