browser_aboutNewTab_bookmarksToolbarNewWindow.js (2345B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 requestLongerTimeout(2); 7 8 const testCases = [ 9 { 10 name: "bookmarks_toolbar_shown_on_newtab_newTabEnabled", 11 newTabEnabled: true, 12 }, 13 { 14 name: "bookmarks_toolbar_shown_on_newtab", 15 newTabEnabled: false, 16 }, 17 ]; 18 19 async function test_bookmarks_toolbar_visibility({ newTabEnabled }) { 20 await SpecialPowers.pushPrefEnv({ 21 set: [["browser.newtabpage.enabled", newTabEnabled]], 22 }); 23 24 // Ensure the toolbar doesnt become visible at any point before the tab finishes loading 25 26 let url = 27 getRootDirectory(gTestPath).replace( 28 "chrome://mochitests/content", 29 "https://example.com" 30 ) + "slow_loading_page.sjs"; 31 32 let startTime = Date.now(); 33 let newWindowOpened = BrowserTestUtils.domWindowOpened(); 34 let beforeShown = TestUtils.topicObserved("browser-window-before-show"); 35 36 openTrustedLinkIn(url, "window"); 37 38 let newWin = await newWindowOpened; 39 let slowSiteLoaded = BrowserTestUtils.firstBrowserLoaded(newWin, false); 40 41 function checkToolbarIsCollapsed(win, message) { 42 let toolbar = win.document.getElementById("PersonalToolbar"); 43 ok(toolbar && toolbar.collapsed, message); 44 } 45 46 await beforeShown; 47 checkToolbarIsCollapsed( 48 newWin, 49 "Toolbar is initially hidden on the new window" 50 ); 51 52 function onToolbarMutation() { 53 checkToolbarIsCollapsed(newWin, "Toolbar should remain collapsed"); 54 } 55 let toolbarMutationObserver = new newWin.MutationObserver(onToolbarMutation); 56 toolbarMutationObserver.observe( 57 newWin.document.getElementById("PersonalToolbar"), 58 { 59 attributeFilter: ["collapsed"], 60 } 61 ); 62 63 info("Waiting for the slow site to load"); 64 await slowSiteLoaded; 65 info(`Window opened and slow site loaded in: ${Date.now() - startTime}ms`); 66 67 checkToolbarIsCollapsed(newWin, "Finally, the toolbar is still hidden"); 68 69 toolbarMutationObserver.disconnect(); 70 await BrowserTestUtils.closeWindow(newWin); 71 } 72 73 // Make separate tasks for each test case, so we get more useful stack traces on failure 74 for (let testData of testCases) { 75 let tmp = { 76 async [testData.name]() { 77 info("testing with: " + JSON.stringify(testData)); 78 await test_bookmarks_toolbar_visibility(testData); 79 }, 80 }; 81 add_task(tmp[testData.name]); 82 }