<!doctype html>
<meta charset=utf-8>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<p>Derived from historical testcase for <a href="http://bugs.webkit.org/show_bug.cgi?id=3420">WebKit bug 3420</a>:
XMLHttpRequest does not handle set-cookie headers.</p>

<script>
    function clearCookies()
    {
      return new Promise(resolve => {
        var req = new XMLHttpRequest;
        req.open("POST", "resources/get-set-cookie.py?clear=1");
        req.onload = () => resolve();
        req.send("");
      });
    }
    function getAndSetCookies()
    {
      return new Promise(resolve => {
        var req = new XMLHttpRequest;
        req.open("POST", "resources/get-set-cookie.py");
        req.onload = () => resolve(req.responseText);
        req.send("");
      });
    }

    promise_test(async function(t) {
      await clearCookies();
      var response = await getAndSetCookies();
      assert_equals(response.match(/.*WK-test=1.*/), null,
                    "The cookie must not be present after clear. clearCookies() failed.  Must be a bug in the test!");
      var response = await getAndSetCookies();
      assert_equals(response.match(/.*WK-test-secure=1.*/), null,
                    "a secure cookie was sent via HTTP");
      assert_regexp_match(response, /.*WK-test=1.*/, "an insecure cookie was sent");
      await clearCookies();
    }, "Basic non-cross-site cookie handling in XHR");
</script>
</html>
