Files
tubestation/toolkit/content/tests/browser/browser_bug1170531.js
Nika Layzell ed9e85fc9a Bug 1671983 - Part 4: Stop awaiting BrowserTestUtils.loadURI, r=annyG,remote-protocol-reviewers,extension-reviewers,preferences-reviewers,whimboo,zombie
This method only is async in order to allow callers to wait for a process switch
triggered by the call to `loadURI` to be finished before resolving. With
DocumentChannel, we should never trigger a process switch eagerly like this
again, so we don't need any of the async behaviour here anymore.

This part is largely mechanical changes to tests, removing the `await` calls on
`loadURI`, and a follow-up part will remove the actual async logic from
`BrowserTestUtils.loadURI`.

Differential Revision: https://phabricator.services.mozilla.com/D94641
2020-11-12 18:01:03 +00:00

113 lines
3.7 KiB
JavaScript

/* eslint-disable mozilla/no-arbitrary-setTimeout */
// Test for bug 1170531
// https://bugzilla.mozilla.org/show_bug.cgi?id=1170531
add_task(async function() {
// Get a bunch of DOM nodes
let editMenu = document.getElementById("edit-menu");
let menuPopup = editMenu.menupopup;
let closeMenu = function(aCallback) {
if (OS.Constants.Sys.Name == "Darwin") {
executeSoon(aCallback);
return;
}
menuPopup.addEventListener(
"popuphidden",
function() {
executeSoon(aCallback);
},
{ once: true }
);
executeSoon(function() {
editMenu.open = false;
});
};
let openMenu = function(aCallback) {
if (OS.Constants.Sys.Name == "Darwin") {
goUpdateGlobalEditMenuItems();
// On OSX, we have a native menu, so it has to be updated. In single process browsers,
// this happens synchronously, but in e10s, we have to wait for the main thread
// to deal with it for us. 1 second should be plenty of time.
setTimeout(aCallback, 1000);
return;
}
menuPopup.addEventListener(
"popupshown",
function() {
executeSoon(aCallback);
},
{ once: true }
);
executeSoon(function() {
editMenu.open = true;
});
};
await BrowserTestUtils.withNewTab(
{ gBrowser, url: "about:blank" },
async function(browser) {
let menu_cut_disabled, menu_copy_disabled;
BrowserTestUtils.loadURI(browser, "data:text/html,<div>hello!</div>");
await BrowserTestUtils.browserLoaded(browser);
browser.focus();
await new Promise(resolve => waitForFocus(resolve, window));
await new Promise(resolve =>
window.requestAnimationFrame(() => executeSoon(resolve))
);
await new Promise(openMenu);
menu_cut_disabled =
menuPopup.querySelector("#menu_cut").getAttribute("disabled") == "true";
is(menu_cut_disabled, false, "menu_cut should be enabled");
menu_copy_disabled =
menuPopup.querySelector("#menu_copy").getAttribute("disabled") ==
"true";
is(menu_copy_disabled, false, "menu_copy should be enabled");
await new Promise(closeMenu);
BrowserTestUtils.loadURI(
browser,
"data:text/html,<div contentEditable='true'>hello!</div>"
);
await BrowserTestUtils.browserLoaded(browser);
browser.focus();
await new Promise(resolve => waitForFocus(resolve, window));
await new Promise(resolve =>
window.requestAnimationFrame(() => executeSoon(resolve))
);
await new Promise(openMenu);
menu_cut_disabled =
menuPopup.querySelector("#menu_cut").getAttribute("disabled") == "true";
is(menu_cut_disabled, false, "menu_cut should be enabled");
menu_copy_disabled =
menuPopup.querySelector("#menu_copy").getAttribute("disabled") ==
"true";
is(menu_copy_disabled, false, "menu_copy should be enabled");
await new Promise(closeMenu);
BrowserTestUtils.loadURI(browser, "about:preferences");
await BrowserTestUtils.browserLoaded(browser);
browser.focus();
await new Promise(resolve => waitForFocus(resolve, window));
await new Promise(resolve =>
window.requestAnimationFrame(() => executeSoon(resolve))
);
await new Promise(openMenu);
menu_cut_disabled =
menuPopup.querySelector("#menu_cut").getAttribute("disabled") == "true";
is(menu_cut_disabled, true, "menu_cut should be disabled");
menu_copy_disabled =
menuPopup.querySelector("#menu_copy").getAttribute("disabled") ==
"true";
is(menu_copy_disabled, true, "menu_copy should be disabled");
await new Promise(closeMenu);
}
);
});