<!DOCTYPE html> <meta charset="utf-8"> <meta name="flags" content="dom"> <title>CSS Test: CSSOM View matchMedia and MediaQueryList</title> <link rel="author" title="Rune Lillesveen" href="mailto:rune@opera.com"> <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#dom-window-matchmedia"> <link rel="help" href="https://www.w3.org/TR/cssom-view-1/#the-mediaquerylist-interface"> <link rel="help" href="https://www.w3.org/TR/cssom-1/#serializing-media-queries"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/matchMedia.js"></script> <div id="log"></div> <script> "use strict"; test(() => { assert_equals( typeof window.matchMedia, "function", "FATAL ERROR: The window.matchMedia function is not present. The rest of the testsuite will fail to run." ); }, "window.matchMedia is a function"); test(() => { const mql = window.matchMedia("all"); assert_equals(mql.media, "all"); assert_true(mql.matches); }, 'window.matchMedia("all") matches'); test(() => { const mql = window.matchMedia(""); assert_equals(mql.media, ""); assert_true(mql.matches); }, 'window.matchMedia("") matches'); test(() => { const mql = window.matchMedia("(min-width: 1px)"); assert_equals(mql.media, "(min-width: 1px)"); assert_true(mql.matches); }, 'window.matchMedia("(min-width: 1px)") matches'); test(() => { const mql = window.matchMedia("::"); assert_true(mql instanceof MediaQueryList); assert_equals(mql.media, "not all"); assert_false(mql.matches); }, 'media query with syntax error is serialized as "not all"'); promise_test(async t => { const iframe = await createIFrame(t, 200); const mql = iframe.contentWindow.matchMedia("(max-width: 199px), all and (min-width: 200px)"); assert_equals(mql.media, "(max-width: 199px), (min-width: 200px)"); assert_true(mql.matches); }, 'iframe.matchMedia("(max-width: 199px), all and (min-width: 200px)") is serialized w/o "all"'); promise_test(async t => { const iframe = await createIFrame(t); const mql = iframe.contentWindow.matchMedia("(min-aspect-ratio: 1/1)"); assert_true(mql.matches); }, 'iframe.matchMedia("(min-aspect-ratio: 1/1)") matches'); promise_test(async t => { const iframe = await createIFrame(t, 200); const mql = iframe.contentWindow.matchMedia("(width: 200px)"); assert_true(mql.matches); }, 'iframe.matchMedia("(width: 200px)") matches'); promise_test(async t => { const iframe = await createIFrame(t, 200, 100); const mql = iframe.contentWindow.matchMedia("(max-height: 50px)"); assert_false(mql.matches); }, 'iframe.matchMedia("(max-height: 50px)") matches'); promise_test(async t => { const iframe = await createIFrame(t, 200, 100); const mql = iframe.contentWindow.matchMedia("(min-width: 150px)"); assert_true(mql.matches); }, 'iframe.matchMedia("(min-width: 150px)") matches'); </script>