| Index: LayoutTests/inspector/styles/stylesheet-tracking.html
|
| diff --git a/LayoutTests/inspector/styles/stylesheet-tracking.html b/LayoutTests/inspector/styles/stylesheet-tracking.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9ec3b4752eb6b6937a50d108090cefa9748155d4
|
| --- /dev/null
|
| +++ b/LayoutTests/inspector/styles/stylesheet-tracking.html
|
| @@ -0,0 +1,180 @@
|
| +<html>
|
| +<head>
|
| +<script src="../../http/tests/inspector/inspector-test.js"></script>
|
| +<script src="../../http/tests/inspector/elements-test.js"></script>
|
| +<script src="../../http/tests/inspector/debugger-test.js"></script>
|
| +<link rel="stylesheet" href="resources/stylesheet-tracking.css" />
|
| +
|
| +<style>
|
| +html {
|
| + font-size: 12px;
|
| +}
|
| +</style>
|
| +
|
| +<script>
|
| +
|
| +function addStyleSheet()
|
| +{
|
| + var styleElement = document.createElement("style");
|
| + styleElement.id = "style";
|
| + styleElement.type = "text/css";
|
| + styleElement.textContent = "@import url(\"resources/styles-new-API.css\");\na { color: green; }"
|
| + document.head.appendChild(styleElement);
|
| +}
|
| +
|
| +function removeImport()
|
| +{
|
| + document.getElementById("style").sheet.deleteRule(0);
|
| +}
|
| +
|
| +function removeStyleSheet()
|
| +{
|
| + document.head.removeChild(document.getElementById("style"));
|
| +}
|
| +
|
| +function test()
|
| +{
|
| + var inspectorResource;
|
| +
|
| + WebInspector.showPanel("elements");
|
| + WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetAdded, styleSheetAdded, null);
|
| + WebInspector.cssModel.addEventListener(WebInspector.CSSStyleModel.Events.StyleSheetRemoved, styleSheetRemoved, null);
|
| + var headers = WebInspector.cssModel.styleSheetHeaders();
|
| + InspectorTest.addResult(headers.length + " headers known:");
|
| + for (var i = 0; i < headers.length; ++i)
|
| + InspectorTest.addResult(i + ":\n" + headerData(headers[i]));
|
| +
|
| + InspectorTest.selectNodeAndWaitForStyles("inspected", step1);
|
| +
|
| + var inspectedNode;
|
| + function step1(node)
|
| + {
|
| + inspectedNode = node;
|
| + InspectorTest.addResult("=== Adding stylesheet... ===");
|
| + waitStyleSheetAdded(4, step2);
|
| + InspectorTest.evaluateInPage("addStyleSheet()");
|
| + }
|
| +
|
| + function step2()
|
| + {
|
| + InspectorTest.addResult("=== Removing @import... ===");
|
| + waitStyleSheetRemoved(3, step3);
|
| + InspectorTest.evaluateInPage("removeImport()");
|
| + }
|
| +
|
| + function step3()
|
| + {
|
| + InspectorTest.addResult("=== Removing stylesheet... ===");
|
| + waitStyleSheetRemoved(1, step4);
|
| + InspectorTest.evaluateInPage("removeStyleSheet()");
|
| + }
|
| +
|
| + function step4()
|
| + {
|
| + InspectorTest.addResult("=== Adding rule... ===");
|
| + WebInspector.cssModel.addRule(inspectedNode.id, "#inspected", successCallback, failureCallback);
|
| +
|
| + function successCallback()
|
| + {
|
| + InspectorTest.addResult("Rule added");
|
| + InspectorTest.completeTest();
|
| + }
|
| + function failureCallback()
|
| + {
|
| + InspectorTest.addResult("Failed to add rule.");
|
| + InspectorTest.completeTest();
|
| + }
|
| + }
|
| +
|
| + var addedCallback;
|
| + var addedSheetCount;
|
| + var addedSheets = [];
|
| +
|
| + function waitStyleSheetAdded(count, next)
|
| + {
|
| + addedSheetCount = count;
|
| + addedCallback = next;
|
| + }
|
| +
|
| + function styleSheetAdded(event)
|
| + {
|
| + var header = event.data;
|
| + addedSheets.push(header);
|
| + --addedSheetCount;
|
| + if (addedSheetCount > 0)
|
| + return;
|
| + InspectorTest.addResult("Stylesheets added:");
|
| + sortAndDumpData(addedSheets);
|
| + addedSheets = [];
|
| + if (addedCallback) {
|
| + var callback = addedCallback;
|
| + addedCallback = null;
|
| + callback();
|
| + }
|
| + }
|
| +
|
| + var removedCallback;
|
| + var removedSheetCount;
|
| + var removedSheets = [];
|
| +
|
| + function waitStyleSheetRemoved(count, next)
|
| + {
|
| + removedSheetCount = count;
|
| + removedCallback = next;
|
| + }
|
| +
|
| + function styleSheetRemoved(event)
|
| + {
|
| + var header = event.data;
|
| + removedSheets.push(header);
|
| + --removedSheetCount;
|
| + if (removedSheetCount > 0)
|
| + return;
|
| + InspectorTest.addResult("Stylesheets removed:");
|
| + sortAndDumpData(removedSheets);
|
| + removedSheets = [];
|
| + if (removedCallback) {
|
| + var callback = removedCallback;
|
| + removedCallback = null;
|
| + callback();
|
| + }
|
| + }
|
| +
|
| + function sortAndDumpData(sheets)
|
| + {
|
| + function sorter(a, b)
|
| + {
|
| + return a.sourceURL.localeCompare(b.sourceURL);
|
| + }
|
| + sheets = sheets.sort(sorter);
|
| + for (var i = 0; i < sheets.length; ++i)
|
| + InspectorTest.addResult(headerData(sheets[i]));
|
| + }
|
| +
|
| + function headerData(header)
|
| + {
|
| + return " URL=" + trimURL(header.sourceURL) + "\n origin=" + header.origin;
|
| + }
|
| +
|
| + function trimURL(url)
|
| + {
|
| + if (!url)
|
| + return url;
|
| + var lastIndex = url.lastIndexOf("inspector/");
|
| + if (lastIndex < 0)
|
| + return url;
|
| + return ".../" + url.substr(lastIndex);
|
| + }
|
| +}
|
| +</script>
|
| +</head>
|
| +
|
| +<body onload="runTest()">
|
| +<p>
|
| +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>.
|
| +</p>
|
| +
|
| +<div id="inspected">Text</div>
|
| +
|
| +</body>
|
| +</html>
|
|
|