summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_447951.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/browser_447951.js')
-rw-r--r--browser/components/sessionstore/test/browser_447951.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_447951.js b/browser/components/sessionstore/test/browser_447951.js
new file mode 100644
index 0000000000..84eaca8b33
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_447951.js
@@ -0,0 +1,84 @@
+/* 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();
+ }
+ });
+ });
+}