summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_447951.js
blob: 84eaca8b33f920712d50f362b04c5de76039d7c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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();
        }
      });
  });
}