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