diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /browser/components/sessionstore/test/browser_687710.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/sessionstore/test/browser_687710.js')
-rw-r--r-- | browser/components/sessionstore/test/browser_687710.js | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_687710.js b/browser/components/sessionstore/test/browser_687710.js new file mode 100644 index 0000000000..e90c74c881 --- /dev/null +++ b/browser/components/sessionstore/test/browser_687710.js @@ -0,0 +1,58 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that sessionrestore handles cycles in the shentry graph properly. +// +// These cycles shouldn't be there in the first place, but they cause hangs +// when they mysteriously appear (bug 687710). Docshell code assumes this +// graph is a tree and tires to walk to the root. But if there's a cycle, +// there is no root, and we loop forever. + +var stateBackup = ss.getBrowserState(); + +var state = { + windows: [ + { + tabs: [ + { + entries: [ + { + docIdentifier: 1, + url: "http://example.com", + triggeringPrincipal_base64, + children: [ + { + docIdentifier: 2, + url: "http://example.com", + triggeringPrincipal_base64, + }, + ], + }, + { + docIdentifier: 2, + url: "http://example.com", + triggeringPrincipal_base64, + children: [ + { + docIdentifier: 1, + url: "http://example.com", + triggeringPrincipal_base64, + }, + ], + }, + ], + }, + ], + }, + ], +}; + +add_task(async function test() { + registerCleanupFunction(function () { + ss.setBrowserState(stateBackup); + }); + + /* This test fails by hanging. */ + await setBrowserState(state); + ok(true, "Didn't hang!"); +}); |