head.js (1536B)
1 async function openSelectPopup( 2 mode = "key", 3 selector = "select", 4 win = window 5 ) { 6 info("Opening select popup"); 7 let popupShownPromise = BrowserTestUtils.waitForSelectPopupShown(win); 8 if (mode == "click" || mode == "mousedown") { 9 let mousePromise; 10 if (mode == "click") { 11 mousePromise = BrowserTestUtils.synthesizeMouseAtCenter( 12 selector, 13 {}, 14 win.gBrowser.selectedBrowser 15 ); 16 } else { 17 mousePromise = BrowserTestUtils.synthesizeMouse( 18 selector, 19 5, 20 5, 21 { type: "mousedown" }, 22 win.gBrowser.selectedBrowser 23 ); 24 } 25 await mousePromise; 26 } else { 27 EventUtils.synthesizeKey("KEY_ArrowDown", { altKey: true }, win); 28 } 29 return popupShownPromise; 30 } 31 32 function hideSelectPopup(mode = "enter", win = window) { 33 let browser = win.gBrowser.selectedBrowser; 34 let selectClosedPromise = SpecialPowers.spawn(browser, [], async function () { 35 let { SelectContentHelper } = ChromeUtils.importESModule( 36 "resource://gre/actors/SelectChild.sys.mjs" 37 ); 38 return ContentTaskUtils.waitForCondition(() => !SelectContentHelper.open); 39 }); 40 41 if (mode == "escape") { 42 EventUtils.synthesizeKey("KEY_Escape", {}, win); 43 } else if (mode == "enter") { 44 EventUtils.synthesizeKey("KEY_Enter", {}, win); 45 } else if (mode == "click") { 46 let popup = win.document.getElementById("ContentSelectDropdown").menupopup; 47 EventUtils.synthesizeMouseAtCenter(popup.lastElementChild, {}, win); 48 } 49 50 return selectClosedPromise; 51 }