Fix a "Worker" test type error (#40240)

* Add a "Worker" test type, separate from "OffscreenCanvas".

This will allow writing tests that work HtmlCanvas and OffscreenCanvas,
but not Worker. For example, the test 2d.fillStyle.CSSHSL.html exists
for both element and offscreen, but it can't be implemented for
workers because workers can't use the CSSHSL interface.

Change-Id: Iec0c07e2942e7e063183763ed02d29f57451bee2
Bug: 1275750
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4557546
Reviewed-by: Yi Xu <yiyix@chromium.org>
Commit-Queue: Jean-Philippe Gravel <jpgravel@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1148821}

* Add a "Worker" test type, separate from "OffscreenCanvas".

This will allow writing tests that work HtmlCanvas and OffscreenCanvas,
but not Worker. For example, the test 2d.fillStyle.CSSHSL.html exists
for both element and offscreen, but it can't be implemented for
workers because workers can't use the CSSHSL interface.

Change-Id: Iec0c07e2942e7e063183763ed02d29f57451bee2
Bug: 1275750
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4557546
Reviewed-by: Yi Xu <yiyix@chromium.org>
Commit-Queue: Jean-Philippe Gravel <jpgravel@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1148821}

---------

Co-authored-by: Jean-Philippe Gravel <jpgravel@chromium.org>
diff --git a/html/canvas/tools/yaml-new/compositing.yaml b/html/canvas/tools/yaml-new/compositing.yaml
index 0051f07..bd7fae1 100644
--- a/html/canvas/tools/yaml-new/compositing.yaml
+++ b/html/canvas/tools/yaml-new/compositing.yaml
@@ -173,7 +173,7 @@
   expected: green
 
 - name: 2d.composite.globalAlpha.canvas
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     var offscreenCanvas2 = new OffscreenCanvas(100, 50);
     var ctx2 = offscreenCanvas2.getContext('2d');
@@ -203,7 +203,7 @@
   expected: green
 
 - name: 2d.composite.globalAlpha.canvaspattern
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     var offscreenCanvas2 = new OffscreenCanvas(100, 50);
     var ctx2 = offscreenCanvas2.getContext('2d');
@@ -218,7 +218,7 @@
     @assert pixel 50,25 ==~ 2,253,0,255;
 
 - name: 2d.composite.globalAlpha.canvascopy
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     var offscreenCanvas2 = new OffscreenCanvas(100, 50);
     var ctx2 = offscreenCanvas2.getContext('2d');
diff --git a/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml b/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
index e183734..75eed14 100644
--- a/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
+++ b/html/canvas/tools/yaml-new/drawing-images-to-the-canvas.yaml
@@ -343,7 +343,7 @@
     @assert pixel 99,49 ==~ 0,255,0,255;
 
 - name: 2d.drawImage.canvas
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     var offscreenCanvas2 = new OffscreenCanvas(100, 50);
     var ctx2 = offscreenCanvas2.getContext('2d');
@@ -357,7 +357,7 @@
     @assert pixel 99,49 ==~ 0,255,0,255;
 
 - name: 2d.drawImage.zerocanvas
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     var offscreenCanvas2 = new OffscreenCanvas(0, 10);
     @assert throws INVALID_STATE_ERR ctx.drawImage(offscreenCanvas2, 0, 0);
@@ -424,7 +424,7 @@
 - name: 2d.drawImage.zerosource.image
   desc: drawImage with zero-sized source rectangle from image draws nothing without exception
   test_type: promise
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     ctx.fillStyle = '#0f0';
     ctx.fillRect(0, 0, 100, 50);
@@ -519,7 +519,7 @@
 
 - name: 2d.drawImage.outsidesource
   DISABLED: fix this to match the current spec (transparent black outside source)
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     const response_red = await fetch('/images/red.png');
     const blob_red = await response_red.blob();
@@ -572,7 +572,7 @@
 - name: 2d.drawImage.svg
   desc: drawImage() of an SVG image
   test_type: promise
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     var promise = new Promise(function(resolve, reject) {
       var xhr = new XMLHttpRequest();
diff --git a/html/canvas/tools/yaml-new/filters.yaml b/html/canvas/tools/yaml-new/filters.yaml
index dd84f91..9a90bed 100644
--- a/html/canvas/tools/yaml-new/filters.yaml
+++ b/html/canvas/tools/yaml-new/filters.yaml
@@ -61,7 +61,7 @@
 
 - name: 2d.filter.canvasFilterObject.tentative
   desc: Test CanvasFilter() object
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     @assert ctx.filter == 'none';
     ctx.filter = 'blur(5px)';
diff --git a/html/canvas/tools/yaml-new/layers.yaml b/html/canvas/tools/yaml-new/layers.yaml
index fe1902c..e0d2b3d 100644
--- a/html/canvas/tools/yaml-new/layers.yaml
+++ b/html/canvas/tools/yaml-new/layers.yaml
@@ -317,7 +317,7 @@
   variants:
     convertToBlob:
       test_type: "promise"
-      canvasType: ['OffscreenCanvas']
+      canvasType: ['OffscreenCanvas', 'Worker']
       flush_canvas: |-
         await canvas.convertToBlob();
     createImageBitmap:
@@ -352,7 +352,7 @@
 - name: 2d.layer.render-opportunities.transferToImageBitmap
   desc: Checks that transferToImageBitmap flushes and rebuilds the state stack.
   size: 200, 200
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     ctx.fillStyle = 'purple';
     ctx.fillRect(60, 60, 75, 50);
diff --git a/html/canvas/tools/yaml-new/pixel-manipulation.yaml b/html/canvas/tools/yaml-new/pixel-manipulation.yaml
index b9bdf3d..0643b04 100644
--- a/html/canvas/tools/yaml-new/pixel-manipulation.yaml
+++ b/html/canvas/tools/yaml-new/pixel-manipulation.yaml
@@ -818,7 +818,7 @@
 
 - name: 2d.imageData.put.cross
   desc: putImageData() accepts image data got from a different canvas
-  canvasType: ['OffscreenCanvas']
+  canvasType: ['OffscreenCanvas', 'Worker']
   code: |
     var offscreenCanvas2 = new OffscreenCanvas(100, 50);
     var ctx2 = offscreenCanvas2.getContext('2d');