dom/plugins/test/mochitest/test_painting.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 <!DOCTYPE HTML>
     2 <html>
     3 <head>
     4   <title>Test for windowless plugin invalidation and expose events in clips</title>
     5   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     6   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     7   <style>
     8     div#container {
     9       position: relative;
    10       height: 30px;
    11       background: blue;
    12     }
    13     div#clip {
    14       overflow:hidden;
    15       position:absolute;
    16       left: 10.3px;
    17       top: 9.7px;
    18       width: 10px;
    19       height: 0px;
    20       background: red;
    21     }
    22     embed {
    23       position:absolute;
    24     }
    25     embed#paint-waiter {
    26       top: 0px;
    27       left: 0px;
    28       width: 1px;
    29       height: 0px;
    30     }
    31     embed#clipped {
    32       left: -5.3px;
    33       top: -4.7px;
    34       width: 20px;
    35       height: 20px;
    36     }
    37   </style>
    38 </head>
    39 <body onload="initialize()">
    41 <script type="application/javascript" src="utils.js"></script>
    42 <script type="application/javascript">
    43 SimpleTest.waitForExplicitFinish();
    44 setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
    46 var paint_waiter;
    47 var clip;
    48 var clipped;
    50 function initialize() {
    51   paint_waiter = document.getElementById("paint-waiter");
    52   clip = document.getElementById("clip");
    53   clipped = document.getElementById("clipped");
    55   waitForPaint(show);
    56 }
    58 function show() {
    59   paintCountIs(clipped, 0, "fully clipped plugin not painted");
    61   clip.style.height = "10px";
    63   // Capturing an image (as in a reftest) would force a repaint and use
    64   // different paths for the image surface, so instead check the plugin's
    65   // paint count.
    66   waitForPaint(invalidate);
    67 }
    69 function invalidate() {
    70   paintCountIs(clipped, 1, "partially clipped plugin painted once");  
    72   clipped.setColor("FF00FF00"); // plugin invalidates
    74   waitForPaint(done);
    75 }
    77 function done() {
    78   paintCountIs(clipped, 2, "painted after invalidate");
    80   SimpleTest.finish();  
    81 }
    83 function waitForPaint(func) {
    84   paint_waiter.last_paint_count = paint_waiter.getPaintCount();
    85   // Ensure the waiter has had a style change, so that this will
    86   // change its size and cause a paint.
    87   paint_waiter.style.backgroundColor = paint_waiter.style.backgroundColor == "blue" ? "yellow" : "blue";
    88   var flush = paint_waiter.offsetHeight;
    89   paint_waiter.style.height = "1px";
    90   waitForPaintHelper(func);
    91 }
    93 function waitForPaintHelper(func) {
    94   if (paint_waiter.getPaintCount() != paint_waiter.last_paint_count) {
    95     // hide the paint waiter
    96     paint_waiter.style.height = "0px";
    97     setTimeout(func, 0);
    98     return;
    99   }
   100   setTimeout(function() { waitForPaintHelper(func); }, 1000);
   101 }
   103 </script>
   105 <p id="display"></p>
   106 <div id="container">
   107   <embed id="paint-waiter" type="application/x-test"/>
   108   <div id="clip">
   109     <embed id="clipped" type="application/x-test"
   110            drawmode="solid" color="FF808080"/>
   111   </div>
   112 </div>
   113 <div id="content" style="display: none">
   115 </div>
   116 <pre id="test">
   117 </pre>
   119 </body>
   120 </html>

mercurial