summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_687710_2.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/browser_687710_2.js')
-rw-r--r--browser/components/sessionstore/test/browser_687710_2.js100
1 files changed, 100 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_687710_2.js b/browser/components/sessionstore/test/browser_687710_2.js
new file mode 100644
index 0000000000..81d3c55379
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_687710_2.js
@@ -0,0 +1,100 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test that the fix for bug 687710 isn't too aggressive -- shentries which are
+// cousins should be able to share bfcache entries.
+
+var stateBackup = ss.getBrowserState();
+
+var state = {
+ entries: [
+ {
+ docIdentifier: 1,
+ url: "http://example.com?1",
+ triggeringPrincipal_base64,
+ children: [
+ {
+ docIdentifier: 10,
+ url: "http://example.com?10",
+ triggeringPrincipal_base64,
+ },
+ ],
+ },
+ {
+ docIdentifier: 1,
+ url: "http://example.com?1#a",
+ triggeringPrincipal_base64,
+ children: [
+ {
+ docIdentifier: 10,
+ url: "http://example.com?10#aa",
+ triggeringPrincipal_base64,
+ },
+ ],
+ },
+ ],
+};
+
+add_task(async function test() {
+ let tab = BrowserTestUtils.addTab(gBrowser, "about:blank");
+ await promiseTabState(tab, state);
+ if (!SpecialPowers.Services.appinfo.sessionHistoryInParent) {
+ await SpecialPowers.spawn(tab.linkedBrowser, [], function () {
+ function compareEntries(i, j, history) {
+ let e1 = history.getEntryAtIndex(i);
+ let e2 = history.getEntryAtIndex(j);
+
+ ok(e1.sharesDocumentWith(e2), `${i} should share doc with ${j}`);
+ is(e1.childCount, e2.childCount, `Child count mismatch (${i}, ${j})`);
+
+ for (let c = 0; c < e1.childCount; c++) {
+ let c1 = e1.GetChildAt(c);
+ let c2 = e2.GetChildAt(c);
+
+ ok(
+ c1.sharesDocumentWith(c2),
+ `Cousins should share documents. (${i}, ${j}, ${c})`
+ );
+ }
+ }
+
+ let history = docShell.browsingContext.childSessionHistory.legacySHistory;
+
+ is(history.count, 2, "history.count");
+ for (let i = 0; i < history.count; i++) {
+ for (let j = 0; j < history.count; j++) {
+ compareEntries(i, j, history);
+ }
+ }
+ });
+ } else {
+ function compareEntries(i, j, history) {
+ let e1 = history.getEntryAtIndex(i);
+ let e2 = history.getEntryAtIndex(j);
+
+ ok(e1.sharesDocumentWith(e2), `${i} should share doc with ${j}`);
+ is(e1.childCount, e2.childCount, `Child count mismatch (${i}, ${j})`);
+
+ for (let c = 0; c < e1.childCount; c++) {
+ let c1 = e1.GetChildAt(c);
+ let c2 = e2.GetChildAt(c);
+
+ ok(
+ c1.sharesDocumentWith(c2),
+ `Cousins should share documents. (${i}, ${j}, ${c})`
+ );
+ }
+ }
+
+ let history = tab.linkedBrowser.browsingContext.sessionHistory;
+
+ is(history.count, 2, "history.count");
+ for (let i = 0; i < history.count; i++) {
+ for (let j = 0; j < history.count; j++) {
+ compareEntries(i, j, history);
+ }
+ }
+ }
+
+ ss.setBrowserState(stateBackup);
+});