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.js65
1 files changed, 65 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 000000000..a7b6a5ee8
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_447951.js
@@ -0,0 +1,65 @@
+/* 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
+ gPrefService.setIntPref("browser.sessionstore.max_serialize_back", -1);
+ gPrefService.setIntPref("browser.sessionstore.max_serialize_forward", -1);
+ registerCleanupFunction(function () {
+ gPrefService.clearUserPref("browser.sessionstore.max_serialize_back");
+ gPrefService.clearUserPref("browser.sessionstore.max_serialize_forward");
+ });
+
+ let tab = gBrowser.addTab();
+ promiseBrowserLoaded(tab.linkedBrowser).then(() => {
+ let tabState = { entries: [] };
+ let max_entries = gPrefService.getIntPref("browser.sessionhistory.max_entries");
+ for (let i = 0; i < max_entries; i++)
+ tabState.entries.push({ url: baseURL + i });
+
+ 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)
+ ContentTask.spawn(tab.linkedBrowser, null, 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();
+ }
+ });
+ });
+}