<!DOCTYPE html>
<meta charset="utf-8"/>
<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/fetch/sec-metadata/resources/helper.js></script>
<body>
<script>
  promise_test(t => {
    return new Promise((resolve, reject) => {
      let key = "embed-same-origin";

      let e = document.createElement('embed');
      e.src = "https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
      e.onload = e => {
        let expected = {"destination":"embed", "site":"same-origin"};
        fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
          .then(response => response.text())
          .then(text => assert_header_equals(text, expected))
          .then(_ => resolve())
          .catch(e => reject(e));
      };

      document.body.appendChild(e);
    })
  }, "Same-Origin embed");

  promise_test(t => {
    return new Promise((resolve, reject) => {
      let key = "embed-same-site";

      let e = document.createElement('embed');
      e.src = "https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
      e.onload = e => {
        let expected = {"destination":"embed", "site":"same-site"};
        fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
          .then(response => response.text())
          .then(text => assert_header_equals(text, expected))
          .then(_ => resolve())
          .catch(e => reject(e));
      };

      document.body.appendChild(e);
    })
  }, "Same-Site embed");

  promise_test(t => {
    return new Promise((resolve, reject) => {
      let key = "embed-cross-site";

      let e = document.createElement('embed');
      e.src = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
      e.onload = e => {
        let expected = {"destination":"embed", "site":"cross-site"};
        fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
          .then(response => response.text())
          .then(text => assert_header_equals(text, expected))
          .then(_ => resolve())
          .catch(e => reject(e));
      };

      document.body.appendChild(e);
    })
  }, "Cross-Site embed");
</script>
