<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink">
<head>
<style type="text/css">
    body {
        margin:0px;
        border:0px;
        padding:0px;
    }
    text {
        font: 12px Ahem;
    }
    #div2, #svg2 {
        zoom:200%;
    }
    #div3, #svg3 {
        zoom:50%;
    }
</style>
</head>
<body onload="runRepaintTest()">

<div id="div1" style="width:100px;height:50px;background-color:gray;"></div>
<div id="div2" style="width:100px;height:50px;background-color:green;"></div>
<div id="div3" style="width:200px;height:100px;background-color:blue;"></div>
<div style="width:600px;height=100px;">
<svg id="svg1" xmlns="http://www.w3.org/2000/svg"
     width="150px" height="50px" viewBox="0 0 150 100"
     preserveAspectRatio="none">
  <rect id="rect1" x="0" y="0" width="100px" height="100px" fill="gray" />
  <image id="image1" x="100px" y="0" width="50px" height="50px" xlink:href="../../W3C-SVG-1.1/resources/magnify.png" />
  <text id="text1" x="100px" y="75px">Test</text>
</svg><svg id="svg2" xmlns="http://www.w3.org/2000/svg"
     width="150px" height="50px" viewBox="0 0 150 100"
     preserveAspectRatio="none">
  <rect id="rect2" x="0" y="0" width="100px" height="100px" fill="green" />
  <image id="image2" x="100px" y="0" width="50px" height="50px" xlink:href="../../W3C-SVG-1.1/resources/magnify.png" />
  <text id="text2" x="100px" y="75px">Test</text>
</svg><svg id="svg3" xmlns="http://www.w3.org/2000/svg"
     width="300px" height="100px" viewBox="0 0 150 100"
     preserveAspectRatio="none">
  <rect id="rect3" x="0" y="0" width="100px" height="100px" fill="blue" />
  <image id="image3" x="100px" y="0" width="50px" height="50px" xlink:href="../../W3C-SVG-1.1/resources/magnify.png" />
  <text id="text3" x="100px" y="75px">Test</text>
</svg>
</div>

<div id="description"></div>
<div id="console"></div>

