tor-browser

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

offscreencanvas.transfercontrol.to.offscreen.w.html (2979B)


      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-canvas-transfercontroltooffscreen">
      6 
      7 <script id="myWorker" type="text/worker">
      8 
      9 function testSize(offscreenCanvas)
     10 {
     11    if (offscreenCanvas.width == 100 && offscreenCanvas.height == 50)
     12        return true;
     13    return false;
     14 }
     15 
     16 self.onmessage = function(e) {
     17    switch (e.data.msg) {
     18        case 'test1':
     19            self.postMessage(testSize(e.data.data));
     20            break;
     21        case 'test2':
     22            self.postMessage("");
     23            break;
     24        case 'test3':
     25            self.postMessage("");
     26            break;
     27    }
     28 };
     29 
     30 </script>
     31 
     32 <script>
     33 function makeWorker(script)
     34 {
     35    var blob = new Blob([script]);
     36    return new Worker(URL.createObjectURL(blob));
     37 }
     38 
     39 async_test(function(t) {
     40    var placeholder = document.createElement('canvas');
     41    placeholder.width = 100;
     42    placeholder.height = 50;
     43    var offscreenCanvas = placeholder.transferControlToOffscreen();
     44    var worker = makeWorker(document.getElementById("myWorker").textContent);
     45    worker.addEventListener('message', t.step_func_done(function(msg) {
     46        assert_true(msg.data);
     47    }));
     48    worker.postMessage({msg: 'test1', data: offscreenCanvas}, [offscreenCanvas]);
     49 }, "Test that an OffscreenCanvas generated by transferControlToOffscreen gets correct width and height when it is transferred to a worker");
     50 
     51 async_test(function(t) {
     52    var placeholder = document.createElement('canvas');
     53    placeholder.width = 100;
     54    placeholder.height = 50;
     55    var offscreenCanvas = placeholder.transferControlToOffscreen();
     56    var worker = makeWorker(document.getElementById("myWorker").textContent);
     57    worker.addEventListener('message', t.step_func_done(function(msg) {
     58        assert_throws_dom("InvalidStateError", function() { placeholder.getContext('2d'); });
     59    }));
     60    worker.postMessage({msg: 'test2', data: offscreenCanvas}, [offscreenCanvas]);
     61 }, "Test that calling getContext on a placeholder canvas that is transferred its control to an OffscreenCanvas throws an exception, when the OffscreenCanvas is transferred to a worker");
     62 
     63 async_test(function(t) {
     64    var placeholder = document.createElement('canvas');
     65    placeholder.width = 100;
     66    placeholder.height = 50;
     67    var offscreenCanvas = placeholder.transferControlToOffscreen();
     68    var worker = makeWorker(document.getElementById("myWorker").textContent);
     69    worker.addEventListener('message', t.step_func_done(function(msg) {
     70        assert_throws_dom("InvalidStateError", function() { placeholder.transferControlToOffscreen(); });
     71    }));
     72    worker.postMessage({msg: 'test3', data: offscreenCanvas}, [offscreenCanvas]);
     73 }, "Test that calling transferControlToOffscreen twice throws an exception, when its associated OffscreenCanvas is transferred to a worker");
     74 
     75 </script>