зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1790666 - Propagate session storage across COOP switches without SHIP, r=smaug,asuth
With non-SHIP Desktop we would propagate the session storage across process switches using session restore, so the internal propagation was diabled. However, android's session restore has no handling for session storage, meaning that all session storage is discarded. This changes the logic to always use the internal propagation, even when SHIP is disabled. Differential Revision: https://phabricator.services.mozilla.com/D188647
This commit is contained in:
Родитель
492a011ad0
Коммит
23df3cab6b
|
@ -381,9 +381,7 @@ void CanonicalBrowsingContext::ReplacedBy(
|
|||
aNewContext->SetChildSHistory(childSHistory);
|
||||
}
|
||||
|
||||
if (mozilla::SessionHistoryInParent()) {
|
||||
BackgroundSessionStorageManager::PropagateManager(Id(), aNewContext->Id());
|
||||
}
|
||||
BackgroundSessionStorageManager::PropagateManager(Id(), aNewContext->Id());
|
||||
|
||||
// Transfer the ownership of the priority active status from the old context
|
||||
// to the new context.
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
<script>
|
||||
addEventListener("load", () => {
|
||||
let bc = new BroadcastChannel("testChannel");
|
||||
bc.postMessage(sessionStorage.getItem("testItem"));
|
||||
window.close();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
Cross-Origin-Opener-Policy: same-origin
|
|
@ -264,3 +264,7 @@ support-files =
|
|||
file_ship_beforeunload_fired.html
|
||||
skip-if = !sessionHistoryInParent
|
||||
[test_open_javascript_noopener.html]
|
||||
[test_sessionstorage_across_coop.html]
|
||||
support-files =
|
||||
file_sessionstorage_across_coop.html
|
||||
file_sessionstorage_across_coop.html^headers^
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=1790666
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 1790666</title>
|
||||
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1790666">Mozilla Bug 1790666</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
async function singleTest(testValue, description) {
|
||||
info(`Starting test: ${description}`);
|
||||
|
||||
let bc = new BroadcastChannel("testChannel");
|
||||
let promise = new Promise(resolve => {
|
||||
bc.addEventListener("message", event => {
|
||||
info(`received message from testChannel: ${event.data}`);
|
||||
resolve(event.data);
|
||||
}, { once: true });
|
||||
});
|
||||
|
||||
info("Opening pop-up");
|
||||
let popup = window.open("", "_blank");
|
||||
popup.sessionStorage.setItem("testItem", testValue);
|
||||
|
||||
info("Navigating pop-up to COOP page");
|
||||
popup.location = new URL("file_sessionstorage_across_coop.html", window.location);
|
||||
|
||||
let newValue = await promise;
|
||||
is(newValue, testValue, "Value matches expected value");
|
||||
}
|
||||
|
||||
add_task(async function() {
|
||||
// Cross-Origin-Opener-Policy is only supported in secure contexts, so
|
||||
// make the test a secure context.
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
"set": [["dom.securecontext.allowlist", "mochi.test"]],
|
||||
});
|
||||
|
||||
await singleTest("short test value", "short test value");
|
||||
|
||||
let longValue = "A".repeat(SpecialPowers.getIntPref("browser.sessionstore.dom_storage_limit") * 2);
|
||||
await singleTest(longValue, "long test value");
|
||||
});
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Загрузка…
Ссылка в новой задаче