<!DOCTYPE html>
<html>
  <head>
    <title>Tests that sandboxed iframe does not have CORS XHR access to its server</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)";

async_test((test) => {
  const xhr = new XMLHttpRequest;
  xhr.open("GET", get_host_info().HTTP_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 local 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_ORIGIN + path, "*");
    } else {
      assert_equals(evt.data, "Exception thrown. Sandboxed iframe XHR access was denied in 'send'.");
      test.done();
    }
  }), false);
}, "Sandboxed iframe is denied access to path");
    </script>
    <iframe id="frame" sandbox="allow-scripts" src="/XMLHttpRequest/resources/access-control-sandboxed-iframe.html">
    </iframe>
  </body>
</html>
