browser_restored_window_features.js (4832B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const BARPROP_NAMES = [ 7 "locationbar", 8 "menubar", 9 "personalbar", 10 "scrollbars", 11 "statusbar", 12 "toolbar", 13 ]; 14 15 function testFeatures(win, test) { 16 for (let name of BARPROP_NAMES) { 17 is( 18 win[name].visible, 19 !!test.barprops?.[name], 20 name + " should be " + (test.barprops?.[name] ? "visible" : "hidden") 21 ); 22 } 23 let toolbar = win.document.getElementById("TabsToolbar"); 24 is( 25 toolbar.collapsed, 26 !win.toolbar.visible, 27 win.toolbar.visible 28 ? "tabbar should not be collapsed" 29 : "tabbar should be collapsed" 30 ); 31 let chromeFlags = win.docShell.treeOwner 32 .QueryInterface(Ci.nsIInterfaceRequestor) 33 .getInterface(Ci.nsIAppWindow).chromeFlags; 34 is(chromeFlags & test.chromeFlags, test.chromeFlags, "flags should be set"); 35 if (test.unsetFlags) { 36 is(chromeFlags & test.unsetFlags, 0, "flags should be unset"); 37 } 38 } 39 40 add_task(async function testRestoredWindowFeatures() { 41 const DUMMY_PAGE = 42 "browser/components/tabbrowser/test/browser/tabs/dummy_page.html"; 43 const ALL_BARPROPS = { 44 locationbar: true, 45 menubar: true, 46 personalbar: true, 47 scrollbars: true, 48 statusbar: true, 49 toolbar: true, 50 }; 51 const TESTS = [ 52 { 53 url: "http://example.com/browser/" + DUMMY_PAGE, 54 features: "menubar=0,resizable", 55 barprops: { scrollbars: true }, 56 chromeFlags: Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE, 57 unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG, 58 }, 59 { 60 url: "data:,", // title should be empty 61 checkContentTitleEmpty: true, 62 features: "location,resizable", 63 barprops: { locationbar: true, scrollbars: true }, 64 chromeFlags: Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE, 65 unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG, 66 }, 67 { 68 url: "http://example.com/browser/" + DUMMY_PAGE, 69 features: "dialog,resizable", 70 barprops: { scrollbars: true }, 71 chromeFlags: 72 Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG | 73 Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE, 74 }, 75 { 76 chrome: true, 77 url: "http://example.com/browser/" + DUMMY_PAGE, 78 features: "chrome,all,dialog=no", 79 barprops: ALL_BARPROPS, 80 chromeFlags: Ci.nsIWebBrowserChrome.CHROME_ALL, 81 unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG, 82 }, 83 { 84 chrome: true, 85 url: "http://example.com/browser/" + DUMMY_PAGE, 86 features: "chrome,all,dialog=no,centerscreen", 87 barprops: ALL_BARPROPS, 88 chromeFlags: Ci.nsIWebBrowserChrome.CHROME_CENTER_SCREEN, 89 }, 90 { 91 chrome: true, 92 url: "http://example.com/browser/" + DUMMY_PAGE, 93 features: "chrome,all,dialog=no,dependent", 94 barprops: ALL_BARPROPS, 95 chromeFlags: Ci.nsIWebBrowserChrome.CHROME_DEPENDENT, 96 }, 97 ]; 98 const TEST_URL_CHROME = "chrome://mochitests/content/browser/" + DUMMY_PAGE; 99 100 BrowserTestUtils.startLoadingURIString( 101 gBrowser.selectedBrowser, 102 TEST_URL_CHROME 103 ); 104 await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser); 105 106 for (let test of TESTS) { 107 let newWindowPromise = BrowserTestUtils.waitForNewWindow({ 108 url: test.url, 109 }); 110 let win; 111 if (test.chrome) { 112 win = window.openDialog( 113 AppConstants.BROWSER_CHROME_URL, 114 "_blank", 115 test.features, 116 test.url 117 ); 118 } else { 119 await SpecialPowers.spawn(gBrowser.selectedBrowser, [test], t => { 120 content.window.open(t.url, "_blank", t.features); 121 }); 122 } 123 win = await newWindowPromise; 124 125 let title = win.document.title; 126 if (test.checkContentTitleEmpty) { 127 let contentTitle = await SpecialPowers.spawn( 128 win.gBrowser.selectedBrowser, 129 [], 130 () => content.document.title 131 ); 132 is(contentTitle, "", "title should be empty"); 133 } 134 135 testFeatures(win, test); 136 let chromeFlags = win.docShell.treeOwner 137 .QueryInterface(Ci.nsIInterfaceRequestor) 138 .getInterface(Ci.nsIAppWindow).chromeFlags; 139 140 await BrowserTestUtils.closeWindow(win); 141 142 newWindowPromise = BrowserTestUtils.waitForNewWindow({ 143 url: test.url, 144 }); 145 SessionStore.undoCloseWindow(0); 146 win = await newWindowPromise; 147 148 is(title, win.document.title, "title should be preserved"); 149 testFeatures(win, test); 150 is( 151 win.docShell.treeOwner 152 .QueryInterface(Ci.nsIInterfaceRequestor) 153 .getInterface(Ci.nsIAppWindow).chromeFlags, 154 // Use |>>> 0| to force unsigned. 155 (chromeFlags | 156 Ci.nsIWebBrowserChrome.CHROME_OPENAS_CHROME | 157 Ci.nsIWebBrowserChrome.CHROME_SUPPRESS_ANIMATION) >>> 158 0, 159 "unexpected chromeFlags" 160 ); 161 162 await BrowserTestUtils.closeWindow(win); 163 } 164 });