layout/generic/test/plugin_clipping_helper2.xhtml
author Benjamin Smedberg <benjamin@smedbergs.us>
Tue, 26 Jan 2010 17:50:01 -0500
changeset 46592 e033fa1d3b0bc04aaa37708b6d48eb8b0aeb4fb5
parent 46582 be4144ff77907a5a2e47590ddba65c74e48eba5b
child 37613 a119900cf074a3f334a152fc2e3aa695c0b8543e
permissions -rw-r--r--
Work around bug 542337 by making the testplugin not call IPDL methods to paint.

<?xml version="1.0"?>
<?xml-stylesheet href="/tests/SimpleTest/test.css" type="text/css"?>
<html xmlns="http://www.w3.org/1999/xhtml" title="Test Plugin Clipping: Dynamic Tests">
<head>
  <style>
  embed { width:300px; height:200px; display:block; }
  </style>
</head>
<body>

<!-- Use a XUL element here so we can get its boxObject.screenX/Y -->
<hbox style="height:10px; position:absolute; left:0; top:0; z-index:-100;" id="h1"
      xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <hbox style="width:100px;"></hbox><hbox id="h2"/>
</hbox>

<div id="d1" style="width:200px; overflow:hidden; position:absolute; top:0; left:0;">
  <embed id="p1" type="application/x-test" wmode="window" style="position:relative" drawmode="solid"></embed>
</div>
<div id="d2" style="width:200px; height:200px; overflow:hidden; position:absolute; top:100px; left:0;">
  <embed id="p2" type="application/x-test" wmode="window" drawmode="solid"></embed>
  <div id="zbox" style="position:absolute; left:50px; top:50px; width:100px; height:100px; background:yellow;">
  </div>
</div>

<div id="scroll"
     style="position:absolute; top:0; left:0; width:300px; height:400px; overflow:scroll;">
  <div id="sbox"
       style="margin-top:350px; margin-left:50px; margin-bottom:1000px; width:100px; height:100px; background:blue;"></div>
</div>

<script src="plugin_clipping_lib.js"></script>
<script class="testbody" type="application/javascript">
<![CDATA[
var scroll = document.getElementById("scroll");
var zbox = document.getElementById("zbox");
var sbox = document.getElementById("sbox");
var p1 = document.getElementById("p1");
var d2 = document.getElementById("d2");

function runTests() {

  checkClipRegion("p1", [[0, 0, 200, 100]]);
  checkClipRegion("p2", [[0, 0, 200, 50], [0, 50, 50, 150], [150, 50, 200, 150], [0, 150, 200, 200]]);

  scroll.scrollTop = 150;
  checkClipRegion("p2", [[0, 0, 200, 50], [0, 50, 50, 200], [150, 50, 200, 200]]);

  zbox.style.zIndex = -1;

  flush();
  // A non-zero timeout is needed on X11 (unless an XSync could be performed)
  // to delay an OOP plugin's X requests enough so that the X server processes
  // them after the parent processes requests (for the changes above).
  setTimeout(part2, 1000);
}

function part2() {
  checkClipRegion("p2", [[0, 0, 200, 100], [0, 100, 50, 200], [150, 100, 200, 200]]);

  sbox.style.background = "";

  flush();
  setTimeout(part3, 1000);
}

function part3() {
  checkClipRegion("p2", [[0, 0, 200, 200]]);
  
  p1.style.zIndex = 1;

  flush();
  setTimeout(part4, 1000);
}

function part4() {
  checkClipRegion("p1", [[0, 0, 200, 200]]);
  checkClipRegion("p2", [[0, 100, 200, 200]]);

  // Test subpixel stuff
  p1.style.zIndex = -1;
  zbox.style.zIndex = 1;
  zbox.style.top = "50.3px;"
  d2.style.top = "100.3px";

  flush();
  setTimeout(done, 1000);
}

function done() {
  checkClipRegionNoBounds("p2", [[0, 0, 200, 50], [0, 50, 50, 150], [150, 50, 200, 150], [0, 150, 200, 200]]);

  window.opener.SimpleTest.finish();
  window.close();
}

function flush() {
  // This function is for X11 to flush the Xlib request queue.  It takes
  // advantage of the current scrolling implementation, which will do this for
  // us.  Beware though, it does not wait for the X server to process the
  // events.
  ++scroll.scrollTop;
  --scroll.scrollTop;
}
]]>
</script>

</body>
</html>