Bug 1909074. Don't pass OFFSET_BY_ORIGIN to GetResultingTransformMatrix when it's...
[gecko.git] / layout / style / test / test_load_events_on_stylesheets.html
blob7344e27b22032e5bec5fb2d1a23059c8afa46c9e
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=185236
5 -->
6 <head>
7 <title>Test for Bug 185236</title>
8 <script src="/tests/SimpleTest/SimpleTest.js"></script>
9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
10 <script>
11 var pendingEventCounter = 0;
12 SimpleTest.waitForExplicitFinish();
13 addLoadEvent(function() {
14 is(pendingEventCounter, 0,
15 "How did onload for the page fire before onload for all the stylesheets?");
16 SimpleTest.finish();
17 });
18 // Count the link we're about to parse
19 pendingEventCounter = 1;
20 </script>
21 <link rel="stylesheet" href="data:text/css,*{}"
22 onload="--pendingEventCounter;
23 ok(true, 'Load event firing on basic stylesheet')"
24 onerror="--pendingEventCounter;
25 ok(false, 'Error event firing on basic stylesheet')">
26 </head>
27 <body>
28 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=185236">Mozilla Bug 185236</a>
29 <p id="display"></p>
30 <div id="content" style="display: none">
32 </div>
33 <pre id="test">
34 <script>
35 /** Test for Bug 185236 **/
37 function checkSheetComplete(sheet, length) {
38 try {
39 is(sheet.cssRules.length, length, `Should be loaded with ${length} rule(s)`);
40 } catch (e) {
41 ok(false, "Sheet has not been loaded completely");
46 // There should be usually 1 pending event but the load event might have fired
47 // if the parser yields between the link and starting the script execution.
48 const pendingEventCounterAtStart = pendingEventCounter;
50 ok(pendingEventCounter <= 1, `There should be at most one pending event, got ${pendingEventCounterAtStart}`);
52 is(document.styleSheets.length, 2, "Should have two stylesheets");
53 checkSheetComplete(document.styleSheets[1], 1);
55 // Test sheet that will already be complete when we write it out
56 ++pendingEventCounter;
57 document.write('<link rel="stylesheet" href="data:text/css,*{}"\
58 onload="--pendingEventCounter;\
59 ok(true, \'Load event firing on basic stylesheet\')"\
60 onerror="--pendingEventCounter;\
61 ok(false, \'Error event firing on basic stylesheet\')">');
63 // Make sure we have that second stylesheet
64 is(document.styleSheets.length, 3, "Should have three stylesheets");
66 // Make sure that the second stylesheet is all loaded
67 // If we ever switch away from sync loading of already-complete sheets, this
68 // test will need adjusting
69 checkSheetComplete(document.styleSheets[2], 1);
71 // Make sure the load event for that stylesheet has not fired yet
72 is(pendingEventCounter, pendingEventCounterAtStart + 1, "After first document write");
73 ++pendingEventCounter;
75 document.write('<style\
76 onload="--pendingEventCounter;\
77 ok(true, \'Load event firing on inline stylesheet\')"\
78 onerror="--pendingEventCounter;\
79 ok(false, \'Error event firing on inline stylesheet\')"></style>');
81 // Make sure the load event for that second stylesheet has not fired yet
82 is(pendingEventCounter, pendingEventCounterAtStart + 2, "after second document write");
83 ++pendingEventCounter;
85 document.write('<link rel="stylesheet" href="http://www.example.com"\
86 onload="--pendingEventCounter;\
87 ok(false, \'Load event firing on broken stylesheet 1\')"\
88 onerror="--pendingEventCounter;\
89 ok(true, \'Error event firing on broken stylesheet 1\')">');
90 ++pendingEventCounter;
92 var link = document.createElement("link");
93 link.rel = "stylesheet";
94 link.href = "http://www.example.com";
95 link.onload = function() { --pendingEventCounter;
96 ok(false, 'Load event firing on broken stylesheet 2');
98 link.onerror = function() { --pendingEventCounter;
99 ok(true, 'Error event firing on broken stylesheet 2');
101 document.body.appendChild(link);
103 ++pendingEventCounter;
104 link = document.createElement("link");
105 link.rel = "stylesheet";
106 link.href = "data:text/css,*{}";
107 link.onload = function() { --pendingEventCounter;
108 ok(true, 'Load event firing on external stylesheet');
110 link.onerror = function() { --pendingEventCounter;
111 ok(false, 'Error event firing on external stylesheet');
113 document.body.appendChild(link);
115 // If we ever switch away from sync loading of already-complete sheets, this
116 // test will need adjusting
117 checkSheetComplete(link.sheet, 1);
119 ++pendingEventCounter;
120 link = document.createElement("link");
121 link.rel = "stylesheet";
122 link.href = "data:text/css,@import url('data:text/css,*{}')";
123 link.onload = function() { --pendingEventCounter;
124 ok(true, 'Load event firing on external stylesheet');
126 link.onerror = function() { --pendingEventCounter;
127 ok(false, 'Error event firing on external stylesheet');
129 document.body.appendChild(link);
131 ++pendingEventCounter;
132 link = document.createElement("link");
133 link.rel = "stylesheet";
134 link.href = "data:text/css,@import url('http://www.example.com')";
135 link.onload = function() { --pendingEventCounter;
136 ok(false, 'Load event firing on broken stylesheet 3');
138 link.onerror = function() { --pendingEventCounter;
139 ok(true, 'Error event firing on broken stylesheet 3');
141 document.body.appendChild(link);
143 function absoluteURL(relativeURL) {
144 return new URL(relativeURL, location.href).href;
147 ++pendingEventCounter;
148 link = document.createElement("link");
149 link.rel = "stylesheet";
150 link.href = `data:text/css,@import url('http://www.example.com'); @import url(${absoluteURL('slow_ok_sheet.sjs')});`;
151 link.onload = function() { --pendingEventCounter;
152 ok(false, 'Load event firing on broken stylesheet 4');
154 link.onerror = function() { --pendingEventCounter;
155 ok(true, 'Error event firing on broken stylesheet 4');
157 document.body.appendChild(link);
159 ++pendingEventCounter;
160 link = document.createElement("link");
161 link.rel = "stylesheet";
162 link.href = `data:text/css,@import url(${absoluteURL('slow_broken_sheet.sjs')}); @import url('data:text/css,');`;
163 link.onload = function() { --pendingEventCounter;
164 ok(false, 'Load event firing on broken stylesheet 5');
166 link.onerror = function() { --pendingEventCounter;
167 ok(true, 'Error event firing on broken stylesheet 5');
169 document.body.appendChild(link);
171 // Make sure the load events for all those stylesheets have not fired yet
172 is(pendingEventCounter, pendingEventCounterAtStart + 9, "There should be nine more pending events");
173 </script>
174 </pre>
175 </body>
176 </html>