From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- .../content/test/general/browser_accesskeys.js | 82 ++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 browser/base/content/test/general/browser_accesskeys.js (limited to 'browser/base/content/test/general/browser_accesskeys.js') diff --git a/browser/base/content/test/general/browser_accesskeys.js b/browser/base/content/test/general/browser_accesskeys.js new file mode 100644 index 000000000..56fe3995f --- /dev/null +++ b/browser/base/content/test/general/browser_accesskeys.js @@ -0,0 +1,82 @@ +add_task(function *() { + yield pushPrefs(["ui.key.contentAccess", 5], ["ui.key.chromeAccess", 5]); + + const gPageURL1 = "data:text/html,

" + + "" + + "Checkbox" + + "

"; + let tab1 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, gPageURL1); + tab1.linkedBrowser.messageManager.loadFrameScript("data:,(" + childHandleFocus.toString() + ")();", false); + + Services.focus.clearFocus(window); + + // Press an accesskey in the child document while the chrome is focused. + let focusedId = yield performAccessKey("y"); + is(focusedId, "button", "button accesskey"); + + // Press an accesskey in the child document while the content document is focused. + focusedId = yield performAccessKey("z"); + is(focusedId, "checkbox", "checkbox accesskey"); + + // Add an element with an accesskey to the chrome and press its accesskey while the chrome is focused. + let newButton = document.createElement("button"); + newButton.id = "chromebutton"; + newButton.setAttribute("accesskey", "z"); + document.documentElement.appendChild(newButton); + + Services.focus.clearFocus(window); + + focusedId = yield performAccessKeyForChrome("z"); + is(focusedId, "chromebutton", "chromebutton accesskey"); + + // Add a second tab and ensure that accesskey from the first tab is not used. + const gPageURL2 = "data:text/html," + + "" + + ""; + let tab2 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, gPageURL2); + tab2.linkedBrowser.messageManager.loadFrameScript("data:,(" + childHandleFocus.toString() + ")();", false); + + Services.focus.clearFocus(window); + + focusedId = yield performAccessKey("y"); + is(focusedId, "tab2button", "button accesskey in tab2"); + + // Press the accesskey for the chrome element while the content document is focused. + focusedId = yield performAccessKeyForChrome("z"); + is(focusedId, "chromebutton", "chromebutton accesskey"); + + newButton.parentNode.removeChild(newButton); + + gBrowser.removeTab(tab1); + gBrowser.removeTab(tab2); +}); + +function childHandleFocus() { + content.document.body.firstChild.addEventListener("focus", function focused(event) { + let focusedElement = content.document.activeElement; + focusedElement.blur(); + sendAsyncMessage("Test:FocusFromAccessKey", { focus: focusedElement.id }) + }, true); +} + +function performAccessKey(key) +{ + return new Promise(resolve => { + let mm = gBrowser.selectedBrowser.messageManager; + mm.addMessageListener("Test:FocusFromAccessKey", function listenForFocus(msg) { + mm.removeMessageListener("Test:FocusFromAccessKey", listenForFocus); + resolve(msg.data.focus); + }); + + EventUtils.synthesizeKey(key, { altKey: true, shiftKey: true }); + }); +} + +// This version is used when a chrome elemnt is expected to be found for an accesskey. +function* performAccessKeyForChrome(key, inChild) +{ + let waitFocusChangePromise = BrowserTestUtils.waitForEvent(document, "focus", true); + EventUtils.synthesizeKey(key, { altKey: true, shiftKey: true }); + yield waitFocusChangePromise; + return document.activeElement.id; +} -- cgit v1.2.3