browser_586068-reload.js (3351B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 const PREF_RESTORE_ON_DEMAND = "browser.sessionstore.restore_on_demand"; 6 7 add_task(async function test() { 8 Services.prefs.setBoolPref(PREF_RESTORE_ON_DEMAND, true); 9 registerCleanupFunction(function () { 10 Services.prefs.clearUserPref(PREF_RESTORE_ON_DEMAND); 11 }); 12 13 let state = { 14 windows: [ 15 { 16 tabs: [ 17 { 18 entries: [ 19 { url: "http://example.org/#1", triggeringPrincipal_base64 }, 20 ], 21 extData: { uniq: r() }, 22 }, 23 { 24 entries: [ 25 { url: "http://example.org/#2", triggeringPrincipal_base64 }, 26 ], 27 extData: { uniq: r() }, 28 }, 29 { 30 entries: [ 31 { url: "http://example.org/#3", triggeringPrincipal_base64 }, 32 ], 33 extData: { uniq: r() }, 34 }, 35 { 36 entries: [ 37 { url: "http://example.org/#4", triggeringPrincipal_base64 }, 38 ], 39 extData: { uniq: r() }, 40 }, 41 { 42 entries: [ 43 { url: "http://example.org/#5", triggeringPrincipal_base64 }, 44 ], 45 extData: { uniq: r() }, 46 }, 47 { 48 entries: [ 49 { url: "http://example.org/#6", triggeringPrincipal_base64 }, 50 ], 51 extData: { uniq: r() }, 52 }, 53 { 54 entries: [ 55 { url: "http://example.org/#7", triggeringPrincipal_base64 }, 56 ], 57 extData: { uniq: r() }, 58 }, 59 { 60 entries: [ 61 { url: "http://example.org/#8", triggeringPrincipal_base64 }, 62 ], 63 extData: { uniq: r() }, 64 }, 65 { 66 entries: [ 67 { url: "http://example.org/#9", triggeringPrincipal_base64 }, 68 ], 69 extData: { uniq: r() }, 70 }, 71 ], 72 selected: 1, 73 }, 74 ], 75 }; 76 77 let loadCount = 0; 78 let promiseRestoringTabs = new Promise(resolve => { 79 gBrowser.tabContainer.addEventListener( 80 "SSTabRestored", 81 function onRestored(event) { 82 let tab = event.target; 83 let browser = tab.linkedBrowser; 84 let tabData = state.windows[0].tabs[loadCount++]; 85 86 // double check that this tab was the right one 87 is( 88 browser.currentURI.spec, 89 tabData.entries[0].url, 90 "load " + loadCount + " - browser loaded correct url" 91 ); 92 is( 93 ss.getCustomTabValue(tab, "uniq"), 94 tabData.extData.uniq, 95 "load " + loadCount + " - correct tab was restored" 96 ); 97 98 if (loadCount == state.windows[0].tabs.length) { 99 gBrowser.tabContainer.removeEventListener( 100 "SSTabRestored", 101 onRestored 102 ); 103 resolve(); 104 } else { 105 // reload the next tab 106 gBrowser.browsers[loadCount].reload(); 107 } 108 } 109 ); 110 }); 111 112 let backupState = ss.getBrowserState(); 113 ss.setBrowserState(JSON.stringify(state)); 114 await promiseRestoringTabs; 115 116 // Cleanup. 117 await promiseBrowserState(backupState); 118 });