<!DOCTYPE html>
<body>
<script src="/js-test-resources/js-test-pre.js"></script>
<script>
description("Make sure that we properly remove cached entry if the entry is no longer cacheable after revalidation");
jsTestIsAsync = true;

var id = Math.floor((Math.random() * 1000000000000));
var bugReproduced = true;

function fetch(url) {
  return new Promise(function (resolve, reject) {
    var xhr = new XMLHttpRequest(url);
    xhr.onerror = reject;
    xhr.onload = function () {
      resolve({status: xhr.status, body: JSON.parse(xhr.responseText)});
    };
    xhr.open('GET', url);
    xhr.send();
  })
}

function fetchResource() {
  internals.clearMemoryCache();
  return fetch('resources/json.php?id=' + id).then(function (resp) {
    if (resp.body.version === 2) {
      bugReproduced = false;
    }
    debug(resp.status + ': ' + JSON.stringify(resp.body));
  });
}

onload = function() {
  fetchResource()
    .then(fetchResource)
    .then(fetchResource)
    .then(fetchResource)
    .then(fetchResource)
    .then(function () {
      shouldBeFalse("bugReproduced");
      finishJSTest();
    })
    .catch(console.log.bind(console));
}

</script>
<script src="/js-test-resources/js-test-post.js"></script>
</body>
