3 <script type="text/javascript" src="../../http/tests/inspector-protocol/inspector-protocol-test.js"></script>
4 <script type="text/javascript">
7 InspectorTest.sendCommandOrDie("DOM.enable", {});
8 InspectorTest.sendCommandOrDie("CSS.enable", {}, onCSSEnabled);
10 function onCSSEnabled()
12 InspectorTest.sendCommandOrDie("CSS.getMediaQueries", {}, onMediaQueries);
15 function onMediaQueries(response)
17 function mediaComparator(media1, media2)
19 if (media1.text < media2.text)
21 if (media1.text > media2.text)
25 response.medias.sort(mediaComparator);
27 var styleSheetIds = [];
28 for (var i = 0; i < response.medias.length; ++i) {
29 var styleSheetId = response.medias[i].parentStyleSheetId;
30 if (styleSheetId && styleSheetIds.indexOf(styleSheetId) === -1)
31 styleSheetIds.push(styleSheetId);
33 if (!styleSheetIds.length) {
34 dumpMediaQueries(response.medias, {});
38 var styleSheetTextMap = {};
39 for (var i = 0; i < styleSheetIds.length; ++i) {
40 var callback = i === styleSheetIds.length - 1 ? dumpMediaQueries.bind(null, response.medias, styleSheetTextMap) : null;
41 InspectorTest.sendCommandOrDie("CSS.getStyleSheetText", {styleSheetId: styleSheetIds[i]}, onStyleSheetText.bind(null, styleSheetIds[i], styleSheetTextMap, callback));
45 function onStyleSheetText(styleSheetId, styleSheetTextMap, callback, response)
47 styleSheetTextMap[styleSheetId] = response.text;
52 function dumpMediaQueries(medias, styleSheetTextMap)
54 for (var i = 0; i < medias.length; ++i) {
55 var mediaRule = medias[i];
56 InspectorTest.log("mediaRule #" + i);
57 InspectorTest.log(" text: " + mediaRule.text);
58 InspectorTest.log(" source: " + mediaRule.source);
59 InspectorTest.log(" range: " + JSON.stringify(mediaRule.range));
60 if (mediaRule.parentStyleSheetId && mediaRule.range)
61 InspectorTest.log(" computedText: " + getComputedText(styleSheetTextMap[mediaRule.parentStyleSheetId], mediaRule.range));
62 if (!mediaRule.mediaList) {
63 InspectorTest.log(" mediaList is empty");
66 for (var j = 0; j < mediaRule.mediaList.length; ++j) {
67 var mediaQuery = mediaRule.mediaList[j];
68 var suffix = mediaRule.sourceURL.indexOf("active-media-queries.css") !== -1 ? " active: " + mediaQuery.active : "";
69 InspectorTest.log(" mediaQuery #" + j + suffix);
70 for (var k = 0; k < mediaQuery.expressions.length; ++k) {
71 var expression = mediaQuery.expressions[k];
72 InspectorTest.log(" mediaExpression #" + k);
73 InspectorTest.log(" feature: " + expression.feature);
74 InspectorTest.log(" value: " + expression.value);
75 InspectorTest.log(" unit: " + expression.unit);
76 if (expression.valueRange) {
77 InspectorTest.log(" valueRange: " + JSON.stringify(expression.valueRange));
78 if (mediaRule.parentStyleSheetId)
79 InspectorTest.log(" computedText: " + getComputedText(styleSheetTextMap[mediaRule.parentStyleSheetId], expression.valueRange));
81 if (expression.computedLength)
82 InspectorTest.log(" computed length: " + expression.computedLength);
86 InspectorTest.completeTest();
89 function getComputedText(text, range)
91 var lines = text.split("\n");
93 for (var line = range.startLine; line <= range.endLine; ++line) {
94 var start = line === range.startLine ? range.startColumn : 0;
95 var end = line === range.endLine ? range.endColumn : lines[line].length;
96 result.push(lines[line].substring(start, end));
98 return result.join("\\n");
102 <link rel="stylesheet" media="print and (min-width: 8.5in)" href="./resources/media-queries.css"></link>
103 <link rel="stylesheet" href="./resources/active-media-queries.css"></link>
105 @media screen and (device-aspect-ratio: 16/9), screen and (device-aspect-ratio: 16/10) {
110 @media (max-width: 200px) and (min-width: 100px) {
118 <body onload="runTest()">