tor-browser

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

test_bug399925.html (3341B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=399925
      5 -->
      6 <head>
      7  <title>Test for Bug 399925</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <script type="text/javascript" src="imgutils.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     11 </head>
     12 <body>
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=399925">Mozilla Bug 399925</a>
     14 <p id="display"></p>
     15 <div id="content" style="display: none">
     16 <canvas id="canvas" width="100" height="100"> </canvas>  
     17 </div>
     18 <pre id="test">
     19 <script class="testbody" type="text/javascript">
     20 
     21 /** Test for Bug 399925. */
     22 var triggerDiscardingManually = false;
     23 var pngResults = [];
     24 SimpleTest.waitForExplicitFinish();
     25 SimpleTest.requestFlakyTimeout("untriaged");
     26 
     27 window.onload = function() {
     28  // It'd be nice to reduce the discard timer here, but unfortunately we only
     29  // read that pref on startup. We instead manually trigger discarding on
     30  // platforms where the discard timer is too long (which we'll somewhat
     31  // arbitrarily define as 'longer than 60 seconds').
     32  var expirationMs =
     33    SpecialPowers.getIntPref('image.mem.surfacecache.min_expiration_ms');
     34  if (expirationMs > 60000) {
     35    ok(true, 'Triggering discarding manually because SurfaceCache expiration ' +
     36             'is ' + expirationMs + ' ms');
     37    triggerDiscardingManually = true;
     38  } else {
     39    ok(true, 'Using normal discarding because SurfaceCache expiration ' +
     40             'is ' + expirationMs + ' ms');
     41  }
     42 
     43  // Enable discarding for the test.
     44  SpecialPowers.pushPrefEnv({
     45    'set':[['image.mem.discardable',true]]
     46  }, runTest);
     47 }
     48 
     49 function runTest() {
     50  var image = new Image();
     51  image.setAttribute("id", "gif");
     52 
     53  // 1. Draw the canvas once on loadComplete
     54  // 2. Redraw the canvas and compare the results right on discard
     55  addCallbacks(image, drawCanvas, function() {
     56    drawCanvas();
     57    is(pngResults[0], pngResults[1], "got different rendered results");
     58    SimpleTest.finish();
     59  });
     60 
     61  image.src = "bug399925.gif";
     62  document.getElementById("content").appendChild(image);
     63 
     64  if (triggerDiscardingManually) {
     65    var request = SpecialPowers.wrap(image)
     66        .getRequest(SpecialPowers.Ci.nsIImageLoadingContent.CURRENT_REQUEST);
     67    setTimeout(() => request.requestDiscard(), 1000);
     68  }
     69 }
     70 
     71 function addCallbacks(anImage, loadCompleteCallback, discardCallback) {
     72  var observer = new ImageDecoderObserverStub();
     73  observer.discard = function () {
     74    imgLoadingContent.removeObserver(scriptedObserver);
     75    discardCallback();
     76  }
     77  observer.loadComplete = loadCompleteCallback;
     78  observer = SpecialPowers.wrapCallbackObject(observer);
     79 
     80  var scriptedObserver = SpecialPowers.Cc["@mozilla.org/image/tools;1"]
     81                           .getService(SpecialPowers.Ci.imgITools)
     82                           .createScriptedObserver(observer);
     83 
     84  var imgLoadingContent = SpecialPowers.wrap(anImage);
     85  imgLoadingContent.addObserver(scriptedObserver);
     86 }
     87 
     88 function drawCanvas() {
     89  var canvas = document.getElementById('canvas');
     90  var context = canvas.getContext('2d');
     91  var gif = document.getElementById('gif');
     92 
     93  context.drawImage(gif, 0, 0);
     94  ok(true, "we got through the drawImage call without an exception being thrown");
     95  pngResults.push(canvas.toDataURL());
     96 }
     97 
     98 </script>
     99 </pre>
    100 </body>
    101 </html>