<!DOCTYPE HTML>
<html>
  <head>
    <style type="text/css">
        /* Verify that warning is added to console when stylesheet is parsed */
        @media screen and (min-resolution: 96dpi) { }
        @media all and (min-resolution: 160dpcm) { }
        @media (resolution: 96dpi) { }
    </style>
    <style type="text/css" id="styleElement" media="all and (color)">
    </style>
</head>
  <body>
    <p>Test verifies that warning is added to console when dpi or dpcm CSS values are used for resolution media feature</p>

    <script type="text/javascript">
      if (window.testRunner)
        testRunner.dumpAsText();

      var styleElement = document.getElementById("styleElement");
      // Verify that warning is added to console when HTMLStyleElement is updated.
      styleElement.setAttribute("media", "(min-resolution: 2dpi)");
      styleElement.setAttribute("media", "(min-resolution: 2dpcm)");
      styleElement.setAttribute("media", "screen and (min-resolution: 5dpi)");
      styleElement.setAttribute("media", "screen and (min-resolution: 5dpcm)");
      styleElement.setAttribute("media", "all and (min-resolution: 10dpi)");
      styleElement.setAttribute("media", "all and (min-resolution: 10dpcm)");

      // Verify that warning is added to console when media listeners interface is used.
      window.matchMedia("screen and (max-resolution: 300dpi)");
      window.matchMedia("screen and (max-resolution: 300dpcm)");
      window.matchMedia("(resolution: 96dpi)");
      window.matchMedia("(resolution: 96dpcm)");
      window.matchMedia("all and (resolution: 96dpi)");
      window.matchMedia("all and (resolution: 96dpcm)");
    </script>
  </body>
</html>
