blob: 8d466992ba6ed6f74e94da2e6535fe81ef9e2797 [file] [log] [blame]
<html>
<head>
<style type="text/css" media="screen">
@media (max-device-width: 478px) and (max-device-height: 959px) {
#main { background: red; }
}
@media (max-device-width: 480px) and (max-device-height: 960px) {
#main { background: green; }
}
@media (min-device-width: 481px) and (min-device-height: 961px) {
#main { background: yellow; }
}
body {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: 0;
}
</style>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/elements-test.js"></script>
<script>
function getSizes()
{
return JSON.stringify({
screen: window.screen.width + "x" + window.screen.height,
inner: window.innerWidth + "x" + window.innerHeight,
body: document.body.offsetWidth + "x" + document.body.offsetHeight
});
}
function test()
{
var exceededDimension = 10000001;
var originalScreenSize;
function saveSizeCallback(jsonResult)
{
var value = JSON.parse(jsonResult.value);
originalScreenSize = value.screen;
if (!originalScreenSize || originalScreenSize.indexOf("x") === -1)
InspectorTest.addResult("Invalid original screen size: " + originalScreenSize + ". Expect runtime failures later on.");
InspectorTest.selectNodeAndWaitForStyles("main", step0);
}
InspectorTest.evaluateInPage("getSizes()", saveSizeCallback);
function step0()
{
overrideAndDumpData(480, 800, step1);
}
function step1()
{
function compareSizeCallback(jsonResult)
{
// Check that the screen size reported is the same as the original one.
var result = JSON.parse(jsonResult.value);
if (result.screen !== originalScreenSize)
InspectorTest.addResult("Original size " + originalScreenSize + " not restored, found: " + result.screen);
step2();
}
function overrideCallback()
{
InspectorTest.evaluateInPage("getSizes()", compareSizeCallback);
}
// Disable overrides.
PageAgent.setDeviceMetricsOverride(0, 0, 1, true, overrideCallback);
}
function step2()
{
overrideAndDumpData(800, 480, step3);
}
function step3()
{
applyOverride(exceededDimension, 800, step4);
}
function step4()
{
applyOverride(-1, 800, step5);
}
function step5()
{
applyOverride(480, exceededDimension, step6);
}
function step6()
{
function callback()
{
InspectorTest.addResult("Current dimensions:");
getAndDumpSizes(step7);
}
applyOverride(480, -1, callback);
}
function step7()
{
function callback(jsonResult)
{
var value = JSON.parse(jsonResult.value);
if (value.screen !== originalScreenSize)
InspectorTest.addResult("Screen size not restored, actual: " + value.screen + ", expected: " + originalScreenSize);
else
InspectorTest.addResult("Screen size same as original - OK");
step8();
}
InspectorTest.addResult("Disable PageAgent:");
PageAgent.disable();
InspectorTest.evaluateInPage("getSizes()", callback);
}
function step8()
{
function callback(jsonResult)
{
var value = JSON.parse(jsonResult.value);
if (value.screen !== originalScreenSize)
InspectorTest.addResult("Screen size not restored, actual: " + value.screen + ", expected: " + originalScreenSize);
else
InspectorTest.addResult("Screen size same as original - OK");
InspectorTest.completeTest();
}
InspectorTest.addResult("Enable PageAgent:");
PageAgent.enable();
InspectorTest.evaluateInPage("getSizes()", callback);
}
function applyOverride(width, height, userCallback)
{
function callback(error)
{
if (error)
InspectorTest.addResult("Override: " + width + "x" + height + " => ERROR");
userCallback();
}
PageAgent.setDeviceMetricsOverride(width, height, 1, true, callback);
}
function overrideAndDumpData(width, height, callback)
{
function finalCallback()
{
InspectorTest.addResult("Main style:");
InspectorTest.dumpSelectedElementStyles(true, false, true);
callback();
}
var gotSizes;
var gotStyles;
function stylesCallback()
{
if (gotSizes)
return finalCallback();
gotStyles = true;
}
function sizesCallback()
{
gotSizes = true;
if (gotStyles)
finalCallback();
}
function applyCallback()
{
getAndDumpSizes(sizesCallback);
}
InspectorTest.addResult("Override: " + width + "x" + height);
InspectorTest.waitForStyles("main", stylesCallback);
applyOverride(width, height, applyCallback);
}
function getAndDumpSizes(callback)
{
function getSizesCallback(jsonResult)
{
var result = JSON.parse(jsonResult.value);
InspectorTest.addResult("Screen from page: " + result.screen);
InspectorTest.addResult("Window from page: " + result.inner);
InspectorTest.addResult("Body from page: " + result.body);
if (callback)
callback();
}
InspectorTest.evaluateInPage("getSizes()", getSizesCallback);
}
}
</script>
</head>
<body onload="runTest()">
<p>
Tests that screen dimension overrides affect media rules, body dimensions, and window.screen.
</p>
<div id="main"></div>
</body>
</html>