53 lines
1.5 KiB
HTML
53 lines
1.5 KiB
HTML
<script>
|
|
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.dumpChildFramesAsText();
|
|
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 59+mb of state objects (but less than 61mb)");
|
|
|
|
try {
|
|
// Push 59+mb of state objects (while the string is exactly 1mb, it counts for a little more than 1mb)
|
|
for (var i = 1; i < 60; ++i)
|
|
history.pushState(0, 0, object);
|
|
} catch (e) {
|
|
log("Unexpected exception pushing > 59mb but < 60mb of state objects: " + e);
|
|
}
|
|
|
|
log("Replace the last 1mb object with a 2mb object, bringing the total to 60+mb");
|
|
object += object;
|
|
try {
|
|
history.replaceState(0, 0, object);
|
|
log("It fit.");
|
|
} catch (e) {
|
|
log("Unexpected exception replacing 1mb with 2mb, bringing the total to 60mb: " + e);
|
|
}
|
|
|
|
|
|
var iframe = document.createElement('iframe');
|
|
iframe.src = 'resources/replacestate-iframe.html'
|
|
document.body.appendChild(iframe);
|
|
}
|
|
|
|
window.onload = loaded;
|
|
|
|
</script>
|
|
<body>
|
|
Test should not crash.<br>
|
|
replaceState() in any frame should not always count against the global quota. Instead it should literally replace the most recent state object added from that frame.<br>
|
|
<div id="logger"></div>
|
|
</body>
|