<!DOCTYPE html>
<meta charset="utf-8"/>
<meta name="variant" content="">
<meta name="variant" content="?legacy-samesite">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/cookie-helper.sub.js"></script>
<script>
  function create_test(origin, target, expectedStatus, title) {
    promise_test(t => {
      var value = "" + Math.random();
      return resetSameSiteCookies(origin, value)
        .then(_ => {
          return new Promise((resolve, reject) => {
            var f = document.createElement('form');
            f.action = target + "/cookies/resources/postToParent.py";
            f.target = "_blank";
            f.method = "POST";

            var reloaded = false;
            var msgHandler = e => {
              try {
                getSameSiteVerifier()(expectedStatus, value, e.data, DomSameSiteStatus.SAME_SITE);
              } catch (e) {
                reject(e);
              }

              if (reloaded) {
                window.removeEventListener("message", msgHandler);
                e.source.close();
                resolve("Popup received the cookie.");
              } else {
                reloaded = true;
                e.source.postMessage("reload", "*");
              }
            };
            window.addEventListener("message", msgHandler);

            document.body.appendChild(f);
            f.submit();
          });
        });
    }, title);
  }

  create_test(SECURE_ORIGIN, SECURE_ORIGIN, SameSiteStatus.STRICT, "Reloaded same-host top-level form POSTs are strictly same-site");
  create_test(SECURE_SUBDOMAIN_ORIGIN, SECURE_SUBDOMAIN_ORIGIN, SameSiteStatus.STRICT, "Reloaded subdomain top-level form POSTs are strictly same-site");
  create_test(SECURE_CROSS_SITE_ORIGIN, SECURE_CROSS_SITE_ORIGIN, SameSiteStatus.CROSS_SITE, "Reloaded cross-site top-level form POSTs are not same-site");
</script>
