tor-browser

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

createImageBitmap-invalid-args.html (7788B)


      1 <!doctype html>
      2 <script src="/resources/testharness.js"></script>
      3 <script src="/resources/testharnessreport.js"></script>
      4 <script src="/common/media.js"></script>
      5 <script src="common.sub.js"></script>
      6 <script>
      7 
      8 function makeOversizedCanvas() {
      9 
     10  return new Promise(resolve => {
     11    let canvas = document.createElement('canvas');
     12    canvas.setAttribute('width', '100000000');
     13    canvas.setAttribute('height', '100000000');
     14    resolve(canvas);
     15  });
     16 }
     17 
     18 function makeOversizedOffscreenCanvas() {
     19  return new Promise(resolve =>{
     20    let canvas = new OffscreenCanvas(100000000, 100000000);
     21    resolve(canvas);
     22  });
     23 }
     24 
     25 function makeInvalidBlob() {
     26  return new Promise(resolve => {
     27    resolve(new Blob()); // Blob with no data cannot be decoded.
     28  });
     29 }
     30 
     31 function makeBrokenImage() {
     32  return new Promise((resolve, reject) => {
     33    const image = new Image();
     34    image.src = "data:,x";
     35    image.onload = reject;
     36    image.onerror = () => resolve(image);
     37  });
     38 }
     39 
     40 function makeAvailableButBrokenImage(path) {
     41  return new Promise((resolve, reject) => {
     42    const image = new Image();
     43    image.src = path;
     44    image.onload = () => resolve(image);
     45    image.onerror = reject;
     46  });
     47 }
     48 
     49 testCases = [
     50  {
     51    description: 'createImageBitmap with <sourceType> source and sw set to 0',
     52    promiseTestFunction:
     53      (source, t) => {
     54        return promise_rejects_js(t, RangeError,
     55            createImageBitmap(source, 0, 0, 0, 10));
     56      }
     57  },
     58  {
     59    description: 'createImageBitmap with <sourceType> source and sh set to 0',
     60    promiseTestFunction:
     61      (source, t) => {
     62        return promise_rejects_js(t, RangeError,
     63            createImageBitmap(source, 0, 0, 10, 0));
     64      }
     65  },
     66  {
     67    description: 'createImageBitmap with <sourceType> source and oversized ' +
     68        '(unallocatable) crop region',
     69    promiseTestFunction:
     70      (source, t) => {
     71        return createImageBitmap(source, 0, 0, 100000000, 100000000)
     72          .then(i => {
     73            assert_equals(i.width, 100000000);
     74            assert_equals(i.height, 100000000);
     75          })
     76          .catch(e => {
     77            // This case is not explicitly documented in the specification for
     78            // createImageBitmap, but it is expected that internal failures
     79            // cause InvalidStateError.
     80            //
     81            // Note: https://bugs.chromium.org/p/chromium/issues/detail?id=799025
     82            assert_throws_dom("InvalidStateError", () => { throw e });
     83          });
     84      }
     85  },
     86  {
     87    description: 'createImageBitmap with <sourceType> source and ' +
     88        'a value of 0 int resizeWidth',
     89    promiseTestFunction:
     90      (source, t) => {
     91        return createImageBitmap(source, {resizeWidth:0, resizeHeight:10})
     92          .catch(e => {
     93            assert_throws_dom("InvalidStateError", () => { throw e });
     94          });
     95      }
     96  },
     97  {
     98    description: 'createImageBitmap with <sourceType> source and ' +
     99        'a value of 0 in resizeHeight',
    100    promiseTestFunction:
    101      (source, t) => {
    102        return createImageBitmap(source, {resizeWidth:10, resizeHeight:0})
    103          .catch(e => {
    104            assert_throws_dom("InvalidStateError", () => { throw e });
    105          });
    106      }
    107  },
    108  {
    109    description: 'createImageBitmap with <sourceType> source and ' +
    110        'a value between 0 and 1 in resizeWidth',
    111    promiseTestFunction:
    112      (source, t) => {
    113        return createImageBitmap(source, {resizeWidth:0.5, resizeHeight:10})
    114          .catch(e => {
    115            assert_throws_dom("InvalidStateError", () => { throw e });
    116          });
    117      }
    118  },
    119  {
    120    description: 'createImageBitmap with <sourceType> source and ' +
    121        'a value between 0 and 1 in resizeHeight',
    122    promiseTestFunction:
    123      (source, t) => {
    124        return createImageBitmap(source, {resizeWidth:10, resizeHeight:0.5})
    125          .catch(e => {
    126            assert_throws_dom("InvalidStateError", () => { throw e });
    127          });
    128      }
    129  },
    130 ];
    131 
    132 // Generate the test matrix for each sourceType + testCase combo.
    133 imageSourceTypes.forEach(imageSourceType => {
    134  testCases.forEach(testCase => {
    135    let description = testCase.description.replace('<sourceType>',
    136        imageSourceType.name);
    137    promise_test( t => {
    138      return imageSourceType.factory().then(source => {
    139        return testCase.promiseTestFunction(source, t);
    140      });
    141    }, description);
    142  });
    143 });
    144 
    145 promise_test( t => {
    146  return promise_rejects_js(t, TypeError, createImageBitmap(undefined));
    147 }, "createImageBitmap with undefined image source.");
    148 
    149 promise_test( t => {
    150  return promise_rejects_js(t, TypeError, createImageBitmap(null));
    151 }, "createImageBitmap with null image source.");
    152 
    153 promise_test( t => {
    154  var context = document.createElement("canvas").getContext("2d");
    155  return promise_rejects_js(t, TypeError, createImageBitmap(context));
    156 }, "createImageBitmap with CanvasRenderingContext2D image source.");
    157 
    158 promise_test( t => {
    159  var context = document.createElement("canvas").getContext("webgl");
    160  return promise_rejects_js(t, TypeError, createImageBitmap(context));
    161 }, "createImageBitmap with WebGLRenderingContext image source.");
    162 
    163 promise_test( t => {
    164  var buffer = new Uint8Array();
    165  return promise_rejects_js(t, TypeError, createImageBitmap(buffer));
    166 }, "createImageBitmap with Uint8Array image source.");
    167 
    168 promise_test( t => {
    169  var buffer = new ArrayBuffer(8);
    170  return promise_rejects_js(t, TypeError, createImageBitmap(buffer));
    171 }, "createImageBitmap with ArrayBuffer image source.");
    172 
    173 promise_test( t => {
    174  return promise_rejects_dom(t, "InvalidStateError",
    175    createImageBitmap(new Image()));
    176 }, "createImageBitmap with empty image source.");
    177 
    178 promise_test( t => {
    179  return promise_rejects_dom(t, "InvalidStateError",
    180    createImageBitmap(document.createElement('video')));
    181 }, "createImageBitmap with empty video source.");
    182 
    183 promise_test( t => {
    184  return makeOversizedCanvas().then(canvas => {
    185    return promise_rejects_dom(t, "InvalidStateError",
    186        createImageBitmap(canvas));
    187  });
    188 }, "createImageBitmap with an oversized canvas source.");
    189 
    190 promise_test( t => {
    191  return makeOversizedOffscreenCanvas().then(offscreenCanvas => {
    192    return promise_rejects_dom(t, "InvalidStateError",
    193        createImageBitmap(offscreenCanvas));
    194  });
    195 }, "createImageBitmap with an invalid OffscreenCanvas source.");
    196 
    197 promise_test( t => {
    198  return makeInvalidBlob().then(blob => {
    199    return promise_rejects_dom(t, "InvalidStateError",
    200        createImageBitmap(blob));
    201  });
    202 }, "createImageBitmap with an undecodable blob source.");
    203 
    204 promise_test( t => {
    205  return makeBrokenImage().then(image => {
    206    return promise_rejects_dom(t, "InvalidStateError",
    207        createImageBitmap(image));
    208  });
    209 }, "createImageBitmap with a broken image source.");
    210 
    211 promise_test( t => {
    212  return makeAvailableButBrokenImage("/images/undecodable.png").then(image => {
    213    return promise_rejects_dom(t, "InvalidStateError",
    214        createImageBitmap(image));
    215  });
    216 }, "createImageBitmap with an available but undecodable image source.");
    217 
    218 promise_test( t => {
    219  return makeAvailableButBrokenImage("/images/red-zeroheight.svg").then(image => {
    220    return promise_rejects_dom(t, "InvalidStateError",
    221        createImageBitmap(image));
    222  });
    223 }, "createImageBitmap with an available but zero height image source.");
    224 
    225 promise_test( t => {
    226  return makeAvailableButBrokenImage("/images/red-zerowidth.svg").then(image => {
    227    return promise_rejects_dom(t, "InvalidStateError",
    228        createImageBitmap(image));
    229  });
    230 }, "createImageBitmap with an available but zero width image source.");
    231 
    232 promise_test( t => {
    233  return makeImageBitmap().then(bitmap => {
    234    bitmap.close()
    235    return promise_rejects_dom(t, "InvalidStateError",
    236        createImageBitmap(bitmap));
    237  });
    238 }, "createImageBitmap with a closed ImageBitmap.");
    239 </script>