| <html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink"> | 
 | <head> | 
 | <script src="../resources/ahem.js"></script> | 
 | <style type="text/css"> | 
 |     body { | 
 |         margin:0px; | 
 |         border:0px; | 
 |         padding:0px; | 
 |     } | 
 |     text { | 
 |         text-rendering: geometricPrecision; | 
 |         font: 12px Ahem; | 
 |     } | 
 |     #div2, #svg2 { | 
 |         zoom:200%; | 
 |     } | 
 |     #div3, #svg3 { | 
 |         zoom:50%; | 
 |     } | 
 | </style> | 
 | </head> | 
 | <body> | 
 |  | 
 | <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="../svg/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="../svg/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="../svg/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 src="../resources/js-test.js"></script> | 
 | <script> | 
 |  | 
 | function msgDumpRenderTreeRequired() | 
 | { | 
 |     if (!window.testRunner) | 
 |         debug("The following tests may fail if not run in DumpRenderTree:"); | 
 | } | 
 |  | 
 | description("This test checks getBoundingClientRect() on zoomed HTML and SVG elements"); | 
 |  | 
 | if (self.testRunner) | 
 |   self.testRunner.setTextSubpixelPositioning(true); | 
 |  | 
 | debug("Gray rectangles: 100x50"); | 
 | debug("Green rectangles: 100x50, zoom=200%"); | 
 | debug("Blue rectangles: 200x100, zoom=50%"); | 
 | debug(""); | 
 |  | 
 | debug("Checking HTML elements:"); | 
 | debug(""); | 
 |  | 
 | // Slightly bigger than one layout unit. | 
 | var tolerance = 0.02; | 
 |  | 
 | var div1 = document.getElementById("div1").getBoundingClientRect(); | 
 | shouldBe('div1.left', '0'); | 
 | shouldBe('div1.top', '0'); | 
 | shouldBe('div1.width', '100'); | 
 | shouldBe('div1.height', '50'); | 
 | shouldBe('div1.right', '100'); | 
 | shouldBe('div1.bottom', '50'); | 
 | debug(""); | 
 |  | 
 | var div2 = document.getElementById("div2").getBoundingClientRect(); | 
 | shouldBe('div2.left', '0'); | 
 | shouldBe('div2.top', '25'); | 
 | shouldBe('div2.width', '100'); | 
 | shouldBe('div2.height', '50'); | 
 | shouldBe('div2.right', '100'); | 
 | shouldBe('div2.bottom', '75'); | 
 | debug(""); | 
 |  | 
 | var div3 = document.getElementById("div3").getBoundingClientRect(); | 
 | shouldBe('div3.left', '0'); | 
 | shouldBe('div3.top', '300'); | 
 | shouldBe('div3.width', '200'); | 
 | shouldBe('div3.height', '100'); | 
 | shouldBe('div3.right', '200'); | 
 | shouldBe('div3.bottom', '400'); | 
 | debug(""); | 
 |  | 
 | debug("Checking SVG elements:"); | 
 | debug(""); | 
 |  | 
 | var svg1 = document.getElementById("svg1").getBoundingClientRect(); | 
 | shouldBe('svg1.left', '0'); | 
 | shouldBe('svg1.top', '250'); | 
 | shouldBe('svg1.width', '150'); | 
 | shouldBe('svg1.height', '50'); | 
 | shouldBe('svg1.right', '150'); | 
 | shouldBe('svg1.bottom', '300'); | 
 | var rect1 = document.getElementById("rect1").getBoundingClientRect(); | 
 | shouldBe('rect1.left', '0'); | 
 | shouldBe('rect1.top', '250'); | 
 | shouldBe('rect1.width', '100'); | 
 | shouldBe('rect1.height', '50'); | 
 | shouldBe('rect1.right', '100'); | 
 | shouldBe('rect1.bottom', '300'); | 
 | var image1 = document.getElementById("image1").getBoundingClientRect(); | 
 | shouldBe('image1.left', '100'); | 
 | shouldBe('image1.top', '250'); | 
 | shouldBe('image1.width', '50'); | 
 | shouldBe('image1.height', '25'); | 
 | shouldBe('image1.right', '150'); | 
 | shouldBe('image1.bottom', '275'); | 
 | var text1 = document.getElementById("text1").getBoundingClientRect(); | 
 | shouldBe('text1.left', '100'); | 
 | msgDumpRenderTreeRequired(); | 
 | shouldBeCloseTo('text1.top', 283, 1); | 
 | shouldBeCloseTo('text1.height', 6, 1); | 
 | debug(""); | 
 |  | 
 | var svg2 = document.getElementById("svg2").getBoundingClientRect(); | 
 | shouldBe('svg2.left', '75'); | 
 | shouldBe('svg2.top', '100'); | 
 | shouldBe('svg2.width', '150'); | 
 | shouldBe('svg2.height', '50'); | 
 | shouldBe('svg2.right', '225'); | 
 | shouldBe('svg2.bottom', '150'); | 
 | var rect2 = document.getElementById("rect2").getBoundingClientRect(); | 
 | shouldBe('rect2.left', '75'); | 
 | shouldBe('rect2.top', '100'); | 
 | shouldBe('rect2.width', '100'); | 
 | shouldBe('rect2.height', '50'); | 
 | shouldBe('rect2.right', '175'); | 
 | shouldBe('rect2.bottom', '150'); | 
 | var image2 = document.getElementById("image2").getBoundingClientRect(); | 
 | shouldBe('image2.left', '175'); | 
 | shouldBe('image2.top', '100'); | 
 | shouldBe('image2.width', '50'); | 
 | shouldBe('image2.height', '25'); | 
 | shouldBe('image2.right', '225'); | 
 | shouldBe('image2.bottom', '125'); | 
 | var text2 = document.getElementById("text2").getBoundingClientRect(); | 
 | shouldBe('text2.left', '175'); | 
 | msgDumpRenderTreeRequired(); | 
 | shouldBeCloseTo('text2.top', 132, 1); | 
 | shouldBeCloseTo('text2.width', 'text1.width', tolerance); | 
 | shouldBeCloseTo('text2.height', 'text1.height', tolerance); | 
 | debug(""); | 
 |  | 
 | var svg3 = document.getElementById("svg3").getBoundingClientRect(); | 
 | shouldBe('svg3.left', '900'); | 
 | shouldBe('svg3.top', '500'); | 
 | shouldBe('svg3.width', '300'); | 
 | shouldBe('svg3.height', '100'); | 
 | shouldBe('svg3.right', '1200'); | 
 | shouldBe('svg3.bottom', '600'); | 
 | var rect3 = document.getElementById("rect3").getBoundingClientRect(); | 
 | shouldBe('rect3.left', '900'); | 
 | shouldBe('rect3.top', '500'); | 
 | shouldBe('rect3.width', '200'); | 
 | shouldBe('rect3.height', '100'); | 
 | shouldBe('rect3.right', '1100'); | 
 | shouldBe('rect3.bottom', '600'); | 
 | var image3 = document.getElementById("image3").getBoundingClientRect(); | 
 | shouldBe('image3.left', '1100'); | 
 | shouldBe('image3.top', '500'); | 
 | shouldBe('image3.width', '100'); | 
 | shouldBe('image3.height', '50'); | 
 | shouldBe('image3.right', '1200'); | 
 | shouldBe('image3.bottom', '550'); | 
 | var text3 = document.getElementById("text3").getBoundingClientRect(); | 
 | shouldBe('text3.left', '1100'); | 
 | msgDumpRenderTreeRequired(); | 
 | shouldBeCloseTo('text3.top', 565, 1); | 
 | shouldBeCloseTo('text3.width', '(text1.width * 2)', tolerance); | 
 | shouldBeCloseTo('text3.height', '(text1.height * 2)', tolerance); | 
 | debug(""); | 
 | </script> | 
 |  | 
 | </body> | 
 | </html> |