<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<link rel="stylesheet" href="resources/external.css">
<style>body { color: blue; }</style>
<style>
html {
    /* Semicolon after value intentionally omitted. Test for https://webkit.org/b/170279. */
    -webkit-text-size-adjust: none
}
</style>
<script>
var style = document.createElement("style");
style.textContent = "body { color: gray; }";
document.head.appendChild(style);
</script>
</script>
<script>
function test()
{
    InspectorBackend.runAfterPendingDispatches(function() {
        let styleSheets = WI.cssManager.styleSheets;
        InspectorTest.expectThat(styleSheets.length === 4, "There should be four stylesheets.");

        for (let styleSheet of styleSheets) {
            InspectorTest.log("");
            InspectorTest.log(`URL: ${styleSheet.isInlineStyleTag() ? "<style> on " : ""}${sanitizeURL(styleSheet.url)}`);
            InspectorTest.log(`OFFSET: (${styleSheet.startLineNumber}, ${styleSheet.startColumnNumber})`);
            InspectorTest.expectThat(styleSheet.parentFrame, "Stylesheet should have a frame.");
        }

        InspectorTest.completeTest();
    });
}
</script>
</head>
<body onload="runTest()">
<p>Test CSS.getAllStyleSheets returns expected information for different style sheet sources.</p>
</body>
</html>
