blob: d05637ab7b8cbaf8835a68b450a7a5d8ac498abd [file] [log] [blame]
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function log(msg) {
document.getElementById("logger").innerHTML += msg + "<br>";
}
function loaded()
{
// Make a 512k character string, which computes as 1mb of payload.
var object = "12345678";
for (var i = 0; i < 16; ++i)
object += object;
log("Pushing 63+mb of state objects (but less than 64mb)");
try {
// Push 63+mb of state objects (while the string is exactly 1mb, it counts for a little more than 1mb)
for (var i = 1; i < 64; ++i)
history.pushState(0, 0, object);
} catch (e) {
log("Unexpected exception pushing > 63mb but < 64mb of state objects: " + e);
}
log ("Replacing the last state object with one that should fit");
try {
// replaceState with a 1mb state object.
// If replaceState counts against the global limit, this will cause an exception.
// But it should work.
history.replaceState(0, 0, object);
log("It fit");
} catch (e) {
log("Unexpected exception replacing the last state object: " + e);
}
// Make the string be 1024k characters, which computes as 2mb of payload.
object += object;
log ("Replacing the last state object with one that should not fit");
try {
// Replacing the 63rd 1mb string with a 2mb string *should* still trigger the limit.
history.replaceState(0, 0, object);
log("It fit, but should not have");
} catch (e) {
log("Expected exception replacing the last state object: " + e);
}
if (window.testRunner)
testRunner.notifyDone();
}
window.onload = loaded;
</script>
<body>
Test should not crash.<br>
replaceState() should not always count against the global quota. Instead it should literally replace the most recent state object added.<br>
<div id="logger"></div>
</body>