<!DOCTYPE html>
<html>
  <head>
    <title>CSS integration - child css 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="origin">
  </head>
  <body>
    <p>Check that child css are loaded with the referrer and referrer policy the
    external stylesheet(referenced from a ProcessingInstruction).</p>
    <div class="styled"></div>

    <script>
      promise_test(function(css_test) {
        let id = token();
        let url_prefix = location.protocol + "//www1." + location.hostname + ":" +
                         location.port +
                         "/common/security-features/subresource/stylesheet.py?id=" +
                         id;
        let css_url = url_prefix + "&amp;import-rule";
        let expected = url_prefix + "&import-rule";
        let check_url = url_prefix + "&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(check_url))
          .then(function(message) {
                assert_own_property(message, "headers");
                assert_own_property(message, "referrer");
                assert_equals(message.referrer, expected);
            });
      }, "Child css via a ProcessingInstruction.");
    </script>

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