<?php
require_once '../resources/portabilityLayer.php';

// This test loads an uncacheable main resource and a cacheable image subresource.
// We then trigger a POST request, which redirects as a GET back to this page.
// On this GET request, the image should be loaded from the cache and no HTTP
// request should be sent. The image resource will return 404 if it receives
// a second request, which will cause us to FAIL.
// See https://bugs.webkit.org/show_bug.cgi?id=38690
header('Cache-Control: no-cache, no-store, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Expires: ' . gmdate(DATE_RFC1123, time()-1));

if ($_POST["submit"] == "redirect") {
    header('HTTP/1.1 302 Found');
    header('Location: post-redirect-get.php?finish=true');
    exit();
}
?>
<html>
<body>
<div id="result"></div>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}
    
function logAndFinish(message)
{
    document.getElementById("result").appendChild(document.createTextNode(message));
    var xhr = new XMLHttpRequest;
    xhr.open("GET", "../resources/reset-temp-file.php?filename=cache_post-redirect-get_state", false);
    xhr.send(null);
    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
<?php
clearstatcache();
if ($_GET["finish"] == "true") {
    // The initial load of the image might have been done from the cache. In that case, touch the
    // state file to indicate a load has already occurred.
    if (!file_exists(sys_get_temp_dir() . "/cache_post-redirect-get_state")) {
        echo "<script>";
        echo "xhr = new XMLHttpRequest;";
        echo "xhr.open('GET', '../resources/touch-temp-file.php?filename=cache_post-redirect-get_state', false);";
        echo "xhr.send(null);";
        echo "</script>";
    }
    echo "<img src='resources/post-image-to-verify.php?test=cache_post-redirect-get' onload=\"logAndFinish('PASS');\" onerror=\"logAndFinish('FAIL');\"></img>";
} else {
    echo "<form action='post-redirect-get.php' method='post'>";
    echo "<input type='submit' id='submit' name='submit' value='redirect'>";
    echo "</form>";
    echo "<img src='resources/post-image-to-verify.php?test=cache_post-redirect-get' onload=\"document.getElementById('submit').click();\" onerror=\"logAndFinish('FAIL on initial load');\"></img>";
} 
?>
</body>
</html>
