chromium/third_party/blink/web_tests/external/wpt/html/canvas/offscreen/layers/2d.layer.global-states.ctx-filter.rotation.w.html

<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<html class="reftest-wait">
<link rel="match" href="2d.layer.global-states.ctx-filter.rotation-expected.html">
<title>Canvas test: 2d.layer.global-states.ctx-filter.rotation</title>
<h1 style="font-size: 20px;">2d.layer.global-states.ctx-filter.rotation</h1>
<p class="desc">Checks that layers correctly use global render states.</p>
<script>pending_tests = 16;</script>

<div style="display: grid; grid-gap: 4px;
            grid-template-columns: repeat(8, max-content);
            font-size: 13px; text-align: center;">
<span>
  <div>no-globalAlpha</div>
  <div>no-composite-op</div>
  <div>no-shadow</div>
  <canvas id="canvas0" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker0" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      // No globalAlpha.
      // No globalCompositeOperation.
      // No shadow.
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker0').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas0');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>globalAlpha</div>
  <div>no-composite-op</div>
  <div>no-shadow</div>
  <canvas id="canvas1" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker1" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      ctx.globalAlpha = 0.75;
      // No globalCompositeOperation.
      // No shadow.
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker1').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas1');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>no-globalAlpha</div>
  <div>blending</div>
  <div>no-shadow</div>
  <canvas id="canvas2" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker2" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      // No globalAlpha.
      ctx.globalCompositeOperation = 'multiply';
      // No shadow.
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker2').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas2');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>globalAlpha</div>
  <div>blending</div>
  <div>no-shadow</div>
  <canvas id="canvas3" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker3" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      ctx.globalAlpha = 0.75;
      ctx.globalCompositeOperation = 'multiply';
      // No shadow.
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker3').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas3');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>no-globalAlpha</div>
  <div>composite</div>
  <div>no-shadow</div>
  <canvas id="canvas4" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker4" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      // No globalAlpha.
      ctx.globalCompositeOperation = 'source-in';
      // No shadow.
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker4').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas4');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>globalAlpha</div>
  <div>composite</div>
  <div>no-shadow</div>
  <canvas id="canvas5" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker5" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      ctx.globalAlpha = 0.75;
      ctx.globalCompositeOperation = 'source-in';
      // No shadow.
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker5').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas5');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>no-globalAlpha</div>
  <div>copy</div>
  <div>no-shadow</div>
  <canvas id="canvas6" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker6" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      // No globalAlpha.
      ctx.globalCompositeOperation = 'copy';
      // No shadow.
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker6').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas6');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>globalAlpha</div>
  <div>copy</div>
  <div>no-shadow</div>
  <canvas id="canvas7" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker7" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      ctx.globalAlpha = 0.75;
      ctx.globalCompositeOperation = 'copy';
      // No shadow.
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker7').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas7');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>no-globalAlpha</div>
  <div>no-composite-op</div>
  <div>shadow</div>
  <canvas id="canvas8" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker8" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      // No globalAlpha.
      // No globalCompositeOperation.
      ctx.shadowOffsetX = -7;
      ctx.shadowOffsetY = 7;
      ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
      ctx.shadowBlur = 3;
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker8').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas8');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>globalAlpha</div>
  <div>no-composite-op</div>
  <div>shadow</div>
  <canvas id="canvas9" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker9" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      ctx.globalAlpha = 0.75;
      // No globalCompositeOperation.
      ctx.shadowOffsetX = -7;
      ctx.shadowOffsetY = 7;
      ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
      ctx.shadowBlur = 3;
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker9').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas9');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>no-globalAlpha</div>
  <div>blending</div>
  <div>shadow</div>
  <canvas id="canvas10" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker10" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      // No globalAlpha.
      ctx.globalCompositeOperation = 'multiply';
      ctx.shadowOffsetX = -7;
      ctx.shadowOffsetY = 7;
      ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
      ctx.shadowBlur = 3;
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker10').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas10');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>globalAlpha</div>
  <div>blending</div>
  <div>shadow</div>
  <canvas id="canvas11" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker11" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      ctx.globalAlpha = 0.75;
      ctx.globalCompositeOperation = 'multiply';
      ctx.shadowOffsetX = -7;
      ctx.shadowOffsetY = 7;
      ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
      ctx.shadowBlur = 3;
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker11').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas11');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>no-globalAlpha</div>
  <div>composite</div>
  <div>shadow</div>
  <canvas id="canvas12" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker12" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      // No globalAlpha.
      ctx.globalCompositeOperation = 'source-in';
      ctx.shadowOffsetX = -7;
      ctx.shadowOffsetY = 7;
      ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
      ctx.shadowBlur = 3;
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker12').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas12');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>globalAlpha</div>
  <div>composite</div>
  <div>shadow</div>
  <canvas id="canvas13" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker13" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      ctx.globalAlpha = 0.75;
      ctx.globalCompositeOperation = 'source-in';
      ctx.shadowOffsetX = -7;
      ctx.shadowOffsetY = 7;
      ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
      ctx.shadowBlur = 3;
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker13').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas13');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>no-globalAlpha</div>
  <div>copy</div>
  <div>shadow</div>
  <canvas id="canvas14" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker14" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      // No globalAlpha.
      ctx.globalCompositeOperation = 'copy';
      ctx.shadowOffsetX = -7;
      ctx.shadowOffsetY = 7;
      ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
      ctx.shadowBlur = 3;
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker14').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas14');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

<span>
  <div>globalAlpha</div>
  <div>copy</div>
  <div>shadow</div>
  <canvas id="canvas15" width="90" height="90" style="outline: 1px solid">
    <p class="fallback">FAIL (fallback content)</p>
  </canvas>
  <script id="myWorker15" type="text/worker">
    self.onmessage = function(e) {
      const canvas = new OffscreenCanvas(90, 90);
      const ctx = canvas.getContext('2d');

      ctx.translate(50, 40);
      ctx.rotate(Math.PI);
      ctx.translate(-45, -45);

      ctx.fillStyle = 'rgba(128, 128, 128, 1)';
      ctx.fillRect(20, 15, 50, 50);

      ctx.globalAlpha = 0.75;
      ctx.globalCompositeOperation = 'copy';
      ctx.shadowOffsetX = -7;
      ctx.shadowOffsetY = 7;
      ctx.shadowColor = 'rgba(255, 165, 0, 0.5)';
      ctx.shadowBlur = 3;
      ctx.filter = 'drop-shadow(-4px -4px 0 fuchsia)';

      ctx.beginLayer();

      // Enable compositing in the layer to validate that draw calls in the layer
      // won't individually composite with the background.
      ctx.globalCompositeOperation = 'screen';

      ctx.fillStyle = 'rgba(255, 0, 0, 1)';
      ctx.fillRect(10, 25, 40, 45);
      ctx.fillStyle = 'rgba(0, 255, 0, 1)';
      ctx.fillRect(30, 5, 45, 40);

      ctx.endLayer();

      const bitmap = canvas.transferToImageBitmap();
      self.postMessage(bitmap, bitmap);
    };
  </script>
  <script type="module">
    const blob = new Blob([document.getElementById('myWorker15').textContent]);
    const worker = new Worker(URL.createObjectURL(blob));
    worker.addEventListener('message', msg => {
      const outputCanvas = document.getElementById('canvas15');
      const outputCtx = outputCanvas.getContext('2d');
      outputCtx.drawImage(msg.data, 0, 0);
      if (--pending_tests == 0) {
        document.documentElement.classList.remove('reftest-wait');
      }
    });
    worker.postMessage(null);
  </script>
</span>

</div>
</html>