/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ function test() { /** Test for Bug 447951 **/ waitForExplicitFinish(); const baseURL = "http://mochi.test:8888/browser/" + "browser/components/sessionstore/test/browser_447951_sample.html#"; // Make sure the functionality added in bug 943339 doesn't affect the results Services.prefs.setIntPref("browser.sessionstore.max_serialize_back", -1); Services.prefs.setIntPref("browser.sessionstore.max_serialize_forward", -1); registerCleanupFunction(function () { Services.prefs.clearUserPref("browser.sessionstore.max_serialize_back"); Services.prefs.clearUserPref("browser.sessionstore.max_serialize_forward"); }); let tab = BrowserTestUtils.addTab(gBrowser); promiseBrowserLoaded(tab.linkedBrowser).then(() => { let tabState = { entries: [] }; let max_entries = Services.prefs.getIntPref( "browser.sessionhistory.max_entries" ); for (let i = 0; i < max_entries; i++) { tabState.entries.push({ url: baseURL + i, triggeringPrincipal_base64 }); } promiseTabState(tab, tabState) .then(() => { return TabStateFlusher.flush(tab.linkedBrowser); }) .then(() => { tabState = JSON.parse(ss.getTabState(tab)); is( tabState.entries.length, max_entries, "session history filled to the limit" ); is(tabState.entries[0].url, baseURL + 0, "... but not more"); // visit yet another anchor (appending it to session history) SpecialPowers.spawn(tab.linkedBrowser, [], function () { content.window.document.querySelector("a").click(); }).then(flushAndCheck); function flushAndCheck() { TabStateFlusher.flush(tab.linkedBrowser).then(check); } function check() { tabState = JSON.parse(ss.getTabState(tab)); if (tab.linkedBrowser.currentURI.spec != baseURL + "end") { // It may take a few passes through the event loop before we // get the right URL. executeSoon(flushAndCheck); return; } is( tab.linkedBrowser.currentURI.spec, baseURL + "end", "the new anchor was loaded" ); is( tabState.entries[tabState.entries.length - 1].url, baseURL + "end", "... and ignored" ); is( tabState.entries[0].url, baseURL + 1, "... and the first item was removed" ); // clean up gBrowser.removeTab(tab); finish(); } }); }); }