tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_will_change.html (3629B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Tests for MozAfterPaint</title>
      5  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
      6  <script src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script>
      7  <style>
      8    div {
      9      width: 100px;
     10      height: 100px;
     11      background: radial-gradient(ellipse at center, #87e0fd 0%,#53cbf1 40%,#05abe0 100%);
     12    }
     13  </style>
     14 </head>
     15 <body>
     16 </body>
     17 <script>
     18 
     19 var utils = window.windowUtils;
     20 
     21 function waitForPaints() {
     22  return new Promise(function(resolve, reject) {
     23    waitForAllPaintsFlushed(resolve);
     24  });
     25 }
     26 
     27 add_task(async () => {
     28  var element = document.createElement("div");
     29  document.body.appendChild(element);
     30 
     31  await waitForPaints();
     32 
     33  utils.checkAndClearPaintedState(element);
     34  element.style.opacity = "0.5";
     35 
     36  await waitForPaints();
     37 
     38  var painted = utils.checkAndClearPaintedState(element);
     39  // *** We check that this repaints because the test is relying
     40  //     on this property. If this is broken then this test wont
     41  //     be reliable check for will-change.
     42  is(painted, true, "element should have been painted");
     43 
     44  element.remove();
     45 });
     46 
     47 add_task(async () => {
     48  var element = document.createElement("div");
     49  document.body.appendChild(element);
     50 
     51  element.style.willChange = "opacity";
     52 
     53  await waitForPaints();
     54 
     55  utils.checkAndClearPaintedState(element);
     56  element.style.opacity = "0.5";
     57 
     58  await waitForPaints();
     59 
     60  var painted = utils.checkAndClearPaintedState(element);
     61  // BasicLayers' heuristics are so that even with will-change:opacity,
     62  // we can still have repaints.
     63  if (utils.layerManagerType != "Basic") {
     64    is(painted, false, "will-change:opacity element should not have been painted");
     65  }
     66 
     67  element.remove();
     68 });
     69 
     70 add_task(async () => {
     71  var element = document.createElement("div");
     72  document.body.appendChild(element);
     73 
     74  element.style.willChange = "transform";
     75 
     76  await waitForPaints();
     77 
     78  utils.checkAndClearPaintedState(element);
     79  element.style.transform = "translateY(-5px)";
     80 
     81  await waitForPaints();
     82 
     83  var painted = utils.checkAndClearPaintedState(element);
     84  // BasicLayers' heuristics are so that even with will-change:transform,
     85  // we can still have repaints.
     86  if (utils.layerManagerType != "Basic") {
     87    is(painted, false, "will-change:transform element should not have been painted");
     88  }
     89 
     90  element.remove();
     91 });
     92 
     93 add_task(async () => {
     94  var element = document.createElement("div");
     95  document.body.appendChild(element);
     96 
     97  element.style.willChange = "translate";
     98 
     99  await waitForPaints();
    100 
    101  utils.checkAndClearPaintedState(element);
    102  element.style.translate = "5px";
    103 
    104  await waitForPaints();
    105 
    106  var painted = utils.checkAndClearPaintedState(element);
    107  // BasicLayers' heuristics are so that even with will-change:translate,
    108  // we can still have repaints.
    109  if (utils.layerManagerType != "Basic") {
    110    is(painted, false, "will-change:translate element should not have been painted");
    111  }
    112 
    113  element.remove();
    114 });
    115 
    116 add_task(async () => {
    117  var element = document.createElement("div");
    118  document.body.appendChild(element);
    119 
    120  element.style.willChange = "offset-path";
    121 
    122  await waitForPaints();
    123 
    124  utils.checkAndClearPaintedState(element);
    125  element.style.offsetPath = "path('M55 50 h1')";
    126 
    127  await waitForPaints();
    128 
    129  var painted = utils.checkAndClearPaintedState(element);
    130  // BasicLayers' heuristics are so that even with will-change:offset-path,
    131  // we can still have repaints.
    132  if (utils.layerManagerType != "Basic") {
    133    is(painted, false, "will-change:offset-path element should not have been painted");
    134  }
    135 
    136  element.remove();
    137 });
    138 
    139 </script>
    140 </html>