tor-browser

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

imagebitmap_structuredclone_utils.js (5846B)


      1 var gImage1;
      2 var gImage2;
      3 var gImageBitmap1;
      4 var gImageBitmap2;
      5 
      6 // Bug 1239752.
      7 var gImageData;
      8 var gImageBitmap3;
      9 
     10 function comparePixelColor(
     11  testImgageData,
     12  groundTruthImageData,
     13  x,
     14  y,
     15  tolerance,
     16  info
     17 ) {
     18  ok(
     19    testImgageData.width == groundTruthImageData.width &&
     20      testImgageData.height == groundTruthImageData.height,
     21    "testImgageData and groundTruthImageData should have the same dimension."
     22  );
     23 
     24  var index = (groundTruthImageData.width * y + x) * 4;
     25  var r = groundTruthImageData.data[index + 0];
     26  var g = groundTruthImageData.data[index + 1];
     27  var b = groundTruthImageData.data[index + 2];
     28  var a = groundTruthImageData.data[index + 3];
     29  var newR = testImgageData.data[index + 0];
     30  var newG = testImgageData.data[index + 1];
     31  var newB = testImgageData.data[index + 2];
     32  var newA = testImgageData.data[index + 3];
     33  var isTheSame =
     34    Math.abs(r - newR) <= tolerance &&
     35    Math.abs(g - newG) <= tolerance &&
     36    Math.abs(b - newB) <= tolerance &&
     37    Math.abs(a - newA) <= tolerance;
     38  ok(
     39    isTheSame,
     40    "[" +
     41      info +
     42      "] " +
     43      "newImageData(" +
     44      newR +
     45      "," +
     46      newG +
     47      "," +
     48      newB +
     49      "," +
     50      newA +
     51      ") should equal to imageData(" +
     52      r +
     53      "," +
     54      g +
     55      "," +
     56      b +
     57      "," +
     58      a +
     59      ")."
     60  );
     61 }
     62 
     63 function compareImageBitmapWithImageElement(imageBitmap, imageElement) {
     64  var canvas1 = document.createElement("canvas");
     65  var canvas2 = document.createElement("canvas");
     66 
     67  canvas1.width = imageElement.naturalWidth;
     68  canvas1.height = imageElement.naturalHeight;
     69  canvas2.width = imageElement.naturalWidth;
     70  canvas2.height = imageElement.naturalHeight;
     71 
     72  var ctx1 = canvas1.getContext("2d");
     73  var ctx2 = canvas2.getContext("2d");
     74 
     75  ctx1.drawImage(imageElement, 0, 0);
     76  ctx2.drawImage(imageBitmap, 0, 0);
     77 
     78  document.body.appendChild(canvas1);
     79  document.body.appendChild(canvas2);
     80 
     81  var imageData1 = ctx1.getImageData(0, 0, canvas1.width, canvas1.height);
     82  var imageData2 = ctx2.getImageData(0, 0, canvas2.width, canvas2.height);
     83 
     84  // Create an array of pixels that is going to be tested.
     85  var pixels = [];
     86  var xGap = imageElement.naturalWidth / 4;
     87  var yGap = imageElement.naturalHeight / 4;
     88  for (var y = 0; y < imageElement.naturalHeight; y += yGap) {
     89    for (var x = 0; x < imageElement.naturalWidth; x += xGap) {
     90      pixels.push({ x, y });
     91    }
     92  }
     93 
     94  // Also, put the button-right pixel into pixels.
     95  pixels.push({
     96    x: imageElement.naturalWidth - 1,
     97    y: imageElement.naturalHeight - 1,
     98  });
     99 
    100  // Do the test.
    101  for (var pixel of pixels) {
    102    comparePixelColor(imageData2, imageData1, pixel.x, pixel.y, 0);
    103  }
    104 }
    105 
    106 function compareImageBitmapWithImageData(imageBitmap, imageData, info) {
    107  var canvas1 = document.createElement("canvas");
    108 
    109  canvas1.width = imageBitmap.width;
    110  canvas1.height = imageBitmap.height;
    111 
    112  var ctx1 = canvas1.getContext("2d");
    113 
    114  ctx1.drawImage(imageBitmap, 0, 0);
    115 
    116  document.body.appendChild(canvas1);
    117 
    118  var imageData1 = ctx1.getImageData(0, 0, canvas1.width, canvas1.height);
    119 
    120  // Create an array of pixels that is going to be tested.
    121  var pixels = [];
    122  var xGap = imageBitmap.width / 4;
    123  var yGap = imageBitmap.height / 4;
    124  for (var y = 0; y < imageBitmap.height; y += yGap) {
    125    for (var x = 0; x < imageBitmap.width; x += xGap) {
    126      pixels.push({ x, y });
    127    }
    128  }
    129 
    130  // Also, put the button-right pixel into pixels.
    131  pixels.push({ x: imageBitmap.width - 1, y: imageBitmap.height - 1 });
    132 
    133  // Do the test.
    134  for (var pixel of pixels) {
    135    comparePixelColor(imageData1, imageData, pixel.x, pixel.y, 5, info);
    136  }
    137 }
    138 
    139 function prepareImageBitmaps() {
    140  gImage1 = document.createElement("img");
    141  gImage2 = document.createElement("img");
    142  gImage1.src = "image_rgrg-256x256.png";
    143  gImage2.src = "image_yellow.png";
    144 
    145  var p1 = new Promise(function (resolve, reject) {
    146    gImage1.onload = function () {
    147      var promise = createImageBitmap(gImage1);
    148      promise.then(function (bitmap) {
    149        gImageBitmap1 = bitmap;
    150        resolve(true);
    151      });
    152    };
    153  });
    154 
    155  var p2 = new Promise(function (resolve, reject) {
    156    gImage2.onload = function () {
    157      var promise = createImageBitmap(gImage2);
    158      promise.then(function (bitmap) {
    159        gImageBitmap2 = bitmap;
    160        resolve(true);
    161      });
    162    };
    163  });
    164 
    165  var p3 = new Promise(function (resolve, reject) {
    166    // Create an ImageData with random colors.
    167    var width = 5;
    168    var height = 10;
    169    var data = [
    170      43, 143, 24, 148, 235, 165, 179, 91, 74, 228, 75, 195, 141, 109, 74, 65,
    171      25, 177, 3, 201, 128, 105, 12, 199, 196, 93, 241, 131, 250, 121, 232, 189,
    172      175, 131, 216, 190, 145, 123, 167, 70, 18, 196, 210, 162, 225, 1, 90, 188,
    173      223, 216, 182, 233, 118, 50, 168, 56, 51, 206, 198, 199, 153, 29, 70, 130,
    174      180, 135, 135, 51, 148, 46, 44, 144, 80, 171, 142, 95, 25, 178, 102, 110,
    175      0, 28, 128, 91, 31, 222, 42, 170, 85, 8, 218, 146, 65, 30, 198, 238, 121,
    176      57, 124, 88, 246, 40, 141, 146, 174, 195, 255, 149, 30, 153, 92, 116, 18,
    177      241, 6, 111, 39, 162, 85, 143, 237, 159, 201, 244, 93, 68, 14, 246, 143,
    178      143, 83, 221, 187, 215, 243, 154, 24, 125, 221, 53, 80, 153, 151, 219,
    179      202, 241, 250, 191, 153, 129, 181, 57, 94, 18, 136, 231, 41, 252, 168,
    180      207, 213, 103, 118, 172, 53, 213, 184, 204, 25, 29, 249, 199, 101, 55, 49,
    181      167, 25, 23, 173, 78, 19, 234, 205, 155, 250, 175, 44, 201, 215, 92, 25,
    182      59, 25, 29, 249, 199, 153, 129, 181, 57,
    183    ];
    184 
    185    gImageData = new ImageData(new Uint8ClampedArray(data), width, height);
    186 
    187    // Create an ImageBitmap from the above ImageData.
    188    createImageBitmap(gImageData).then(
    189      bitmap => {
    190        gImageBitmap3 = bitmap;
    191        resolve(true);
    192      },
    193      () => {
    194        reject();
    195      }
    196    );
    197  });
    198 
    199  return Promise.all([p1, p2, p3]);
    200 }