| <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> |