<!DOCTYPE html>
<html>
  <head>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/common/get-host-info.sub.js"></script>
  </head>

  <body>
    <script>
      function createAndLoadIframe() {
        return new Promise(resolve => {
          addEventListener("message", function() {
            assert_true(true, "Iframe loaded");
            resolve();
          }, { once: true });

          let ifr = document.createElement('iframe');
          document.body.appendChild(ifr);
          ifr.src = get_host_info().HTTPS_REMOTE_ORIGIN + "/clear-site-data/support/iframe_executionContexts.html";
        });
      }

      function loadClearSiteDataResource(what) {
        return new Promise(resolve => {
          addEventListener("message", function() {
            assert_true(true, "Iframe re-loaded");
            resolve();
          }, { once: true });

          let image = new Image();
          image.src = get_host_info().HTTPS_REMOTE_ORIGIN + "/clear-site-data/support/echo-clear-site-data.py?" + what;
        });
      }

      promise_test(function(test) {
        return createAndLoadIframe()
          .then(() => loadClearSiteDataResource("executionContexts"))
      }, "executionContexts triggers the reload of contexts");

      promise_test(function(test) {
        return createAndLoadIframe()
          .then(() => loadClearSiteDataResource("*"));
      }, "* triggers the reload of contexts");
    </script>
  </body>
</html>

