62 lines
1.7 KiB
HTML
62 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<body>
|
|
<script src="../../../resources/js-test.js"></script>
|
|
<script>
|
|
description("Tests that the storage event gets fired in other frames but not the originating one");
|
|
jsTestIsAsync = true;
|
|
|
|
function uuidv4()
|
|
{
|
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
|
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
|
return v.toString(16);
|
|
});
|
|
}
|
|
|
|
let topStorageEventCount = 0;
|
|
let childStorageEventCount = 0;
|
|
|
|
function childReceivedStorageEvent(e)
|
|
{
|
|
event = e;
|
|
testPassed("Child frame received storage event.");
|
|
if (e.key === sessionStorageKey)
|
|
expectedValue = sessionStorageValue;
|
|
else
|
|
expectedValue = localStorageValue;
|
|
shouldBeTrue("event.newValue === expectedValue");
|
|
|
|
childStorageEventCount++;
|
|
if (childStorageEventCount == 2) {
|
|
setTimeout(() => {
|
|
shouldBe("topStorageEventCount", "0");
|
|
shouldBe("childStorageEventCount", "2");
|
|
finishJSTest();
|
|
}, 0);
|
|
}
|
|
}
|
|
|
|
function storageEventHandler(e) {
|
|
testFailed("Top frame received storage event.");
|
|
topStorageEventCount++;
|
|
}
|
|
addEventListener("storage", storageEventHandler);
|
|
|
|
onload = () => {
|
|
sessionStorageKey = uuidv4();
|
|
sessionStorageValue = "foo";
|
|
shouldBeNull("sessionStorage.getItem(sessionStorageKey)");
|
|
sessionStorage.setItem(sessionStorageKey, sessionStorageValue);
|
|
|
|
localStorageKey = uuidv4();
|
|
localStorageValue = "bar";
|
|
shouldBeFalse("sessionStorageKey === localStorageKey");
|
|
shouldBeNull("localStorage.getItem(localStorageKey)");
|
|
localStorage.setItem(localStorageKey, localStorageValue);
|
|
}
|
|
</script>
|
|
<iframe src="resources/storage-event-not-in-originator-frame.html">
|
|
</body>
|
|
</html>
|