<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>SendBeacon CORS preflight test</title>
    <script src=/resources/testharness.js></script>
    <script src=/resources/testharnessreport.js></script>
  </head>
  <body>
    <script src="/common/utils.js"></script>
    <script src="/common/get-host-info.sub.js"></script>
    <script>
var RESOURCES_DIR = "/WebKit/beacon/resources/";

function pollResult(test, id) {
  var checkUrl = RESOURCES_DIR + "beacon-preflight.py?cmd=get&id=" + id;

  return new Promise(resolve => {
    step_timeout(test.step_func(() => {
      fetch(checkUrl).then(response => {
        response.json().then(body => {
          resolve(body);
        });
      });
    }), 1000);
  });
}

function testCORSPreflightFailure(what) {
  var testBase = get_host_info().HTTP_REMOTE_ORIGIN + RESOURCES_DIR;
  var id = self.token();
  var testUrl = testBase + "beacon-preflight.py?allowCors=0&cmd=put&id=" + id;

  promise_test(function(test) {
    assert_true(navigator.sendBeacon(testUrl, what), "SendBeacon Succeeded");
    return pollResult(test, id) .then(result => {
      assert_equals(result['preflight'], 1, "Received preflight")
      assert_equals(result['preflight_referer'], document.URL, "Preflight referer header")
      assert_equals(result['preflight_requested_method'], "POST", "Preflight requested method")
      let requested_headers = result['preflight_requested_headers'].toLowerCase()
      assert_true(requested_headers.includes("content-type"), "Content-Type header is requested")
      assert_false(requested_headers.includes("referer"), "Referer header is requested")
      assert_false(requested_headers.includes("origin"), "Origin header is requested")
      assert_equals(result['beacon'], 0, "Did not receive beacon")
    });
  }, "CORS preflight failure test");
}

let blob = new Blob(["123"], {type: "application/octet-stream"});
testCORSPreflightFailure(blob);
    </script>
  </body>
</html>
