image/test/mochitest/test_image_buffer_limit.html

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 <!DOCTYPE HTML>
     2 <html>
     3 <!--
     4 https://bugzilla.mozilla.org/show_bug.cgi?id=878577
     5 -->
     6 <head>
     7   <title>Test for Bug 878577 - Hard limit of decoded image buffer size</title>
     8   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
     9   <script type="application/javascript" src="imgutils.js"></script>
    10   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
    11 </head>
    13 <body>
    15 <!--
    16   Initial setup: The default size limit is 65M
    17   Step 1: Load 6M-pixels.png ok
    18   Step 2: Load 12M-pixels-1.png fail
    19   Step 3: Remove 6M-pixels.png and clear the decoded image
    20   Step 4: Load 12M-pixels-2.png ok
    21 -->
    23 <script>
    25 SimpleTest.waitForExplicitFinish();
    27 function loadImage(url) {
    28   info('loading ' + url);
    29   var image = new Image(50,50);
    30   image.src = url;
    31   document.body.appendChild(image);
    32   return image;
    33 }
    35 function fail(msg) {
    36   return function() {
    37     ok(false, msg);
    38     SimpleTest.finish();
    39   };
    40 }
    42 function runTest() {
    43   // provide a clean setup
    44   clearImageCache();
    46   var img_6M = loadImage('6M-pixels.png');
    47   img_6M.onerror = fail('unable to load 6M-pixels.png');
    48   img_6M.onload = function() {
    49     ok(true, 'expect success on loading a 6M-pixel image');
    51     var img_12M = loadImage('12M-pixels-1.png');
    52     img_12M.onload = fail('should fail to load due to image buffer size limit');
    53     img_12M.onerror = function() {
    54       ok(true, 'expect fail on loading a 12M-pixel image');
    56       // remove image cache
    57       info('discard decoded image buffer');
    58       img_6M.onerror = null;
    59       img_6M.src = null;
    60       img_12M.onerror = null;
    61       img_12M.src = null;
    62       document.body.removeChild(img_6M);
    63       document.body.removeChild(img_12M);
    64       clearImageCache();
    66       // Spin the event to give the image a chance to be discarded.
    67       SimpleTest.executeSoon(function() {
    68         var another_img_12M = loadImage('12M-pixels-2.png');
    69         another_img_12M.onerror = fail('unable to load 12M-pixels-2.png');
    70         another_img_12M.onload = function() {
    71           ok(true, 'expect success on loading another 12M-pixel image');
    72           another_img_12M.onerror = null;
    73           another_img_12M.onload = null;
    74           SimpleTest.finish();
    75         }; // another_img_12M.onload
    76       });
    78     }; // img_12M.onerror
    79   }; // img_6M.onload
    80 }
    82 window.addEventListener("load", function() {
    83   SpecialPowers.pushPrefEnv({
    84     "set": [
    85       // XXX prevent displayed imgFrame been released
    86       ["image.mem.allow_locking_in_content_processes", true]
    87     ]
    88   }, runTest);
    89 });
    91 </script>
    92 </body>
    93 </html>

mercurial