chromium/third_party/blink/web_tests/http/tests/cache/resources/location-reload-window.html

<!DOCTYPE html>
<html>
<body>
<h1>random</h1>
<script src="./random-cached.cgi"></script>
<script>
const lastRandomNumberKey = "lastRandomNumber";

window.addEventListener("message", e => {
  if (e.data != "START") {
    window.opener.postMessage("FAIL: unknown; " + e.data, location.origin);
  } else {
    // window.top.randomNumber should be set by random-cached.cgi.
    if (window.top === undefined || window.top.randomNumber === undefined) {
      window.opener.postMessage("FAIL: randomNumber isn't defined",
                                location.origin);
      return;
    }

    // If location.reload() is already triggered, lastRandomNumberKey should be
    // stored in the sessionStorage. Otherwise, this is the first load.
    const lastRandomNumberString = sessionStorage.getItem(lastRandomNumberKey);
    if (lastRandomNumberString !== null) {
      // sessionStorage returns DOMString and need to be converted to Number.
      const lastRandomNumber = Number(lastRandomNumberString);

      // Because the random-cached.cgi is a sub-resource, and set HTTP headers
      // to allow caching, location.reload() should follow the cache-protocol to
      // reuse the cached resource. That is to say the randomNumber should not
      // be changed on the reload.
      window.opener.postMessage(lastRandomNumber == top.randomNumber
                                    ? "PASS"
                                    : "FAIL: randomNumber was changed",
                                location.origin);
    } else {
      // Store the first randomNumber to the sessionStorage, and call reload().
      // This window will send "READY" again, then receive "START".
      sessionStorage.setItem(lastRandomNumberKey, top.randomNumber);
      location.reload();
    }
  }
}, false);

// Send "READY" message first so that parent window can ensure to send messages.
window.opener.postMessage("READY", location.origin);
</script>
</body>
</html>