3 <script src="../../inspector-test.js"></script>
4 <script src="../../elements-test.js"></script>
5 <link rel="stylesheet" href="resources/stylesheet-tracking.css" />
15 function addStyleSheet()
17 var styleElement = document.createElement("style");
18 styleElement.id = "style";
19 styleElement.type = "text/css";
20 styleElement.textContent = "@import url(\"resources/stylesheet-tracking-import.css\");\na { color: green; }"
21 document.head.appendChild(styleElement);
24 function removeImport()
26 document.getElementById("style").sheet.deleteRule(0);
29 function removeStyleSheet()
31 document.head.removeChild(document.getElementById("style"));
36 var iframe = document.createElement("iframe");
37 iframe.setAttribute("seamless", "seamless");
38 iframe.src = "resources/stylesheet-tracking-iframe.html";
39 document.body.appendChild(iframe);
44 return document.getElementsByTagName("iframe")[0];
47 function addIframeStyleSheets()
49 iframe().contentWindow.postMessage("addStyleSheets", "*");
52 function navigateIframe()
54 iframe().src = iframe().src;
57 function removeIframeStyleSheets()
59 iframe().contentWindow.postMessage("removeStyleSheets", "*");
62 function removeIframe()
64 var element = iframe();
65 element.parentElement.removeChild(element);
72 WebInspector.showPanel("elements");
73 WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetAdded, styleSheetAdded, null);
74 WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetRemoved, styleSheetRemoved, null);
75 var headers = WebInspector.cssModel.styleSheetHeaders();
76 InspectorTest.addResult(headers.length + " headers known:");
77 sortAndDumpData(headers);
79 InspectorTest.selectNodeAndWaitForStyles("inspected", step0);
84 InspectorTest.addResult("=== Adding iframe... ===");
85 InspectorTest.evaluateInPage("loadIframe()");
86 waitStyleSheetAdded(1, iframeAdded);
88 function iframeAdded()
90 InspectorTest.addResult("=== Adding iframe stylesheet... ===");
91 waitStyleSheetAdded(2, navigateIframe);
92 InspectorTest.evaluateInPage("addIframeStyleSheets()");
95 function navigateIframe()
97 InspectorTest.addResult("=== Navigating iframe... ===");
98 waitStyleSheetRemoved(3, frameNavigated);
99 InspectorTest.evaluateInPage("navigateIframe()");
101 function frameNavigated()
103 waitStyleSheetAdded(1, styleSheetsAdded);
106 function styleSheetsAdded()
108 InspectorTest.addResult("=== Adding iframe stylesheet... ===");
109 waitStyleSheetAdded(2, removeIframeStyleSheets);
110 InspectorTest.evaluateInPage("addIframeStyleSheets()");
114 function removeIframeStyleSheets()
116 InspectorTest.addResult("=== Removing iframe stylesheet... ===");
117 waitStyleSheetRemoved(2, step1)
118 InspectorTest.evaluateInPage("removeIframeStyleSheets()");
124 InspectorTest.addResult("=== Adding stylesheet... ===");
125 waitStyleSheetAdded(4, step2);
126 InspectorTest.evaluateInPage("addStyleSheet()");
131 InspectorTest.addResult("=== Removing @import... ===");
132 waitStyleSheetRemoved(3, step3);
133 InspectorTest.evaluateInPage("removeImport()");
138 InspectorTest.addResult("=== Removing stylesheet... ===");
139 waitStyleSheetRemoved(1, step4);
140 InspectorTest.evaluateInPage("removeStyleSheet()");
145 InspectorTest.addResult("=== Adding rule... ===");
146 waitStyleSheetAdded(1);
147 WebInspector.cssModel.addRule(inspectedNode.id, "#inspected", successCallback, failureCallback);
149 function successCallback()
151 InspectorTest.addResult("Rule added");
154 function failureCallback()
156 InspectorTest.addResult("Failed to add rule.");
157 InspectorTest.completeTest();
163 InspectorTest.addResult("=== Removing iframe... ===");
164 InspectorTest.evaluateInPage("removeIframe()");
165 waitStyleSheetRemoved(1, step6);
170 InspectorTest.completeTest();
175 var addedSheets = [];
177 function waitStyleSheetAdded(count, next)
179 addedSheetCount = count;
180 addedCallback = next;
183 function styleSheetAdded(event)
185 var header = event.data;
186 addedSheets.push(header);
188 if (addedSheetCount > 0)
190 else if (addedSheetCount < 0)
191 InspectorTest.addResult("Unexpected styleSheetAdded()");
193 InspectorTest.addResult("Stylesheets added:");
194 sortAndDumpData(addedSheets);
197 var callback = addedCallback;
198 addedCallback = null;
204 var removedSheetCount;
205 var removedSheets = [];
207 function waitStyleSheetRemoved(count, next)
209 removedSheetCount = count;
210 removedCallback = next;
213 function styleSheetRemoved(event)
215 var header = event.data;
216 removedSheets.push(header);
218 if (removedSheetCount > 0)
220 else if (removedSheetCount < 0)
221 InspectorTest.addResult("Unexpected styleSheetRemoved()");
223 InspectorTest.addResult("Stylesheets removed:");
224 sortAndDumpData(removedSheets);
226 if (removedCallback) {
227 var callback = removedCallback;
228 removedCallback = null;
233 function sortAndDumpData(sheets)
235 function sorter(a, b)
237 return a.sourceURL.localeCompare(b.sourceURL);
239 sheets = sheets.sort(sorter);
240 for (var i = 0; i < sheets.length; ++i) {
241 var header = sheets[i];
242 InspectorTest.addResult(" URL=" + trimURL(header.sourceURL));
243 InspectorTest.addResult(" origin=" + header.origin);
244 InspectorTest.addResult(" isInline=" + header.isInline);
245 InspectorTest.addResult(" hasSourceURL=" + header.hasSourceURL);
249 function trimURL(url)
253 var lastIndex = url.lastIndexOf("inspector/");
256 return ".../" + url.substr(lastIndex);
262 <body onload="runTest()">
264 Tests that the styleSheetAdded and styleSheetRemoved events are reported into the frontend. <a href="https://bugs.webkit.org/show_bug.cgi?id=105828">Bug 105828</a>.
267 <div id="inspected">Text</div>