File: link-style-error.js

package info (click to toggle)
thunderbird 1%3A91.12.0-1~deb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 3,008,300 kB
  • sloc: cpp: 6,084,052; javascript: 4,790,441; ansic: 3,341,486; python: 862,958; asm: 366,542; xml: 204,277; java: 152,477; sh: 111,376; makefile: 21,388; perl: 15,312; yacc: 4,583; objc: 3,026; lex: 1,720; exp: 762; pascal: 635; awk: 564; sql: 453; php: 436; lisp: 432; ruby: 99; sed: 69; csh: 45
file content (47 lines) | stat: -rw-r--r-- 1,961 bytes parent folder | download | duplicates (26)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
["<link>", "@import"].forEach(linkType => {
  [
   ["same-origin", "resources/css.py"],
   ["cross-origin", get_host_info().HTTP_REMOTE_ORIGIN + "/html/semantics/document-metadata/the-link-element/resources/css.py"]
  ].forEach(originType => {
    ["no Content-Type", "wrong Content-Type", "broken Content-Type"].forEach(contentType => {
      ["no nosniff", "nosniff"].forEach(nosniff => {
        async_test(t => {
          const l = document.createElement("link");
          t.add_cleanup(() => l.remove());
          if (nosniff === "nosniff" || contentType === "wrong Content-Type" && (document.compatMode === "CSS1Compat" || originType[0] === "cross-origin")) {
            l.onerror = t.step_func_done();
            l.onload = t.unreached_func("error event should have fired");
          } else {
            l.onload = t.step_func_done();
            l.onerror = t.unreached_func("load event should have fired");
          }
          l.rel = "stylesheet";
          let query = [];
          if (contentType === "broken Content-Type") {
            query.push("content_type=oops");
          } else if (contentType === "wrong Content-Type") {
            query.push("content_type=text/plain")
          }
          if (nosniff === "nosniff") {
            query.push("nosniff");
          }
          let stringQuery = "";
          query.forEach(val => {
            if (stringQuery === "") {
              stringQuery += "?" + val;
            } else {
              stringQuery += "&" + val;
            }
          });
          const link = new URL(originType[1] + stringQuery, location).href;
          if (linkType === "<link>") {
            l.href = link;
          } else {
            l.href = "data:text/css,@import url(" + link + ");";
          }
          document.head.appendChild(l);
        }, "Stylesheet loading using " + linkType + " with " + contentType + ", " + originType[0] + ", and " + nosniff);
      });
    });
  });
});