<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("The total payload is currently 60+mb. Pushing a 1mb object brings that 61+mb.");

    try {
        history.pushState(0, 0, "#" + object);
        log("It fit.");
    } catch (e) {
        log("Unexpected exception pushing 1mb:" + e);  
    }
    
    log("The total payload is currently 61+mb. Replacing the last 1mb with 2mb brings that to 62+mb.");

    object += object;
    try {
        history.replaceState(0, 0, "#" + object);
        log("It fit.");
    } catch (e) {
        log("Unexpected exception replacing 1mb with 2mb:" + e);  
    }

    log("The total payload is currently 62+mb. Replacing the last 2mb with 4mb brings that to 64+mb, and should not fit.");

    object += object;
    try {
        history.replaceState(0, 0, "#" + object);
        log("It fit, but should not have.");
    } catch (e) {
        log("Expected exception replacing 2mb with 4mb:" + e);  
    }

    if (window.testRunner)
        testRunner.notifyDone();
}

window.onload = loaded;

</script>
<body>
<div id="logger"></div>
</body>
