<!-- webkit-test-runner [ enablePageCache=true ] -->
<!DOCTYPE html>
<html>
<head>
<script>
function runTest()
{
    var test = [
        '<!DOCTYPE html>',
        '<html>',
        '<iframe srcdoc="<script>',
        '                window.onfocus = function() {',
        '                    window.onblur = function () { alert(/iframe blurred/); };',
        '                    window.top.onfocus = function () { alert(/main frame focused/); };',
        '                    window.top.history.back();',
        '                };',
        '                window.focus();',
        '                <' + '/script>">',
        '</iframe>',
        '</html>',
    ].join("");
    window.location.href = "data:text/html," + test;
}

window.onpageshow = function (pageTransitionEvent)
{
    if (pageTransitionEvent.persisted) {
        // Navigated back to this page
        if (window.testRunner)
            testRunner.notifyDone();
    } else {
        // Newly loaded
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.dumpBackForwardList();
            testRunner.waitUntilDone();
        }
        window.setTimeout(runTest, 0); // Navigate on a zero timer to create a history entry.
    }
}
</script>
</head>
<body>
<p>This test PASSED if there is no assertion failure and you see two JavaScript alerts with messages &quot;iframe blurred&quot; and &quot;main frame focused&quot; in order. Otherwise, it FAILED.</p>
</body>
</html>
