browser_586068-apptabs.js (2852B)
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 requestLongerTimeout(2); 6 7 const PREF_RESTORE_ON_DEMAND = "browser.sessionstore.restore_on_demand"; 8 9 add_task(async function test() { 10 Services.prefs.setBoolPref(PREF_RESTORE_ON_DEMAND, true); 11 registerCleanupFunction(function () { 12 Services.prefs.clearUserPref(PREF_RESTORE_ON_DEMAND); 13 }); 14 15 let state = { 16 windows: [ 17 { 18 tabs: [ 19 { 20 entries: [ 21 { url: "http://example.org/#1", triggeringPrincipal_base64 }, 22 ], 23 extData: { uniq: r() }, 24 pinned: true, 25 }, 26 { 27 entries: [ 28 { url: "http://example.org/#2", triggeringPrincipal_base64 }, 29 ], 30 extData: { uniq: r() }, 31 pinned: true, 32 }, 33 { 34 entries: [ 35 { url: "http://example.org/#3", triggeringPrincipal_base64 }, 36 ], 37 extData: { uniq: r() }, 38 pinned: true, 39 }, 40 { 41 entries: [ 42 { url: "http://example.org/#4", triggeringPrincipal_base64 }, 43 ], 44 extData: { uniq: r() }, 45 }, 46 { 47 entries: [ 48 { url: "http://example.org/#5", triggeringPrincipal_base64 }, 49 ], 50 extData: { uniq: r() }, 51 }, 52 { 53 entries: [ 54 { url: "http://example.org/#6", triggeringPrincipal_base64 }, 55 ], 56 extData: { uniq: r() }, 57 }, 58 { 59 entries: [ 60 { url: "http://example.org/#7", triggeringPrincipal_base64 }, 61 ], 62 extData: { uniq: r() }, 63 }, 64 ], 65 selected: 5, 66 }, 67 ], 68 }; 69 70 let loadCount = 0; 71 let promiseRestoringTabs = new Promise(resolve => { 72 gProgressListener.setCallback(function (aBrowser) { 73 loadCount++; 74 75 // We'll make sure that the loads we get come from pinned tabs or the 76 // the selected tab. 77 78 // get the tab 79 let tab; 80 for (let i = 0; i < window.gBrowser.tabs.length; i++) { 81 if (!tab && window.gBrowser.tabs[i].linkedBrowser == aBrowser) { 82 tab = window.gBrowser.tabs[i]; 83 } 84 } 85 86 ok(tab.pinned || tab.selected, "load came from pinned or selected tab"); 87 88 // We should get 4 loads: 3 app tabs + 1 normal selected tab 89 if (loadCount < 4) { 90 return; 91 } 92 93 gProgressListener.unsetCallback(); 94 resolve(); 95 }); 96 }); 97 98 let backupState = ss.getBrowserState(); 99 ss.setBrowserState(JSON.stringify(state)); 100 await promiseRestoringTabs; 101 102 // Cleanup. 103 await promiseBrowserState(backupState); 104 });