<!DOCTYPE html>
<html>
  <head>
    <title>Tests that sandboxed iframe does not have CORS XHR access to server with "Access-Control-Allow-Origin" set to the original origin</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/common/get-host-info.sub.js"></script>
  </head>
  <body>
    <script type="text/javascript">
const path = "/XMLHttpRequest/resources/pass.txt?pipe=" +
    "header(Cache-Control,no-store)|" +
    "header(Content-Type,text/plain)" +
    "header(Access-Control-Allow-Credentials,true)|" +
    "header(Access-Control-Allow-Origin," + get_host_info().HTTP_ORIGIN + ")";

async_test((test) => {
  const xhr = new XMLHttpRequest;
  xhr.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + path);
  xhr.send();
  xhr.onerror = test.unreached_func("Unexpected error");
  xhr.onload = test.step_func_done(() => {
    assert_equals(xhr.status, 200);
    assert_equals(xhr.responseText.trim(), "PASS");
  });
}, "Check that path exists and is accessible via CORS XHR request");

async_test((test) => {
  window.addEventListener("message", test.step_func((evt) => {
    if (evt.data === "ready") {
      document.getElementById("frame").contentWindow.postMessage(
          get_host_info().HTTP_REMOTE_ORIGIN + path, "*");
    } else {
      assert_equals(evt.data, "Exception thrown. Sandboxed iframe XHR access was denied in 'send'.");
      test.done();
    }
  }), false);
}, "Sandboxed iframe is denied CORS access to server that allows parent origin");
    </script>
    <iframe id="frame" sandbox="allow-scripts" src="/XMLHttpRequest/resources/access-control-sandboxed-iframe.html">
    </iframe>
  </body>
</html>
