| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script> |
| function addExternalStyleSheet() { |
| let link = document.createElement("link"); |
| link.id = "externalStyleSheetId"; |
| link.rel = "stylesheet"; |
| link.href = "resources/external.css"; |
| document.head.appendChild(link); |
| } |
| |
| function removeExternalStyleSheet() { |
| document.getElementById("externalStyleSheetId").remove(); |
| } |
| |
| function disableExternalStyleSheetViaMediaAttribute() { |
| document.getElementById("externalStyleSheetId").media = "print"; |
| } |
| |
| function enableExternalStyleSheetViaMediaAttribute() { |
| document.getElementById("externalStyleSheetId").media = "screen"; |
| } |
| |
| function addStyleTag() { |
| let style = document.createElement("style"); |
| style.id = "inlineStyleId"; |
| style.textContent = "body { color: red; }"; |
| document.body.appendChild(style); |
| } |
| |
| function removeStyleTag() { |
| document.getElementById("inlineStyleId").remove(); |
| } |
| |
| function disableStyleSheet() { |
| document.styleSheets[0].disabled = true; |
| } |
| |
| function enableStyleSheet() { |
| document.styleSheets[0].disabled = false; |
| } |
| |
| function test() |
| { |
| let suite = InspectorTest.createAsyncSuite("CSS.StyleSheetEvents.Basic"); |
| |
| suite.addTestCase({ |
| name: "CheckNoStyleSheets", |
| description: "Ensure there are currently no stylesheets.", |
| test(resolve, reject) { |
| InspectorTest.expectThat(WI.cssStyleManager.styleSheets.length === 0, "Should be no stylesheets."); |
| resolve(); |
| } |
| }); |
| |
| function appendStyleSheetTests(args) { |
| let {title, addExpression, removeExpression, checkStyleSheetAddedCallback, checkStyleSheetRemovedCallback, extraEnableDisableTests} = args; |
| |
| let addedStyleSheet; |
| |
| suite.addTestCase({ |
| name: `Add${title}`, |
| test(resolve, reject) { |
| WI.cssStyleManager.awaitEvent(WI.CSSStyleManager.Event.StyleSheetAdded) |
| .then((event) => { |
| addedStyleSheet = event.data.styleSheet; |
| InspectorTest.expectThat(addedStyleSheet instanceof WI.CSSStyleSheet, "StyleSheetAdded event should fire."); |
| if (checkStyleSheetRemovedCallback) |
| checkStyleSheetAddedCallback(addedStyleSheet); |
| }) |
| .then(resolve, reject); |
| |
| InspectorTest.evaluateInPage(addExpression); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: `Disable${title}`, |
| description: "Disable the newly added stylesheet.", |
| test(resolve, reject) { |
| WI.cssStyleManager.awaitEvent(WI.CSSStyleManager.Event.StyleSheetRemoved) |
| .then((event) => { |
| InspectorTest.assert(event.data.styleSheet instanceof WI.CSSStyleSheet, "Event data should be a CSSStyleSheet"); |
| InspectorTest.expectThat(addedStyleSheet === event.data.styleSheet, "StyleSheetRemoved event should fire for the same CSSStyleSheet."); |
| }) |
| .then(resolve, reject); |
| |
| InspectorTest.evaluateInPage("disableStyleSheet()"); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: `Enable${title}`, |
| description: "Enable the just disabled stylesheet.", |
| test(resolve, reject) { |
| WI.cssStyleManager.awaitEvent(WI.CSSStyleManager.Event.StyleSheetAdded) |
| .then((event) => { |
| InspectorTest.assert(event.data.styleSheet instanceof WI.CSSStyleSheet, "Event data should be a CSSStyleSheet"); |
| InspectorTest.expectThat(addedStyleSheet !== event.data.styleSheet, "StyleSheetAdded event should fire with a new CSSStyleSheet."); |
| addedStyleSheet = event.data.styleSheet; |
| }) |
| .then(resolve, reject); |
| |
| InspectorTest.evaluateInPage("enableStyleSheet()"); |
| } |
| }); |
| |
| if (extraEnableDisableTests) { |
| let {title: extraDisableTitle, expression: extraDisableExpression} = extraEnableDisableTests.shift(); |
| let {title: extraEnableTitle, expression: extraEnableExpression} = extraEnableDisableTests.shift(); |
| |
| suite.addTestCase({ |
| name: extraDisableTitle, |
| test(resolve, reject) { |
| WI.cssStyleManager.awaitEvent(WI.CSSStyleManager.Event.StyleSheetRemoved) |
| .then((event) => { |
| InspectorTest.assert(event.data.styleSheet instanceof WI.CSSStyleSheet, "Event data should be a CSSStyleSheet"); |
| InspectorTest.expectThat(addedStyleSheet === event.data.styleSheet, "StyleSheetRemoved event should fire for the same CSSStyleSheet."); |
| }) |
| .then(resolve, reject); |
| |
| InspectorTest.evaluateInPage(extraDisableExpression); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: extraEnableTitle, |
| test(resolve, reject) { |
| WI.cssStyleManager.awaitEvent(WI.CSSStyleManager.Event.StyleSheetAdded) |
| .then((event) => { |
| InspectorTest.assert(event.data.styleSheet instanceof WI.CSSStyleSheet, "Event data should be a CSSStyleSheet"); |
| InspectorTest.expectThat(addedStyleSheet !== event.data.styleSheet, "StyleSheetAdded event should fire with a new CSSStyleSheet."); |
| addedStyleSheet = event.data.styleSheet; |
| }) |
| .then(resolve, reject); |
| |
| InspectorTest.evaluateInPage(extraEnableExpression); |
| } |
| }); |
| } |
| |
| suite.addTestCase({ |
| name: `Remove${title}`, |
| test(resolve, reject) { |
| WI.cssStyleManager.awaitEvent(WI.CSSStyleManager.Event.StyleSheetRemoved) |
| .then((event) => { |
| InspectorTest.expectThat(event.data.styleSheet instanceof WI.CSSStyleSheet, "StyleSheetAdded event should fire."); |
| if (checkStyleSheetRemovedCallback) |
| checkStyleSheetRemovedCallback(event.data.styleSheet); |
| addedStyleSheet = null; |
| }) |
| .then(resolve, reject); |
| |
| InspectorTest.evaluateInPage(removeExpression); |
| } |
| }); |
| } |
| |
| appendStyleSheetTests({ |
| title: "StyleTag", |
| addExpression: "addStyleTag()", |
| removeExpression: "removeStyleTag()", |
| }); |
| |
| appendStyleSheetTests({ |
| title: "ExternalStyleSheet", |
| addExpression: "addExternalStyleSheet()", |
| removeExpression: "removeExternalStyleSheet()", |
| checkStyleSheetAddedCallback: (styleSheet) => { InspectorTest.log("Added StyleSheet with URL: " + sanitizeURL(styleSheet.url)); }, |
| checkStyleSheetRemovedCallback: (styleSheet) => { InspectorTest.log("Removed StyleSheet with URL: " + sanitizeURL(styleSheet.url)); }, |
| extraEnableDisableTests: [ |
| {title: "DisableExternalStyleSheetViaMediaAttribute", expression: "disableExternalStyleSheetViaMediaAttribute()"}, |
| {title: "EnableExternalStyleSheetViaMediaAttribute", expression: "enableExternalStyleSheetViaMediaAttribute()"}, |
| ], |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Test for CSS.styleSheetAdded and CSS.styleSheetRemoved events.</p> |
| </body> |
| </html> |