<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>

<div id="detector"></div>

<style>
    #detector { width: 100px; }
    @media (-webkit-min-device-pixel-ratio: 1) { #detector { width: 10px; } }
    @media print and (-webkit-min-device-pixel-ratio: 3) { #detector { width: 30px; } }
</style>

<script>
    description("CSS3 media query test: -webkit-device-pixel-ratio combined with print.")

    if (window.testRunner && window.internals) {
        window.testRunner.dumpAsText();

        function resolutionFromStyle() {
            var width = getComputedStyle(document.getElementById("detector")).width;
            switch (width) {
                case "10px":
                    return 1;
                case "30px":
                    return 3;
                case "31px":
                    return 3.125;
                default:
                    return undefined;
            }
        }

        function appendMediaRule(rule) {
            var lastStyleSheet = document.styleSheets[document.styleSheets.length - 1];
            lastStyleSheet.insertRule(rule, lastStyleSheet.cssRules.length);
        }

        shouldBe("matchMedia('(-webkit-min-device-pixel-ratio: 1)').matches", "true");
        shouldBe("resolutionFromStyle()", "1");

        // Test printing.

        window.internals.settings.setMediaTypeOverride("print");
        shouldBe("matchMedia('(-webkit-min-device-pixel-ratio: 3)').matches", "true");

        // Should match the one requiring 'print' media type.
        shouldBe("resolutionFromStyle()", "3");

        // As well as those matching 'all'.
        appendMediaRule("@media (-webkit-min-device-pixel-ratio: 3.125) { #detector { width: 31px; } }");
        shouldBe("resolutionFromStyle()", "3.125");
    }
</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
