// Test for bug 1170531 // https://bugzilla.mozilla.org/show_bug.cgi?id=1170531 add_task(function* () { // Get a bunch of DOM nodes let winUtils = window.QueryInterface(Ci.nsIInterfaceRequestor). getInterface(Ci.nsIDOMWindowUtils); let editMenu = document.getElementById("edit-menu"); let menubar = editMenu.parentNode; let menuPopup = editMenu.menupopup; let editMenuIndex = -1; for (let i = 0; i < menubar.children.length; i++) { if (menubar.children[i] === editMenu) { editMenuIndex = i; break; } } let closeMenu = function(aCallback) { if (OS.Constants.Sys.Name == "Darwin") { executeSoon(aCallback); return; } menuPopup.addEventListener("popuphidden", function onPopupHidden() { menuPopup.removeEventListener("popuphidden", onPopupHidden, false); executeSoon(aCallback); }, false); 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 onPopupShown() { menuPopup.removeEventListener("popupshown", onPopupShown, false); executeSoon(aCallback); }, false); executeSoon(function() { editMenu.open = true; }); }; yield BrowserTestUtils.withNewTab({ gBrowser: gBrowser, url: "about:blank" }, function* (browser) { let menu_cut_disabled, menu_copy_disabled; yield BrowserTestUtils.loadURI(browser, "data:text/html,
hello!
"); yield BrowserTestUtils.browserLoaded(browser); browser.focus(); yield new Promise(resolve => waitForFocus(resolve, window)); yield 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"); yield new Promise(closeMenu); yield BrowserTestUtils.loadURI(browser, "data:text/html,
hello!
"); yield BrowserTestUtils.browserLoaded(browser); browser.focus(); yield new Promise(resolve => waitForFocus(resolve, window)); yield 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"); yield new Promise(closeMenu); yield BrowserTestUtils.loadURI(browser, "about:preferences"); yield BrowserTestUtils.browserLoaded(browser); browser.focus(); yield new Promise(resolve => waitForFocus(resolve, window)); yield 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"); yield new Promise(closeMenu); }); });