1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/components/sessionstore/test/browser_447951.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,62 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +function test() { 1.9 + /** Test for Bug 447951 **/ 1.10 + 1.11 + waitForExplicitFinish(); 1.12 + const baseURL = "http://mochi.test:8888/browser/" + 1.13 + "browser/components/sessionstore/test/browser_447951_sample.html#"; 1.14 + 1.15 + // Make sure the functionality added in bug 943339 doesn't affect the results 1.16 + gPrefService.setIntPref("browser.sessionstore.max_serialize_back", -1); 1.17 + gPrefService.setIntPref("browser.sessionstore.max_serialize_forward", -1); 1.18 + registerCleanupFunction(function () { 1.19 + gPrefService.clearUserPref("browser.sessionstore.max_serialize_back"); 1.20 + gPrefService.clearUserPref("browser.sessionstore.max_serialize_forward"); 1.21 + }); 1.22 + 1.23 + let tab = gBrowser.addTab(); 1.24 + whenBrowserLoaded(tab.linkedBrowser, function() { 1.25 + let tabState = { entries: [] }; 1.26 + let max_entries = gPrefService.getIntPref("browser.sessionhistory.max_entries"); 1.27 + for (let i = 0; i < max_entries; i++) 1.28 + tabState.entries.push({ url: baseURL + i }); 1.29 + 1.30 + ss.setTabState(tab, JSON.stringify(tabState)); 1.31 + whenTabRestored(tab, function() { 1.32 + SyncHandlers.get(tab.linkedBrowser).flush(); 1.33 + tabState = JSON.parse(ss.getTabState(tab)); 1.34 + is(tabState.entries.length, max_entries, "session history filled to the limit"); 1.35 + is(tabState.entries[0].url, baseURL + 0, "... but not more"); 1.36 + 1.37 + // visit yet another anchor (appending it to session history) 1.38 + tab.linkedBrowser.contentDocument.querySelector("a").click(); 1.39 + 1.40 + function check() { 1.41 + SyncHandlers.get(tab.linkedBrowser).flush(); 1.42 + tabState = JSON.parse(ss.getTabState(tab)); 1.43 + if (tabState.entries[tabState.entries.length - 1].url != baseURL + "end") { 1.44 + // It may take a few passes through the event loop before we 1.45 + // get the right URL. 1.46 + executeSoon(check); 1.47 + return; 1.48 + } 1.49 + 1.50 + is(tab.linkedBrowser.currentURI.spec, baseURL + "end", 1.51 + "the new anchor was loaded"); 1.52 + is(tabState.entries[tabState.entries.length - 1].url, baseURL + "end", 1.53 + "... and ignored"); 1.54 + is(tabState.entries[0].url, baseURL + 1, 1.55 + "... and the first item was removed"); 1.56 + 1.57 + // clean up 1.58 + gBrowser.removeTab(tab); 1.59 + finish(); 1.60 + } 1.61 + 1.62 + check(); 1.63 + }); 1.64 + }); 1.65 +}