<script>
function executeTest() {
    description("This test checks getBoundingClientRect() on zoomed HTML and SVG elements");

    debug("Gray rectangles: 100x50");
    debug("Green rectangles: 100x50, zoom=200%");
    debug("Blue rectangles: 200x100, zoom=50%");
    debug("");

    debug("Checking HTML elements:");
    debug("");

    div1 = document.getElementById("div1").getBoundingClientRect();
    shouldBeEqualToString('div1.left.toFixed(2)', '0.00');
    shouldBeEqualToString('div1.top.toFixed(2)', '0.00');
    shouldBeEqualToString('div1.width.toFixed(2)', '100.00');
    shouldBeEqualToString('div1.height.toFixed(2)', '50.00');
    shouldBeEqualToString('div1.right.toFixed(2)', '100.00');
    shouldBeEqualToString('div1.bottom.toFixed(2)', '50.00');
    debug("");

    div2 = document.getElementById("div2").getBoundingClientRect();
    shouldBeEqualToString('div2.left.toFixed(2)', '0.00');
    shouldBeEqualToString('div2.top.toFixed(2)', '25.00');
    shouldBeEqualToString('div2.width.toFixed(2)', '100.00');
    shouldBeEqualToString('div2.height.toFixed(2)', '50.00');
    shouldBeEqualToString('div2.right.toFixed(2)', '100.00');
    shouldBeEqualToString('div2.bottom.toFixed(2)', '75.00');
    debug("");

    div3 = document.getElementById("div3").getBoundingClientRect();
    shouldBeEqualToString('div3.left.toFixed(2)', '0.00');
    shouldBeEqualToString('div3.top.toFixed(2)', '300.00');
    shouldBeEqualToString('div3.width.toFixed(2)', '200.00');
    shouldBeEqualToString('div3.height.toFixed(2)', '100.00');
    shouldBeEqualToString('div3.right.toFixed(2)', '200.00');
    shouldBeEqualToString('div3.bottom.toFixed(2)', '400.00');
    debug("");

    debug("Checking SVG elements:");
    debug("");

    svg1 = document.getElementById("svg1").getBoundingClientRect();
    shouldBeEqualToString('svg1.left.toFixed(2)', '0.00');
    shouldBeEqualToString('svg1.top.toFixed(2)', '250.00');
    shouldBeEqualToString('svg1.width.toFixed(2)', '150.00');
    shouldBeEqualToString('svg1.height.toFixed(2)', '50.00');
    shouldBeEqualToString('svg1.right.toFixed(2)', '150.00');
    shouldBeEqualToString('svg1.bottom.toFixed(2)', '300.00');
    rect1 = document.getElementById("rect1").getBoundingClientRect();
    shouldBeEqualToString('rect1.left.toFixed(2)', '0.00');
    shouldBeEqualToString('rect1.top.toFixed(2)', '250.00');
    shouldBeEqualToString('rect1.width.toFixed(2)', '100.00');
    shouldBeEqualToString('rect1.height.toFixed(2)', '50.00');
    shouldBeEqualToString('rect1.right.toFixed(2)', '100.00');
    shouldBeEqualToString('rect1.bottom.toFixed(2)', '300.00');
    image1 = document.getElementById("image1").getBoundingClientRect();
    shouldBeEqualToString('image1.left.toFixed(2)', '100.00');
    shouldBeEqualToString('image1.top.toFixed(2)', '250.00');
    shouldBeEqualToString('image1.width.toFixed(2)', '50.00');
    shouldBeEqualToString('image1.height.toFixed(2)', '25.00');
    shouldBeEqualToString('image1.right.toFixed(2)', '150.00');
    shouldBeEqualToString('image1.bottom.toFixed(2)', '275.00');
    text1 = document.getElementById("text1").getBoundingClientRect();
    shouldBeEqualToString('text1.left.toFixed(2)', '100.00');
    shouldBeEqualToString('text1.top.toFixed(2)', '282.66');
    shouldBeEqualToString('text1.width.toFixed(2)', '49.20');
    shouldBeEqualToString('text1.height.toFixed(2)', '6.16');
    shouldBeEqualToString('text1.right.toFixed(2)', '149.20');
    shouldBeEqualToString('text1.bottom.toFixed(2)', '288.82');
    debug("");

    svg2 = document.getElementById("svg2").getBoundingClientRect();
    shouldBeEqualToString('svg2.left.toFixed(2)', '75.00');
    shouldBeEqualToString('svg2.top.toFixed(2)', '100.00');
    shouldBeEqualToString('svg2.width.toFixed(2)', '150.00');
    shouldBeEqualToString('svg2.height.toFixed(2)', '50.00');
    shouldBeEqualToString('svg2.right.toFixed(2)', '225.00');
    shouldBeEqualToString('svg2.bottom.toFixed(2)', '150.00');
    rect2 = document.getElementById("rect2").getBoundingClientRect();
    shouldBeEqualToString('rect2.left.toFixed(2)', '75.00');
    shouldBeEqualToString('rect2.top.toFixed(2)', '100.00');
    shouldBeEqualToString('rect2.width.toFixed(2)', '100.00');
    shouldBeEqualToString('rect2.height.toFixed(2)', '50.00');
    shouldBeEqualToString('rect2.right.toFixed(2)', '175.00');
    shouldBeEqualToString('rect2.bottom.toFixed(2)', '150.00');
    image2 = document.getElementById("image2").getBoundingClientRect();
    shouldBeEqualToString('image2.left.toFixed(2)', '175.00');
    shouldBeEqualToString('image2.top.toFixed(2)', '100.00');
    shouldBeEqualToString('image2.width.toFixed(2)', '50.00');
    shouldBeEqualToString('image2.height.toFixed(2)', '25.00');
    shouldBeEqualToString('image2.right.toFixed(2)', '225.00');
    shouldBeEqualToString('image2.bottom.toFixed(2)', '125.00');
    text2 = document.getElementById("text2").getBoundingClientRect();
    shouldBeEqualToString('text2.left.toFixed(2)', '175.00');
    shouldBeEqualToString('text2.top.toFixed(2)', '132.66');
    shouldBeEqualToString('text2.width.toFixed(2)', '47.44');
    shouldBeEqualToString('text2.height.toFixed(2)', '5.94');
    shouldBeEqualToString('text2.right.toFixed(2)', '222.44');
    shouldBeEqualToString('text2.bottom.toFixed(2)', '138.60');
    debug("");

    svg3 = document.getElementById("svg3").getBoundingClientRect();
    shouldBeEqualToString('svg3.left.toFixed(2)', '900.00');
    shouldBeEqualToString('svg3.top.toFixed(2)', '500.00');
    shouldBeEqualToString('svg3.width.toFixed(2)', '300.00');
    shouldBeEqualToString('svg3.height.toFixed(2)', '100.00');
    shouldBeEqualToString('svg3.right.toFixed(2)', '1200.00');
    shouldBeEqualToString('svg3.bottom.toFixed(2)', '600.00');
    rect3 = document.getElementById("rect3").getBoundingClientRect();
    shouldBeEqualToString('rect3.left.toFixed(2)', '900.00');
    shouldBeEqualToString('rect3.top.toFixed(2)', '500.00');
    shouldBeEqualToString('rect3.width.toFixed(2)', '200.00');
    shouldBeEqualToString('rect3.height.toFixed(2)', '100.00');
    shouldBeEqualToString('rect3.right.toFixed(2)', '1100.00');
    shouldBeEqualToString('rect3.bottom.toFixed(2)', '600.00');
    image3 = document.getElementById("image3").getBoundingClientRect();
    shouldBeEqualToString('image3.left.toFixed(2)', '1100.00');
    shouldBeEqualToString('image3.top.toFixed(2)', '500.00');
    shouldBeEqualToString('image3.width.toFixed(2)', '100.00');
    shouldBeEqualToString('image3.height.toFixed(2)', '50.00');
    shouldBeEqualToString('image3.right.toFixed(2)', '1200.00');
    shouldBeEqualToString('image3.bottom.toFixed(2)', '550.00');
    text3 = document.getElementById("text3").getBoundingClientRect();
    shouldBeEqualToString('text3.left.toFixed(2)', '1100.00');
    shouldBeEqualToString('text3.top.toFixed(2)', '565.33');
    shouldBeEqualToString('text3.width.toFixed(2)', '98.41');
    shouldBeEqualToString('text3.height.toFixed(2)', '12.31');
    shouldBeEqualToString('text3.right.toFixed(2)', '1198.41');
    shouldBeEqualToString('text3.bottom.toFixed(2)', '577.64');
    debug("");
}
</script>

<script>
if (window.testRunner) {
    testRunner.waitUntilDone();
    window.postZoomCallback = executeTest;
} else {
    debug("This test only works in DRT.");
}
</script>

<script src="../../../resources/js-test-pre.js"></script>
<script>var zoomCount = 2;</script>
<script src="../../../fast/repaint/resources/repaint.js"></script>
<script src="../resources/testPageZoom.js"></script>

</body>
</html>
