File: modulepreload-as.html

package info (click to toggle)
firefox 149.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,767,760 kB
  • sloc: cpp: 7,416,064; javascript: 6,752,859; ansic: 3,774,850; python: 1,250,473; xml: 641,578; asm: 439,191; java: 186,617; sh: 56,634; makefile: 18,856; objc: 13,092; perl: 12,763; pascal: 5,960; yacc: 4,583; cs: 3,846; lex: 1,720; ruby: 1,002; php: 436; lisp: 258; awk: 105; sql: 66; sed: 53; csh: 10; exp: 6
file content (87 lines) | stat: -rw-r--r-- 6,344 bytes parent folder | download
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<!doctype html>
<meta charset=utf-8>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
  // Compared to modulepreload.html, this tests behavior when elements are
  // initially on an HTML page instead of being added by Javascript.
  const scriptLikes = [
    'audioworklet',
    'paintworklet',
    'script',
    'serviceworker',
    'sharedworker',
    'worker',
  ];

  const goodAsValues = ['', 'invalid-dest', 'sCrIpT', 'style', 'json', ...scriptLikes];
  const linkPromises = {};

  function handleEvent(target, type) {
    const asValue = target.dataset.as;
    if (!linkPromises[asValue]) {
      linkPromises[asValue] = {};
      linkPromises[asValue].promise = new Promise((resolve) => {
        linkPromises[asValue].resolve = resolve;
      });
    }
    linkPromises[asValue].resolve({ target, eventType: type });
  }
</script>
<link rel="modulepreload" href="resources/module1.js?empty-string" as="" data-as="" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?audio" as="audio" data-as="audio" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?audioworklet" as="audioworklet" data-as="audioworklet" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?document" as="document" data-as="document" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?embed" as="embed" data-as="embed" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?font" as="font" data-as="font" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?frame" as="frame" data-as="frame" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?iframe" as="iframe" data-as="iframe" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?image" as="image" data-as="image" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?manifest" as="manifest" data-as="manifest" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?object" as="object" data-as="object" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?paintworklet" as="paintworklet" data-as="paintworklet" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?report" as="report" data-as="report" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?script" as="script" data-as="script" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?serviceworker" as="serviceworker" data-as="serviceworker" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?sharedworker" as="sharedworker" data-as="sharedworker" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?track" as="track" data-as="track" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?video" as="video" data-as="video" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?webidentity" as="webidentity" data-as="webidentity" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?worker" as="worker" data-as="worker" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?xslt" as="xslt" data-as="xslt" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?fetch" as="fetch" data-as="fetch" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?invalid-dest" as="invalid-dest" data-as="invalid-dest" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?iMaGe" as="iMaGe" data-as="iMaGe" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/module1.js?sCrIpT" as="sCrIpT" data-as="sCrIpT" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/dummy.css?style" as="style" data-as="style" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<link rel="modulepreload" href="resources/dummy.json?json" as="json" data-as="json" onload="handleEvent(this, 'load')" onerror="handleEvent(this, 'error')">
<script>
  const links = document.querySelectorAll('link[rel="modulepreload"]');
  for (const link of links) {
    const asValue = link.dataset.as;

    // Ensure promise exists (in case the event hasn't fired yet).
    if (!linkPromises[asValue]) {
      linkPromises[asValue] = {};
      linkPromises[asValue].promise = new Promise((resolve) => {
        linkPromises[asValue].resolve = resolve;
      });
    }

    const shouldSucceed = goodAsValues.includes(asValue);
    const description = shouldSucceed
      ? `Modulepreload should fire onload with as="${asValue}"`
      : `Modulepreload should fire onerror with as="${asValue}"`;

    promise_test(async t => {
      const { eventType } = await linkPromises[asValue].promise;

      if (shouldSucceed) {
        assert_equals(eventType, 'load', 'Expected onload to fire');
      } else {
        assert_equals(eventType, 'error', 'Expected onerror to fire');
      }
    }, description);
  }
</script>
<body>