summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/general/test_innerScreen.xul
blob: 55666c28a4eeed5f5ac36358e41abfe984d8c175 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
<!--
  Tests for mozInnerScreenX/Y properties
  -->
<window title="Test mozInnerScreenX/Y Properties"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>

  <!-- test resuls are displayed in the html:body -->
  <body xmlns="http://www.w3.org/1999/xhtml"
        style="height: 400px; position:relative; overflow: auto;">
    <iframe id="f"
            style="position:absolute; left:100px;
                   top:200px; width:200px; height:200px; border:none;"></iframe>
  </body>

  <!-- test code goes here -->
  <script type="application/javascript"><![CDATA[

function isRounded(a, b, msg) {
  ok(Math.round(a) == Math.round(b),
     msg + " (rounded), got " + a + ", expected " + b);
}

function doTests()
{
  var readable = false;
  try
  {
    mozScreenPixelsPerCSSPixel;
    readable = true;
  }
  catch(ex) { }
  ok(!readable, "window pixels per css pixel shouldn't be readable to content");

  var domWindowUtils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                           .getInterface(Components.interfaces.nsIDOMWindowUtils);
  var devPxPerCSSPx = domWindowUtils.screenPixelsPerCSSPixel;

  is(window.devicePixelRatio, devPxPerCSSPx, "window.devicePixelRatio");

  var windowBO = document.documentElement.boxObject;
  isRounded(window.mozInnerScreenX*devPxPerCSSPx, windowBO.screenX,
            "window screen X");
  isRounded(window.mozInnerScreenY*devPxPerCSSPx, windowBO.screenY,
            "window screen Y");

  var f = document.getElementById("f");
  var fBounds = f.getBoundingClientRect();

  const CI = Components.interfaces;
  var fshell = f.contentWindow.QueryInterface(CI.nsIInterfaceRequestor).getInterface(CI.nsIWebNavigation).QueryInterface(CI.nsIDocShell);
  var fmudv = fshell.contentViewer;

  isRounded(f.contentWindow.mozInnerScreenX,
            window.mozInnerScreenX + fBounds.left,
            "frame screen X");
  isRounded(f.contentWindow.mozInnerScreenY,
            window.mozInnerScreenY + fBounds.top,
            "frame screen Y");

  fmudv.fullZoom *= 2;
  var frameDomWindowUtils = f.contentWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                              .getInterface(Components.interfaces.nsIDOMWindowUtils);
  is(frameDomWindowUtils.screenPixelsPerCSSPixel, 2*devPxPerCSSPx,
     "frame screen pixels per CSS pixel");

  is(f.contentWindow.devicePixelRatio, 2*devPxPerCSSPx, "frame devicePixelRatio");

  isRounded(f.contentWindow.mozInnerScreenX*2,
            window.mozInnerScreenX + fBounds.left,
            "zoomed frame screen X");
  isRounded(f.contentWindow.mozInnerScreenY*2,
            window.mozInnerScreenY + fBounds.top,
            "zoomed frame screen Y");
  fmudv.fullZoom = 1.0;

  SimpleTest.finish();
}

addLoadEvent(doTests);
SimpleTest.waitForExplicitFinish();

]]>
</script>

</window>