<html><head>
<title>Image load in unload handler</title>
<script>

var testCalled = false;

function test() {
    if (!testCalled) {
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }
        testCalled = true;
        return;
    }
    // We can't go to check-ping.php directly, since that doesn't start sending
    // a response until the ping data is detected, but unload handlers (where
    // we send the ping) are only run once we've begun receiving data from the
    // page being navigated to. Instead, we go through a dummy redirect page,
    // to make sure that the onunload handler has run before we get to 
    // check-ping.php.
    location.assign("resources/ping-redirect.html");
}

function ping() {
    var img = new Image(1, 1);
    img.src = "resources/save-Ping.php";
}

</script>
</head>
<body onload="test();" onunload="ping();">
<img src="resources/delete-ping.php" onload="test();" onerror="test();"></img>
Test case for https://bugs.webkit.org/show_bug.cgi?id=30457. Previously, if an image<br>
load was trigger from an unload handler, we would kill it almost immediately due to the<br>
navigation stopping all loaders. These loads now happen entirely in the background and detached<br>
from the DOM, so they're invisible to the normal resource load callback infrastructure. We generate a<br>
timestamp, then in the unload handler, we load an 'image' (actually a php script) that takes the<br>
timestamp as a parameter and saves it to a file.  The destination page is a php script that checks for<br>
the existence of that file and passes the test if the file contains the expected timestamp.<br>
</body></html>
