browser_819510_perwindowpb.js (4759B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 // Test opening default mochitest-normal-private-normal-private windows 5 // (saving the state with last window being private) 6 7 requestLongerTimeout(2); 8 9 add_task(async function test_1() { 10 let win = await promiseNewWindowLoaded(); 11 await promiseTabLoad(win, "http://www.example.com/#1"); 12 13 win = await promiseNewWindowLoaded({ private: true }); 14 await promiseTabLoad(win, "http://www.example.com/#2"); 15 16 win = await promiseNewWindowLoaded(); 17 await promiseTabLoad(win, "http://www.example.com/#3"); 18 19 win = await promiseNewWindowLoaded({ private: true }); 20 await promiseTabLoad(win, "http://www.example.com/#4"); 21 22 let curState = JSON.parse(ss.getBrowserState()); 23 is(curState.windows.length, 5, "Browser has opened 5 windows"); 24 is(curState.windows[2].isPrivate, true, "Window is private"); 25 is(curState.windows[4].isPrivate, true, "Last window is private"); 26 is(curState.selectedWindow, 5, "Last window opened is the one selected"); 27 28 let state = JSON.parse(await promiseRecoveryFileContents()); 29 30 is( 31 state.windows.length, 32 2, 33 "sessionstore state: 2 windows in data being written to disk" 34 ); 35 is( 36 state.selectedWindow, 37 2, 38 "Selected window is updated to match one of the saved windows" 39 ); 40 ok( 41 state.windows.every(win2 => !win2.isPrivate), 42 "Saved windows are not private" 43 ); 44 is( 45 state._closedWindows.length, 46 0, 47 "sessionstore state: no closed windows in data being written to disk" 48 ); 49 50 // Cleanup. 51 await promiseAllButPrimaryWindowClosed(); 52 forgetClosedWindows(); 53 }); 54 55 // Test opening default mochitest window + 2 private windows 56 add_task(async function test_2() { 57 let win = await promiseNewWindowLoaded({ private: true }); 58 await promiseTabLoad(win, "http://www.example.com/#1"); 59 60 win = await promiseNewWindowLoaded({ private: true }); 61 await promiseTabLoad(win, "http://www.example.com/#2"); 62 63 let curState = JSON.parse(ss.getBrowserState()); 64 is(curState.windows.length, 3, "Browser has opened 3 windows"); 65 is(curState.windows[1].isPrivate, true, "Window 1 is private"); 66 is(curState.windows[2].isPrivate, true, "Window 2 is private"); 67 is(curState.selectedWindow, 3, "Last window opened is the one selected"); 68 69 let state = JSON.parse(await promiseRecoveryFileContents()); 70 71 is( 72 state.windows.length, 73 0, 74 "sessionstore state: no window in data being written to disk" 75 ); 76 is( 77 state.selectedWindow, 78 0, 79 "Selected window updated to 0 given there are no saved windows" 80 ); 81 is( 82 state._closedWindows.length, 83 0, 84 "sessionstore state: no closed windows in data being written to disk" 85 ); 86 87 // Cleanup. 88 await promiseAllButPrimaryWindowClosed(); 89 forgetClosedWindows(); 90 }); 91 92 // Test opening default-normal-private-normal windows and closing a normal window 93 add_task(async function test_3() { 94 let normalWindow = await promiseNewWindowLoaded(); 95 await promiseTabLoad(normalWindow, "http://www.example.com/#1"); 96 97 let win = await promiseNewWindowLoaded({ private: true }); 98 await promiseTabLoad(win, "http://www.example.com/#2"); 99 100 win = await promiseNewWindowLoaded(); 101 await promiseTabLoad(win, "http://www.example.com/#3"); 102 103 let curState = JSON.parse(ss.getBrowserState()); 104 is(curState.windows.length, 4, "Browser has opened 4 windows"); 105 is(curState.windows[2].isPrivate, true, "Window 2 is private"); 106 is(curState.selectedWindow, 4, "Last window opened is the one selected"); 107 108 await BrowserTestUtils.closeWindow(normalWindow); 109 110 // Pin and unpin a tab before checking the written state so that 111 // the list of restoring windows gets cleared. Otherwise the 112 // window we just closed would be marked as not closed. 113 let tab = win.gBrowser.tabs[0]; 114 win.gBrowser.pinTab(tab); 115 win.gBrowser.unpinTab(tab); 116 117 let state = JSON.parse(await promiseRecoveryFileContents()); 118 119 is( 120 state.windows.length, 121 1, 122 "sessionstore state: 1 window in data being written to disk" 123 ); 124 is( 125 state.selectedWindow, 126 1, 127 "Selected window is updated to match one of the saved windows" 128 ); 129 ok( 130 state.windows.every(win2 => !win2.isPrivate), 131 "Saved windows are not private" 132 ); 133 is( 134 state._closedWindows.length, 135 1, 136 "sessionstore state: 1 closed window in data being written to disk" 137 ); 138 ok( 139 state._closedWindows.every(win2 => !win2.isPrivate), 140 "Closed windows are not private" 141 ); 142 143 // Cleanup. 144 await promiseAllButPrimaryWindowClosed(); 145 forgetClosedWindows(); 146 }); 147 148 async function promiseTabLoad(win, url) { 149 let tab = BrowserTestUtils.addTab(win.gBrowser, url); 150 await promiseBrowserLoaded(tab.linkedBrowser); 151 await TabStateFlusher.flush(tab.linkedBrowser); 152 }