<!DOCTYPE html>
<html>
  <head>
    <title>CSS integration - Font from internal stylesheet</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/common/utils.js"></script>
    <!-- Common global functions for referrer-policy tests. -->
    <script src="/common/security-features/resources/common.js"></script>
    <script src="/referrer-policy/generic/referrer-policy-test-case.js"></script>
    <meta name="referrer" content="origin">
  </head>
  <body>
    <p>Check that resources from internal stylesheets are loaded with
    the referrer and referrer policy from the document.</p>

    <div class="styled"></div>

    <script>
      promise_test(function(css_test) {
        let id = token();
        let css_url = location.protocol + "//www1." + location.hostname + ":" +
                      location.port +
                      "/common/security-features/subresource/font.py" + "?id=" +
                      id + "&type=font";
        let font_url = css_url + "&report-headers";

        let style = document.createElement("style");
        style.textContent = "@font-face { font-family: 'wpt'; font-style: normal; font-weight: normal; src: url(" + css_url + "); format('truetype'); } body { font-family: 'wpt';}";
        document.head.appendChild(style);
        return timeoutPromise(css_test, 1000)
          .then(() => requestViaXhr(font_url))
          .then(function(message) {
              assert_own_property(message, "headers");
              assert_own_property(message, "referrer");
              assert_equals(message.referrer, location.origin + "/");
            });
      }, "Font from internal stylesheet.");
    </script>

    <div id="log"></div>
  </body>
</html>
