<!DOCTYPE html>
<p>Check that setting a custom getter for history.state works correctly and that PopStateEvent.state still has a correct value.</p>
<pre id=log></pre>
<script>
function log(msg) {
    document.querySelector("#log").innerHTML += msg + "<br>";
}

if (window.layoutTestController) {
    layoutTestController.clearBackForwardList();
    layoutTestController.dumpAsText();
    layoutTestController.waitUntilDone();
}

function test() {
    if (!("state" in history)) {
        log("FAIL: history.state is not defined");
        return;
    }

    try {
        Object.defineProperty(history, "state", { get: function () { return "oh hai" } });
    } catch (e) {
        // history.state is not configurable in JSC.
        log(e.name == "TypeError" ? "PASS" : ("FAIL: unexpected exception: " + e));
        layoutTestController.notifyDone();
        return;
    }

    if (history.state !== "oh hai") {
        log('FAIL: history.state != "oh hai"');
    }

    history.pushState(42, "", "");
    history.pushState(43, "", "");

    window.onpopstate = function(e) {
        if (e.state !== 42)
            log("FAIL: e.state expected 42, was " + e.state + " (of type " + typeof e.state + ")");
        else
            log("PASS");
        if (window.layoutTestController)
            layoutTestController.notifyDone();
    }

    history.back();
}

test();
</script>
