<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
</head>
<body>
<script>
    description("This test verifies behavior of the ReportScreenSizeInPhysicalPixelsQuirk setting.");

    if (window.testRunner)
        testRunner.setBackingScaleFactor(2, function() {});
    else
        debug("WARN: This test depends on availability of window.testRunner.");

    var scalableInputs = [
        "screen.width", "screen.height",
        "screen.availWidth", "screen.availHeight",
        "screen.availLeft", "screen.availTop",
        "outerWidth", "outerHeight",
        "screenX", "screenY"
    ];
    var unscalableInputs = [ "innerWidth", "innerHeight" ];

    var initialScalableValues = getWindowValues(scalableInputs);
    var initialUnscalableValues = getWindowValues(unscalableInputs);
    var expectedValues = initialScalableValues.map(function(x) { return x * window.devicePixelRatio; });
    expectedValues = expectedValues.concat(initialUnscalableValues);

    if (window.internals)
        internals.settings.setReportScreenSizeInPhysicalPixelsQuirk(true);
    else
        debug("WARN: This test depends on the ReportScreenSizeInPhysicalPixelsQuirk setting to be true.");

    var actualValues = getWindowValues(scalableInputs).concat(getWindowValues(unscalableInputs));
    var allInputs = scalableInputs.concat(unscalableInputs);
    for (var i = 0; i < allInputs.length; ++i) {
        if (expectedValues[i] == actualValues[i])
            testPassed(allInputs[i]);
        else
            testFailed(actualValues[i] + " is not " + expectedValues[i] + " for " + allInputs[i]);
    }

    function getWindowValues(inputs) {
        var result = [];
        for (var i = 0; i < inputs.length; ++i)
            result[i] = eval("window." + inputs[i]);
        return result;
    }
</script>
</body>
</html>
