blob: 8e7ac52f0076863d58e8ced2dde173a35751c2d2 [file] [log] [blame]
<!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.cssManager.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.cssManager.awaitEvent(WI.CSSManager.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.cssManager.awaitEvent(WI.CSSManager.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.cssManager.awaitEvent(WI.CSSManager.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.cssManager.awaitEvent(WI.CSSManager.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.cssManager.awaitEvent(WI.CSSManager.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.cssManager.awaitEvent(WI.CSSManager.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>