<!DOCTYPE html>
<html>
  <head>
    <title>CSS integration - Font from external stylesheet inserted via a ProcessingInstruction</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="never">
  </head>
  <body>
    <p>Check that resources from external stylesheets (referenced from a
    ProcessingInstruction) are loaded with the referrer and referrer policy
    from the external stylesheet.</p>

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

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

        let processingInstruction =
          document.createProcessingInstruction(
            "xml-stylesheet", "href=\"" + css_url + "\" type=\"text/css\"");
        document.insertBefore(processingInstruction, document.firstChild);
        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, expected);
            });
      }, "Font from external stylesheet (from ProcessingInstruction).");
    </script>

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