browser_select_popup_from_background_tab.js (2527B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 Services.scriptloader.loadSubScript( 7 "chrome://mochitests/content/browser/browser/base/content/test/forms/head.js", 8 this 9 ); 10 11 const PAGECONTENT = 12 "<html><body>" + 13 "<select id=select><option>foo foo</option><option>bar bar</option><option>baz baz</option></select><input>" + 14 "</body></html>"; 15 16 let selectPopup; 17 async function test_clicking_select_window_open(aIsPopup) { 18 await BrowserTestUtils.withNewTab( 19 { 20 gBrowser, 21 url: "data:text/html," + escape(PAGECONTENT), 22 }, 23 async browser => { 24 let listener = () => { 25 Assert.ok(false, "popup should not be shown at all"); 26 }; 27 selectPopup.addEventListener("popupshown", listener); 28 29 let openedPromise = aIsPopup 30 ? BrowserTestUtils.waitForNewWindow({ 31 url: "https://example.org/", 32 }) 33 : BrowserTestUtils.waitForNewTab( 34 gBrowser, 35 "https://example.org/", 36 true 37 ); 38 39 await SpecialPowers.spawn(browser, [aIsPopup], async function (isPopup) { 40 let select = content.document.querySelector("select"); 41 select.addEventListener("mousedown", () => { 42 content.window.open( 43 "https://example.org/", 44 "", 45 isPopup ? "popup" : "" 46 ); 47 }); 48 }); 49 BrowserTestUtils.synthesizeMouseAtCenter("select", {}, browser); 50 51 let newTabOrPopup = await openedPromise; 52 Assert.equal(selectPopup.state, "closed", "popup should not appear"); 53 54 selectPopup.removeEventListener("popupshown", listener); 55 await (aIsPopup 56 ? BrowserTestUtils.closeWindow(newTabOrPopup) 57 : BrowserTestUtils.removeTab(newTabOrPopup)); 58 } 59 ); 60 } 61 62 // The select dropdown is created lazily, so initial it first. 63 add_setup(async function init_select_popup() { 64 await SpecialPowers.pushPrefEnv({ 65 set: [["test.wait300msAfterTabSwitch", true]], 66 }); 67 68 await BrowserTestUtils.withNewTab( 69 { 70 gBrowser, 71 url: "data:text/html," + escape(PAGECONTENT), 72 }, 73 async browser => { 74 selectPopup = await openSelectPopup("click"); 75 await hideSelectPopup(); 76 } 77 ); 78 }); 79 80 // Test for bug 1909535. 81 add_task(async function test_clicking_select_opens_new_tab() { 82 await test_clicking_select_window_open(false); 83 }); 84 85 add_task(async function test_clicking_select_opens_new_window() { 86 await test_clicking_select_window_open(true); 87 });