tor-browser

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

offscreencanvas.transfer.to.imagebitmap.w.html (6711B)


      1 <!DOCTYPE html>
      2 <script src="/resources/testharness.js"></script>
      3 <script src="/resources/testharnessreport.js"></script>
      4 <script src="/html/canvas/resources/canvas-tests.js"></script>
      5 <link rel="help" href="https://html.spec.whatwg.org/#dom-offscreencanvas-transfertoimagebitmap">
      6 
      7 <script id="myWorker" type="text/worker">
      8 
      9 function testSize(contextType)
     10 {
     11    var offscreenCanvas = new OffscreenCanvas(100, 50);
     12    var ctx = offscreenCanvas.getContext(contextType);
     13    var image = offscreenCanvas.transferToImageBitmap();
     14    if (image.width == 100 && image.height == 50)
     15        return true;
     16    return false;
     17 }
     18 
     19 function testImageBitmapClr(shouldCallTwice, alphaVal) {
     20    var offscreenCanvas = new OffscreenCanvas(100, 50);
     21    var ctx = offscreenCanvas.getContext('2d', {alpha: alphaVal});
     22    ctx.fillStyle = "#0f0";
     23    ctx.fillRect(0, 0, 100, 50);
     24    var image = offscreenCanvas.transferToImageBitmap();
     25 
     26    if (shouldCallTwice)
     27        image = offscreenCanvas.transferToImageBitmap();
     28    return image;
     29 }
     30 
     31 function isInvalidStateError(funcStr, offscreenCanvas)
     32 {
     33    try {
     34        eval(funcStr);
     35    } catch (e) {
     36        if (e instanceof DOMException && e.name == "InvalidStateError")
     37            return true;
     38        return false;
     39    }
     40 }
     41 
     42 function testImageBitmapSize()
     43 {
     44    return testSize('2d') && testSize('webgl');
     45 }
     46 
     47 function testLineWidthNotAltered()
     48 {
     49    var offscreenCanvas = new OffscreenCanvas(100, 50);
     50    var ctx = offscreenCanvas.getContext('2d');
     51    ctx.lineWidth = 10;
     52    var image = offscreenCanvas.transferToImageBitmap();
     53    return ctx.lineWidth == 10;
     54 }
     55 
     56 function testTransformPreserved()
     57 {
     58    var offscreenCanvas = new OffscreenCanvas(100, 50);
     59    var ctx = offscreenCanvas.getContext('2d');
     60    ctx.rect(0, 0, 25, 50);
     61    ctx.clip();
     62    ctx.translate(20, 20);
     63 
     64    ctx.fillStyle = '#0f0';
     65    var image1 = offscreenCanvas.transferToImageBitmap();
     66    // trasnform should be preserved
     67    ctx.fillRect(0, 0, 10, 10);
     68    var image2 = offscreenCanvas.transferToImageBitmap();
     69    return image2;
     70 }
     71 
     72 function testException()
     73 {
     74    var offscreenCanvas = new OffscreenCanvas(10, 10);
     75    return isInvalidStateError("offscreenCanvas.transferToImageBitmap()", offscreenCanvas);
     76 }
     77 
     78 self.onmessage = function(e) {
     79    switch (e.data) {
     80        case 'test1':
     81            self.postMessage(testImageBitmapSize());
     82            break;
     83        case 'test2':
     84            self.postMessage(testImageBitmapClr(false, true));
     85            break;
     86        case 'test3':
     87            self.postMessage(testImageBitmapClr(true, true));
     88            break;
     89        case 'test4':
     90            self.postMessage(testImageBitmapClr(true, false));
     91            break;
     92        case 'test5':
     93            self.postMessage(testLineWidthNotAltered());
     94            break;
     95        case 'test6':
     96            self.postMessage(testTransformPreserved());
     97            break;
     98        case 'test7':
     99            var offscreenCanvas = new OffscreenCanvas(10, 10);
    100            self.postMessage({offscreenCanvas: offscreenCanvas}, [offscreenCanvas]);
    101            self.postMessage(isInvalidStateError("offscreenCanvas.transferToImageBitmap()", offscreenCanvas));
    102            break;
    103        case 'test8':
    104            self.postMessage(testException());
    105            break;
    106    }
    107 };
    108 
    109 </script>
    110 
    111 <script>
    112 function makeWorker(test) {
    113    var blob = new Blob([document.getElementById("myWorker").textContent]);
    114    var worker = new Worker(URL.createObjectURL(blob));
    115    worker.onerror = test.unreached_func("error");
    116    return worker;
    117 }
    118 
    119 function drawImageBitmap(image, x, y)
    120 {
    121    var drawCanvas = document.createElement('canvas');
    122    drawCanvas.width = 100;
    123    drawCanvas.height = 50;
    124    var dCtx = drawCanvas.getContext('2d');
    125    dCtx.drawImage(image, 0, 0);
    126    return dCtx.getImageData(x, y, 1, 1).data;
    127 }
    128 
    129 async_test(function(t) {
    130    var worker = makeWorker(t);
    131    worker.addEventListener('message', t.step_func_done(function(msg) {
    132        assert_true(msg.data);
    133    }));
    134    worker.postMessage('test1');
    135 }, "Test that transferToImageBitmap returns an ImageBitmap with correct width and height in a worker");
    136 
    137 async_test(function(t) {
    138    var worker = makeWorker(t);
    139    worker.addEventListener('message', t.step_func_done(function(msg) {
    140        var clr = drawImageBitmap(msg.data, 50, 25);
    141        assert_array_equals(clr, [0, 255, 0, 255]);
    142    }));
    143    worker.postMessage('test2');
    144 }, "Test that transferToImageBitmap returns an ImageBitmap with correct color in a worker");
    145 
    146 async_test(function(t) {
    147    var worker = makeWorker(t);
    148    worker.addEventListener('message', t.step_func_done(function(msg) {
    149        var clr = drawImageBitmap(msg.data, 50, 25);
    150        assert_array_equals(clr, [0, 0, 0, 0]);
    151    }));
    152    worker.postMessage('test3');
    153 }, "Test that call transferToImageBitmap twice returns an ImageBitmap with correct color in a worker");
    154 
    155 async_test(function(t) {
    156    var worker = makeWorker(t);
    157    worker.addEventListener('message', t.step_func_done(function(msg) {
    158        var clr = drawImageBitmap(msg.data, 50, 25);
    159        assert_array_equals(clr, [0, 0, 0, 255]);
    160    }));
    161    worker.postMessage('test4');
    162 }, "Test that call transferToImageBitmap twice on a alpha-disabled context returns an ImageBitmap with correct color in a worker");
    163 
    164 async_test(function(t) {
    165    var worker = makeWorker(t);
    166    worker.addEventListener('message', t.step_func_done(function(msg) {
    167        assert_true(msg.data);
    168    }));
    169    worker.postMessage('test5');
    170 }, "Test that transferToImageBitmap won't change context's property in a worker");
    171 
    172 async_test(function(t) {
    173    var worker = makeWorker(t);
    174    worker.addEventListener('message', t.step_func_done(function(msg) {
    175        var clr1 = drawImageBitmap(msg.data, 23, 25);
    176        assert_array_equals(clr1, [0, 255, 0, 255]);
    177        var clr2 = drawImageBitmap(msg.data, 27, 25);
    178        assert_array_equals(clr2, [0, 0, 0, 0]);
    179    }));
    180    worker.postMessage('test6');
    181 }, "Test that call transferToImageBitmap preserves transform in a worker");
    182 
    183 async_test(function(t) {
    184    var worker = makeWorker(t);
    185    worker.addEventListener('message', t.step_func(function (msg) {
    186        if (msg.data == true || msg.data == false) {
    187            assert_true(msg.data);
    188            t.done();
    189        }
    190    }));
    191    worker.postMessage('test7');
    192 }, "Test that call transferToImageBitmap on a detached OffscreenCanvas throws an exception in a worker");
    193 
    194 async_test(function(t) {
    195    var worker = makeWorker(t);
    196    worker.addEventListener('message', t.step_func_done(function(msg) {
    197        assert_true(msg.data);
    198    }));
    199    worker.postMessage('test8');
    200 }, "Test that call transferToImageBitmap without a context throws an exception in a worker");
    201 
    202 </script>