diff --git a/DEPS b/DEPS
index bf34581..2e832d9b 100644
--- a/DEPS
+++ b/DEPS
@@ -266,7 +266,7 @@
     Var('chromium_git') + '/external/github.com/CLD2Owners/cld2.git' + '@' + '84b58a5d7690ebf05a91406f371ce00c3daf31c0',
 
   'src/third_party/cld_3/src':
-    Var('chromium_git') + '/external/github.com/google/cld_3.git' + '@' + 'fa5974a4d3b5e7934fcb166ff26ed6bfce68b18a',
+    Var('chromium_git') + '/external/github.com/google/cld_3.git' + '@' + '79f017acfa55012ab8a553700e4b7fe78ba3709c',
 
   'src/third_party/libwebm/source':
     Var('chromium_git') + '/webm/libwebm.git' + '@' + '9a235e0bc94319c5f7184bd69cbe5468a74a025c',
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 1524486..c6ea883 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -843,11 +843,6 @@
     }
 
     cflags += [
-      # Assume UTF-8 by default to avoid code page dependencies.
-      "/utf-8",
-    ]
-
-    cflags += [
       # Warnings permanently disabled:
 
       # C4091: 'typedef ': ignored on left of 'X' when no variable is
@@ -1078,6 +1073,9 @@
 config("chromium_code") {
   if (is_win) {
     cflags = [ "/W4" ]  # Warning level 4.
+
+    # Assume UTF-8 by default to avoid code page dependencies.
+    cflags += [ "/utf-8" ]
   } else {
     cflags = [ "-Wall" ]
     if (treat_warnings_as_errors) {
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 444b766..56f6358 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -1477,6 +1477,7 @@
 crbug.com/490015 virtual/stable/http/tests/navigation/same-and-different-back.html [ Skip ]
 
 # ====== New tests from w3c-test-autoroller added here ======
+crbug.com/626703 [ Trusty Mac10.11 Mac10.10 Retina Win7 Win10 Mac10.9 ] imported/wpt/innerText/getter.html [ Failure ]
 crbug.com/626703 imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-baseline-horiz-001a.xhtml [ Failure ]
 crbug.com/626703 imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-baseline-horiz-001b.xhtml [ Failure ]
 crbug.com/626703 imported/csswg-test/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-self-baseline-horiz-006.xhtml [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/MANIFEST.json b/third_party/WebKit/LayoutTests/imported/wpt/MANIFEST.json
index 2cfb394b..2bac830e 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/imported/wpt/MANIFEST.json
@@ -16107,6 +16107,6798 @@
             "url": "/offscreen-canvas/drawing-rectangles-to-the-canvas/2d.strokeRect.zero.5.worker.html"
           }
         ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.worker.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.html": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.html",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.html"
+          }
+        ],
+        "offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.worker.js": [
+          {
+            "path": "offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.worker.js",
+            "url": "/offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.butt.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.butt.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.butt.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.butt.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.butt.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.butt.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.closed.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.closed.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.closed.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.closed.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.closed.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.closed.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.invalid.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.invalid.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.invalid.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.invalid.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.invalid.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.invalid.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.open.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.open.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.open.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.open.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.open.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.open.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.round.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.round.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.round.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.round.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.round.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.round.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.square.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.square.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.square.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.square.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.square.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.square.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.valid.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.valid.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.valid.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cap.valid.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cap.valid.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.cap.valid.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cross.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cross.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.cross.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.cross.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.cross.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.cross.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.defaults.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.defaults.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.defaults.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.defaults.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.defaults.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.defaults.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.bevel.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.bevel.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.bevel.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.bevel.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.bevel.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.bevel.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.closed.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.closed.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.closed.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.closed.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.closed.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.closed.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.invalid.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.invalid.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.invalid.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.invalid.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.invalid.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.invalid.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.miter.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.miter.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.miter.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.miter.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.miter.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.miter.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.open.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.open.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.open.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.open.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.open.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.open.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.parallel.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.parallel.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.parallel.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.parallel.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.parallel.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.parallel.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.round.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.round.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.round.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.round.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.round.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.round.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.valid.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.valid.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.valid.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.join.valid.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.join.valid.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.join.valid.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.acute.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.acute.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.acute.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.acute.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.acute.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.acute.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.exceeded.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.exceeded.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.exceeded.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.exceeded.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.exceeded.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.exceeded.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.invalid.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.invalid.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.invalid.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.invalid.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.invalid.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.invalid.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.lineedge.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.lineedge.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.lineedge.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.lineedge.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.lineedge.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.lineedge.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.obtuse.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.obtuse.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.obtuse.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.obtuse.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.obtuse.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.obtuse.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.rightangle.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.rightangle.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.rightangle.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.rightangle.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.rightangle.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.rightangle.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.valid.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.valid.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.valid.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.valid.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.valid.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.valid.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.within.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.within.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.within.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.miter.within.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.miter.within.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.miter.within.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.union.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.union.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.union.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.union.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.union.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.union.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.basic.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.basic.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.basic.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.basic.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.invalid.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.invalid.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.invalid.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.invalid.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.invalid.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.invalid.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.scaledefault.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.scaledefault.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.scaledefault.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.scaledefault.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.scaledefault.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.scaledefault.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.transformed.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.transformed.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.transformed.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.transformed.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.transformed.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.transformed.worker.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.valid.html": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.valid.html",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.valid.html"
+          }
+        ],
+        "offscreen-canvas/line-styles/2d.line.width.valid.worker.js": [
+          {
+            "path": "offscreen-canvas/line-styles/2d.line.width.valid.worker.js",
+            "url": "/offscreen-canvas/line-styles/2d.line.width.valid.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.3.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.3.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.3.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.3.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.3.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.4.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.4.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.4.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.4.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.4.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.4.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.5.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.5.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.5.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.5.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.5.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.5.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.6.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.6.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.6.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.angle.6.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.angle.6.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.angle.6.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.default.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.default.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.default.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.default.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.default.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.default.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.empty.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.empty.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.empty.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.empty.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.empty.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.empty.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.end.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.end.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.end.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.end.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.end.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.end.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.negative.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.negative.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.negative.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.negative.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.negative.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.negative.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.nonempty.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.nonempty.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.nonempty.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.nonempty.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.nonempty.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.nonempty.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.nonfinite.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.nonfinite.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.scale.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.scale.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.scale.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.scale.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.scale.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.scale.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.scale.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.scale.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.scale.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.scale.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.scale.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.scale.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.3.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.3.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.3.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.3.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.3.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.4.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.4.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.4.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.4.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.4.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.4.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.5.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.5.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.5.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.shape.5.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.shape.5.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.shape.5.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.twopie.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.twopie.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.twopie.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.twopie.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.twopie.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.twopie.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.twopie.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.twopie.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.twopie.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.twopie.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.twopie.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.twopie.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.twopie.3.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.twopie.3.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.twopie.3.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.twopie.3.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.twopie.3.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.twopie.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.twopie.4.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.twopie.4.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.twopie.4.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.twopie.4.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.twopie.4.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.twopie.4.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.zero.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.zero.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.zero.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.zero.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.zero.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.zero.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.zero.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.zero.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.zero.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.zero.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.zero.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.zero.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.zeroradius.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.zeroradius.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.zeroradius.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arc.zeroradius.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arc.zeroradius.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arc.zeroradius.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.negative.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.negative.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.negative.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.negative.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.negative.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.negative.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.scale.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.scale.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.scale.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.scale.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.scale.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.scale.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.shape.end.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.shape.end.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.shape.end.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.shape.end.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.shape.end.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.shape.end.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.shape.start.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.shape.start.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.shape.start.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.shape.start.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.shape.start.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.shape.start.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.transformation.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.transformation.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.transformation.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.transformation.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.transformation.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.transformation.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.zero.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.zero.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.zero.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.zero.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.zero.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.zero.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.zero.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.zero.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.zero.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.arcTo.zero.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.arcTo.zero.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.arcTo.zero.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.beginPath.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.beginPath.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.beginPath.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.beginPath.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.beginPath.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.beginPath.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.basic.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.basic.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.basic.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.basic.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.basic.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.basic.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.basic.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.basic.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.basic.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.basic.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.basic.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.basic.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.empty.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.empty.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.empty.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.empty.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.empty.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.empty.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.intersect.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.intersect.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.intersect.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.intersect.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.intersect.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.intersect.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.unaffected.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.unaffected.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.unaffected.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.unaffected.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.unaffected.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.unaffected.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.winding.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.winding.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.winding.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.winding.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.winding.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.winding.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.winding.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.winding.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.winding.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.clip.winding.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.clip.winding.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.clip.winding.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.closePath.empty.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.closePath.empty.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.closePath.empty.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.closePath.empty.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.closePath.empty.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.closePath.empty.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.closePath.newline.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.closePath.newline.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.closePath.newline.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.closePath.newline.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.closePath.newline.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.closePath.newline.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.closePath.nextpoint.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.closePath.nextpoint.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.closePath.nextpoint.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.closePath.nextpoint.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.closePath.nextpoint.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.closePath.nextpoint.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.closed.basic.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.closed.basic.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.closed.basic.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.closed.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.closed.basic.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.closed.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.overlap.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.overlap.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.overlap.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.overlap.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.overlap.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.overlap.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.winding.add.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.winding.add.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.winding.add.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.winding.add.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.winding.add.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.winding.add.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.initial.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.initial.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.initial.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.initial.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.initial.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.initial.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.arc.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.arc.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.arc.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.arc.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.arc.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.arc.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.edge.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.edge.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.edge.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.edge.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.edge.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.edge.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.empty.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.empty.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.empty.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.empty.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.empty.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.empty.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.outside.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.outside.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.outside.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.outside.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.winding.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.winding.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.winding.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.isPointInPath.winding.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.isPointInPath.winding.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.isPointInPath.winding.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.basic.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.basic.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.basic.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.basic.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.moveTo.basic.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.moveTo.basic.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.moveTo.basic.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.moveTo.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.moveTo.basic.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.moveTo.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.moveTo.multiple.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.moveTo.multiple.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.moveTo.multiple.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.moveTo.multiple.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.moveTo.multiple.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.moveTo.multiple.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.basic.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.basic.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.basic.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.basic.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.closed.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.closed.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.closed.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.closed.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.closed.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.closed.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.end.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.end.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.end.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.end.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.end.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.end.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.end.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.end.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.end.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.end.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.end.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.end.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.negative.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.negative.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.negative.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.negative.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.negative.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.negative.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.newsubpath.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.newsubpath.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.newsubpath.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.newsubpath.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.newsubpath.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.newsubpath.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.nonfinite.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.nonfinite.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.selfintersect.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.selfintersect.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.selfintersect.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.selfintersect.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.selfintersect.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.selfintersect.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.winding.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.winding.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.winding.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.winding.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.winding.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.winding.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.3.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.3.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.3.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.3.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.3.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.4.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.4.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.4.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.4.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.4.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.4.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.5.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.5.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.5.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.5.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.5.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.5.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.6.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.6.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.6.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.rect.zero.6.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.rect.zero.6.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.rect.zero.6.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.empty.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.empty.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.empty.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.empty.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.empty.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.empty.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.overlap.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.overlap.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.overlap.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.overlap.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.overlap.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.overlap.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.arc.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.arc.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.closed.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.closed.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.closed.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.closed.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.corner.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.corner.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.corner.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.corner.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.corner.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.corner.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.curve.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.curve.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.curve.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.curve.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.line.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.line.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.line.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.line.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.line.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.line.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.rect.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.rect.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.prune.rect.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.prune.rect.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.scale1.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.scale1.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.scale1.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.scale1.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.scale1.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.scale1.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.scale2.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.scale2.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.scale2.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.scale2.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.scale2.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.scale2.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.skew.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.skew.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.skew.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.skew.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.skew.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.skew.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.unaffected.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.unaffected.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.unaffected.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.unaffected.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.unaffected.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.unaffected.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.union.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.union.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.union.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.stroke.union.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.stroke.union.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.stroke.union.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.transformation.basic.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.transformation.basic.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.transformation.basic.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.transformation.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.transformation.basic.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.transformation.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.transformation.changing.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.transformation.changing.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.transformation.changing.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.transformation.changing.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.transformation.changing.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.transformation.changing.worker.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.transformation.multiple.html": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.transformation.multiple.html",
+            "url": "/offscreen-canvas/path-objects/2d.path.transformation.multiple.html"
+          }
+        ],
+        "offscreen-canvas/path-objects/2d.path.transformation.multiple.worker.js": [
+          {
+            "path": "offscreen-canvas/path-objects/2d.path.transformation.multiple.worker.js",
+            "url": "/offscreen-canvas/path-objects/2d.path.transformation.multiple.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.length.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.length.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.length.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.length.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.length.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.length.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.range.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.range.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.range.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.range.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.range.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.range.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.round.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.round.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.round.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.round.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.round.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.round.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.set.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.set.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.set.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.set.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.set.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.set.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.string.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.string.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.string.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.string.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.string.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.string.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.created.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.created.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.created.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.created.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.created.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.created.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.null.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.null.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.null.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.null.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.null.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.null.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.path.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.path.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.path.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.path.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.path.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.path.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.worker.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.html": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.html",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.html"
+          }
+        ],
+        "offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.worker.js": [
+          {
+            "path": "offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.worker.js",
+            "url": "/offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.3.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.3.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.3.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.3.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.3.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.4.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.4.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.4.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.4.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.4.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.4.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.5.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.5.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.5.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.alpha.5.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.alpha.5.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.alpha.5.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.canvas.alpha.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.canvas.alpha.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.canvas.alpha.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.canvas.alpha.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.canvas.alpha.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.canvas.alpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.canvas.basic.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.canvas.basic.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.canvas.basic.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.canvas.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.canvas.basic.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.canvas.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.clip.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.clip.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.clip.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.clip.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.clip.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.clip.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.clip.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.clip.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.clip.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.clip.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.clip.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.clip.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.clip.3.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.clip.3.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.clip.3.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.clip.3.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.clip.3.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.clip.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.composite.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.composite.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.composite.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.composite.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.composite.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.composite.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.composite.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.composite.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.composite.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.composite.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.composite.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.composite.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.composite.3.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.composite.3.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.composite.3.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.composite.3.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.composite.3.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.composite.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.blur.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.blur.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.blur.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.blur.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.blur.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.blur.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.off.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.off.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.off.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.off.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.off.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.off.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.off.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.off.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.off.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.off.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.off.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.off.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.x.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.x.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.x.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.x.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.x.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.x.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.y.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.y.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.y.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.enable.y.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.enable.y.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.enable.y.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.gradient.alpha.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.gradient.alpha.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.gradient.alpha.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.gradient.alpha.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.gradient.alpha.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.gradient.alpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.gradient.basic.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.gradient.basic.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.gradient.basic.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.gradient.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.gradient.basic.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.gradient.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.alpha.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.alpha.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.alpha.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.alpha.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.alpha.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.alpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.basic.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.basic.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.basic.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.basic.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.scale.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.scale.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.scale.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.scale.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.scale.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.scale.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.section.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.section.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.section.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.section.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.section.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.section.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.transparent.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.transparent.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.transparent.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.transparent.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.transparent.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.transparent.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.transparent.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.transparent.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.transparent.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.image.transparent.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.image.transparent.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.image.transparent.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.offset.negativeX.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.offset.negativeX.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.offset.negativeX.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.offset.negativeX.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.offset.negativeX.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.offset.negativeX.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.offset.negativeY.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.offset.negativeY.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.offset.negativeY.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.offset.negativeY.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.offset.negativeY.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.offset.negativeY.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.offset.positiveX.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.offset.positiveX.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.offset.positiveX.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.offset.positiveX.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.offset.positiveX.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.offset.positiveX.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.offset.positiveY.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.offset.positiveY.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.offset.positiveY.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.offset.positiveY.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.offset.positiveY.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.offset.positiveY.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.outside.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.outside.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.outside.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.outside.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.outside.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.outside.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.pattern.alpha.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.pattern.alpha.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.pattern.alpha.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.pattern.alpha.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.pattern.alpha.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.pattern.alpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.pattern.basic.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.pattern.basic.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.pattern.basic.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.pattern.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.pattern.basic.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.pattern.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.basic.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.basic.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.basic.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.basic.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.cap.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.cap.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.cap.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.cap.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.cap.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.cap.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.cap.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.cap.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.cap.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.cap.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.cap.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.cap.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.join.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.join.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.join.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.join.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.join.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.join.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.join.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.join.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.join.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.join.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.join.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.join.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.join.3.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.join.3.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.join.3.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.stroke.join.3.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.stroke.join.3.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.stroke.join.3.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.transform.1.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.transform.1.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.transform.1.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.transform.1.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.transform.1.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.transform.1.worker.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.transform.2.html": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.transform.2.html",
+            "url": "/offscreen-canvas/shadows/2d.shadow.transform.2.html"
+          }
+        ],
+        "offscreen-canvas/shadows/2d.shadow.transform.2.worker.js": [
+          {
+            "path": "offscreen-canvas/shadows/2d.shadow.transform.2.worker.js",
+            "url": "/offscreen-canvas/shadows/2d.shadow.transform.2.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.path.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.path.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.path.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.path.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.path.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.path.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.html": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.html",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.html"
+          }
+        ],
+        "offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.worker.js": [
+          {
+            "path": "offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.worker.js",
+            "url": "/offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.arguments.missing.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.arguments.missing.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.arguments.missing.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.arguments.missing.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.arguments.missing.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.arguments.missing.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.casesensitive.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.casesensitive.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.casesensitive.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.casesensitive.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.casesensitive.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.casesensitive.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.emptystring.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.emptystring.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.emptystring.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.emptystring.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.emptystring.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.emptystring.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.colour.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.colour.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.colour.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.colour.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.colour.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.colour.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.clip.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.clip.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.clip.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.clip.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.clip.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.clip.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.different.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.different.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.different.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.different.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.different.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.different.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.path.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.path.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.path.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.path.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.path.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.path.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.same.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.same.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.same.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.same.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.same.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.same.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.transform.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.transform.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.transform.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/initial.reset.transform.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/initial.reset.transform.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/initial.reset.transform.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.default.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.default.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.default.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.default.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.default.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.default.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.idl.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.worker.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.large.html": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.large.html",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.large.html"
+          }
+        ],
+        "offscreen-canvas/the-offscreen-canvas/size.large.worker.js": [
+          {
+            "path": "offscreen-canvas/the-offscreen-canvas/size.large.worker.js",
+            "url": "/offscreen-canvas/the-offscreen-canvas/size.large.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.order.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.order.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.order.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.order.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.order.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.order.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.direction.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.direction.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.direction.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.direction.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.direction.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.direction.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.radians.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.radians.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.radians.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.radians.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.radians.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.radians.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.wrap.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.wrap.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.wrap.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.wrap.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.wrap.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.wrap.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.zero.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.zero.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.zero.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.rotate.zero.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.rotate.zero.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.rotate.zero.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.basic.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.basic.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.basic.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.basic.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.large.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.large.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.large.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.large.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.large.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.large.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.multiple.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.multiple.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.multiple.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.multiple.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.multiple.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.multiple.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.negative.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.negative.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.negative.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.negative.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.negative.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.negative.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.nonfinite.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.nonfinite.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.zero.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.zero.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.zero.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.scale.zero.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.scale.zero.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.scale.zero.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.setTransform.multiple.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.setTransform.multiple.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.setTransform.multiple.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.setTransform.multiple.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.setTransform.multiple.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.setTransform.multiple.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.setTransform.skewed.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.setTransform.skewed.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.setTransform.skewed.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.setTransform.skewed.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.setTransform.skewed.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.setTransform.skewed.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.transform.identity.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.transform.identity.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.transform.identity.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.transform.identity.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.transform.identity.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.transform.identity.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.transform.multiply.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.transform.multiply.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.transform.multiply.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.transform.multiply.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.transform.multiply.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.transform.multiply.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.transform.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.transform.nonfinite.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.transform.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.transform.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.transform.nonfinite.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.transform.nonfinite.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.transform.skewed.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.transform.skewed.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.transform.skewed.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.transform.skewed.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.transform.skewed.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.transform.skewed.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.translate.basic.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.translate.basic.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.translate.basic.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.translate.basic.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.translate.basic.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.translate.basic.worker.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.translate.nonfinite.html": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.translate.nonfinite.html",
+            "url": "/offscreen-canvas/transformations/2d.transformation.translate.nonfinite.html"
+          }
+        ],
+        "offscreen-canvas/transformations/2d.transformation.translate.nonfinite.worker.js": [
+          {
+            "path": "offscreen-canvas/transformations/2d.transformation.translate.nonfinite.worker.js",
+            "url": "/offscreen-canvas/transformations/2d.transformation.translate.nonfinite.worker.html"
+          }
+        ],
         "pointerevents/pointerevent_constructor.html": [
           {
             "path": "pointerevents/pointerevent_constructor.html",
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/innerText/getter-tests.js b/third_party/WebKit/LayoutTests/imported/wpt/innerText/getter-tests.js
index 44be5267..1e190c09 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/innerText/getter-tests.js
+++ b/third_party/WebKit/LayoutTests/imported/wpt/innerText/getter-tests.js
@@ -308,14 +308,13 @@
 
 /**** Ruby ****/
 
-testText("<div><ruby>abc<rp>(</rp><rt>def</rt><rp>)</rp></ruby>", "abc(def)", "<rp> rendered");
-testText("<div><rp>abc</rp>", "abc", "Lone <rp> rendered");
-testText("<div><rp style='visibility:hidden'>abc</rp>", "", "visibility:hidden <rp> not rendered");
-testText("<div><rp> abc </rp>", " abc ", "Lone <rp> rendered without whitespace trimming");
-testText("<div><rp style='display:block'>abc</rp>def", "abc\ndef", "display:block <rp> induces line breaks");
-testText("<div><rp style='display:block'> abc </rp>def", " abc \ndef", "display:block <rp> induces line breaks but doesn't trim whitespace");
-// XXX this is not desirable but the spec currently requires it.
-testText("<div><select class='poke-rp'></select>", "abc", "<rp> in a replaced element still renders");
+testText("<div><ruby>abc<rt>def</rt></ruby>", "abcdef", "<rt> and no <rp>");
+testText("<div><ruby>abc<rp>(</rp><rt>def</rt><rp>)</rp></ruby>", "abcdef", "<rp>");
+testText("<div><rp>abc</rp>", "", "Lone <rp>");
+testText("<div><rp style='visibility:hidden'>abc</rp>", "", "visibility:hidden <rp>");
+testText("<div><rp style='display:block'>abc</rp>def", "abc\ndef", "display:block <rp>");
+testText("<div><rp style='display:block'> abc </rp>def", "abc\ndef", "display:block <rp> with whitespace");
+testText("<div><select class='poke-rp'></select>", "", "<rp> in a <select>");
 
 /**** Shadow DOM ****/
 
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.html
new file mode 100644
index 0000000..0e011add
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.default</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.default</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.fillStyle, '#000000', "ctx.fillStyle", "'#000000'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.worker.js
new file mode 100644
index 0000000..bd5af52
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.default.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.default
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.fillStyle, '#000000', "ctx.fillStyle", "'#000000'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.html
new file mode 100644
index 0000000..d21282a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.get.semitransparent</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.get.semitransparent</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(255,255,255,0.45)';
+assert_regexp_match(ctx.fillStyle, /^rgba\(255, 255, 255, 0\.4\d+\)$/);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.worker.js
new file mode 100644
index 0000000..6d544f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.semitransparent.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.get.semitransparent
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(255,255,255,0.45)';
+assert_regexp_match(ctx.fillStyle, /^rgba\(255, 255, 255, 0\.4\d+\)$/);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.html
new file mode 100644
index 0000000..5da5b97
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.get.solid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.get.solid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#fa0';
+_assertSame(ctx.fillStyle, '#ffaa00', "ctx.fillStyle", "'#ffaa00'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.worker.js
new file mode 100644
index 0000000..aeea44a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.solid.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.get.solid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#fa0';
+_assertSame(ctx.fillStyle, '#ffaa00', "ctx.fillStyle", "'#ffaa00'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.html
new file mode 100644
index 0000000..a390abb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.get.transparent</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.get.transparent</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(0,0,0,0)';
+_assertSame(ctx.fillStyle, 'rgba(0, 0, 0, 0)', "ctx.fillStyle", "'rgba(0, 0, 0, 0)'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.worker.js
new file mode 100644
index 0000000..3df91dd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.get.transparent.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.get.transparent
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(0,0,0,0)';
+_assertSame(ctx.fillStyle, 'rgba(0, 0, 0, 0)', "ctx.fillStyle", "'rgba(0, 0, 0, 0)'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.html
new file mode 100644
index 0000000..8d232620
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.invalidstring</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.invalidstring</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillStyle = 'invalid';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.worker.js
new file mode 100644
index 0000000..50189bdf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidstring.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.invalidstring
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillStyle = 'invalid';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.html
new file mode 100644
index 0000000..3d1043d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.invalidtype</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.invalidtype</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillStyle = null;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.worker.js
new file mode 100644
index 0000000..422ae3e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.invalidtype.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.invalidtype
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillStyle = null;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt
new file mode 100644
index 0000000..70b5704
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-1 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html
new file mode 100644
index 0000000..f795694
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120 100.0% 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.worker.js
new file mode 100644
index 0000000..c147905
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120 100.0% 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt
new file mode 100644
index 0000000..fbeb3bc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-2 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html
new file mode 100644
index 0000000..a2c2c70d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120 100.0% 50.0% / 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.worker.js
new file mode 100644
index 0000000..d7a37d2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120 100.0% 50.0% / 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt
new file mode 100644
index 0000000..d4a4289
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-3 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html
new file mode 100644
index 0000000..a0bf4f3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.worker.js
new file mode 100644
index 0000000..1709f493
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt
new file mode 100644
index 0000000..be4f9bc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-4 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html
new file mode 100644
index 0000000..a28f689
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%, 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.worker.js
new file mode 100644
index 0000000..2935c51
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%, 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt
new file mode 100644
index 0000000..0d29c63
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-5 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html
new file mode 100644
index 0000000..87a0935
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-5</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120deg, 100.0%, 50.0%, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.worker.js
new file mode 100644
index 0000000..64c8108
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-5
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120deg, 100.0%, 50.0%, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt
new file mode 100644
index 0000000..86f82f9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-6 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html
new file mode 100644
index 0000000..c18f9d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-6</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120deg, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.worker.js
new file mode 100644
index 0000000..fe33f4b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-6
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120deg, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt
new file mode 100644
index 0000000..7a509847
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-7 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html
new file mode 100644
index 0000000..3ad95db15
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-7</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-7</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(133.33333333grad, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.worker.js
new file mode 100644
index 0000000..21d51d7d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-7.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-7
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(133.33333333grad, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt
new file mode 100644
index 0000000..c897025c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-8 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html
new file mode 100644
index 0000000..9971b225
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-8</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-8</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(2.0943951024rad, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.worker.js
new file mode 100644
index 0000000..b5bc64c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-8.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-8
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(2.0943951024rad, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt
new file mode 100644
index 0000000..3368b5d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-9 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html
new file mode 100644
index 0000000..0d99d14
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsl-9</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsl-9</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(0.3333333333turn, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.worker.js
new file mode 100644
index 0000000..cae19531
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsl-9.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsl-9
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(0.3333333333turn, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt
new file mode 100644
index 0000000..161283f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-1 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html
new file mode 100644
index 0000000..7f03f71
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120 100.0% 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.worker.js
new file mode 100644
index 0000000..21b44ce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120 100.0% 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt
new file mode 100644
index 0000000..cffa8364
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-2 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html
new file mode 100644
index 0000000..014957dee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120 100.0% 50.0% / 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.worker.js
new file mode 100644
index 0000000..7bf78b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120 100.0% 50.0% / 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt
new file mode 100644
index 0000000..27c718d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-3 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html
new file mode 100644
index 0000000..9fde7bd9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.worker.js
new file mode 100644
index 0000000..ff6ab80
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt
new file mode 100644
index 0000000..eabf2c18
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-4 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html
new file mode 100644
index 0000000..5669931
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%, 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.worker.js
new file mode 100644
index 0000000..f3910ef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%, 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt
new file mode 100644
index 0000000..6c7f267
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-5 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html
new file mode 100644
index 0000000..1e1990f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-5</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120deg, 100.0%, 50.0%, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.worker.js
new file mode 100644
index 0000000..c9631ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-5
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120deg, 100.0%, 50.0%, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt
new file mode 100644
index 0000000..f739038
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-6 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html
new file mode 100644
index 0000000..0f1b644e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-6</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120deg, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.worker.js
new file mode 100644
index 0000000..c6e4430d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-6
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120deg, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt
new file mode 100644
index 0000000..5338052
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-7 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html
new file mode 100644
index 0000000..da290762
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-7</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-7</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(133.33333333grad, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.worker.js
new file mode 100644
index 0000000..cfeaefd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-7.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-7
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(133.33333333grad, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt
new file mode 100644
index 0000000..aa1556a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-8 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html
new file mode 100644
index 0000000..404277d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-8</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-8</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(2.0943951024rad, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.worker.js
new file mode 100644
index 0000000..fb3415a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-8.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-8
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(2.0943951024rad, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt
new file mode 100644
index 0000000..5860c42
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-9 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html
new file mode 100644
index 0000000..2bd5a10
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-hsla-9</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-hsla-9</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(0.3333333333turn, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.worker.js
new file mode 100644
index 0000000..1df1c82
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-hsla-9.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-hsla-9
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(0.3333333333turn, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1-expected.txt
new file mode 100644
index 0000000..a3ee588c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-1 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html
new file mode 100644
index 0000000..3312d05a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgb-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0, 255.0, 0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.worker.js
new file mode 100644
index 0000000..4d1386a5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgb-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0, 255.0, 0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2-expected.txt
new file mode 100644
index 0000000..5f273b4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-2 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html
new file mode 100644
index 0000000..716d4f8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgb-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0, 255, 0, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.worker.js
new file mode 100644
index 0000000..100309e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgb-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0, 255, 0, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3-expected.txt
new file mode 100644
index 0000000..3109b12
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-3 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html
new file mode 100644
index 0000000..b0faa05
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgb-3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0, 255, 0, 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.worker.js
new file mode 100644
index 0000000..6ac4779
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgb-3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0, 255, 0, 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4-expected.txt
new file mode 100644
index 0000000..fbf6721
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-4 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html
new file mode 100644
index 0000000..df858019
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgb-4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0 255 0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.worker.js
new file mode 100644
index 0000000..acdfb2d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgb-4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0 255 0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5-expected.txt
new file mode 100644
index 0000000..5c631db
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-5 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html
new file mode 100644
index 0000000..b38903b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgb-5</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0 255 0 / 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.worker.js
new file mode 100644
index 0000000..7c44ddd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgb-5
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0 255 0 / 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6-expected.txt
new file mode 100644
index 0000000..956dade
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-6 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html
new file mode 100644
index 0000000..c54d8dfd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgb-6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgb-6</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0 255 0 / 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.worker.js
new file mode 100644
index 0000000..21d62f6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgb-6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgb-6
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0 255 0 / 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1-expected.txt
new file mode 100644
index 0000000..05540bf7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-1 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html
new file mode 100644
index 0000000..dbc831db
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgba-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255.0, 0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.worker.js
new file mode 100644
index 0000000..cbb6806
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgba-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255.0, 0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html
new file mode 100644
index 0000000..c1f9c6b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgba-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.worker.js
new file mode 100644
index 0000000..ee3a09a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgba-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3-expected.txt
new file mode 100644
index 0000000..16703db9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-3 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html
new file mode 100644
index 0000000..f992663
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgba-3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.worker.js
new file mode 100644
index 0000000..7b5f392
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgba-3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4-expected.txt
new file mode 100644
index 0000000..ab79479
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-4 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html
new file mode 100644
index 0000000..482c95f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgba-4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0 255 0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.worker.js
new file mode 100644
index 0000000..8e02935
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgba-4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0 255 0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5-expected.txt
new file mode 100644
index 0000000..b6cce60
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-5 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html
new file mode 100644
index 0000000..ddfff551
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgba-5</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0 255 0 / 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.worker.js
new file mode 100644
index 0000000..14d2b30
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgba-5
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0 255 0 / 0.2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6-expected.txt
new file mode 100644
index 0000000..e656162
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-6 assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html
new file mode 100644
index 0000000..339cf5f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.css-color-4-rgba-6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.css-color-4-rgba-6</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0 255 0 / 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.worker.js
new file mode 100644
index 0000000..016c7cc5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.css-color-4-rgba-6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.css-color-4-rgba-6
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0 255 0 / 20%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,51, "50,25", "0,255,0,51");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.html
new file mode 100644
index 0000000..6637693b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hex3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hex3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.worker.js
new file mode 100644
index 0000000..8ccfe6d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hex3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.html
new file mode 100644
index 0000000..403ea90
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hex4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hex4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = '#0f0f';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.worker.js
new file mode 100644
index 0000000..d8743c3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hex4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = '#0f0f';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.html
new file mode 100644
index 0000000..c2dbe90
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hex6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hex6</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = '#00fF00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.worker.js
new file mode 100644
index 0000000..b6fe583a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hex6
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = '#00fF00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.html
new file mode 100644
index 0000000..b09096ea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hex8</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hex8</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = '#00ff00ff';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.worker.js
new file mode 100644
index 0000000..06b5fd0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hex8.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hex8
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = '#00ff00ff';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.html
new file mode 100644
index 0000000..f6f9983
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, 100%, 50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.worker.js
new file mode 100644
index 0000000..503f5b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, 100%, 50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.html
new file mode 100644
index 0000000..7df91158
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl( -240 , 100% , 50% )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.worker.js
new file mode 100644
index 0000000..bb9182a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl( -240 , 100% , 50% )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.html
new file mode 100644
index 0000000..e56c95fb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(360120, 100%, 50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.worker.js
new file mode 100644
index 0000000..0809fd42
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(360120, 100%, 50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.html
new file mode 100644
index 0000000..f23a770
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(-360240, 100%, 50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.worker.js
new file mode 100644
index 0000000..ccbc3cd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(-360240, 100%, 50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.html
new file mode 100644
index 0000000..0ef8a0a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-5</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.worker.js
new file mode 100644
index 0000000..42a9f90
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-5
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120.0, 100.0%, 50.0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.html
new file mode 100644
index 0000000..420b787e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-6</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(+120, +100%, +50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.worker.js
new file mode 100644
index 0000000..9a53686
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-6
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(+120, +100%, +50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.html
new file mode 100644
index 0000000..f586958
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-clamp-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-clamp-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, 200%, 50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.worker.js
new file mode 100644
index 0000000..6c59860
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-clamp-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, 200%, 50%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.html
new file mode 100644
index 0000000..92c9c95
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-clamp-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-clamp-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, -200%, 49.9%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.worker.js
new file mode 100644
index 0000000..7aac1c9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-clamp-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, -200%, 49.9%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.html
new file mode 100644
index 0000000..a6cf150
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-clamp-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-clamp-3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, 100%, 200%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 255,255,255,255, "50,25", "255,255,255,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.worker.js
new file mode 100644
index 0000000..341153b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-clamp-3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, 100%, 200%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 255,255,255,255, "50,25", "255,255,255,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.html
new file mode 100644
index 0000000..ac414fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsl-clamp-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsl-clamp-4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, 100%, -200%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,255, "50,25", "0,0,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.worker.js
new file mode 100644
index 0000000..403962a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsl-clamp-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsl-clamp-4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsl(120, 100%, -200%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,255, "50,25", "0,0,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.html
new file mode 100644
index 0000000..be595d7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsla-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsla-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, 50%, 0.499)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,127, "50,25", "0,255,0,127");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.worker.js
new file mode 100644
index 0000000..8185fdd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsla-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, 50%, 0.499)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,127, "50,25", "0,255,0,127");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.html
new file mode 100644
index 0000000..c1d0486
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsla-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsla-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla( 120.0 , 100.0% , 50.0% , 1 )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.worker.js
new file mode 100644
index 0000000..91c882ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsla-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla( 120.0 , 100.0% , 50.0% , 1 )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.html
new file mode 100644
index 0000000..80b0ecf3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsla-clamp-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsla-clamp-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 200%, 50%, 1)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.worker.js
new file mode 100644
index 0000000..b031416
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsla-clamp-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 200%, 50%, 1)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.html
new file mode 100644
index 0000000..ae4e637a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsla-clamp-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsla-clamp-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, -200%, 49.9%, 1)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.worker.js
new file mode 100644
index 0000000..671ca1a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsla-clamp-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, -200%, 49.9%, 1)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.html
new file mode 100644
index 0000000..9e35634
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsla-clamp-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsla-clamp-3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, 200%, 1)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 255,255,255,255, "50,25", "255,255,255,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.worker.js
new file mode 100644
index 0000000..a6045c6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsla-clamp-3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, 200%, 1)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 255,255,255,255, "50,25", "255,255,255,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.html
new file mode 100644
index 0000000..858b459
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsla-clamp-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsla-clamp-4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, -200%, 1)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,255, "50,25", "0,0,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.worker.js
new file mode 100644
index 0000000..77be7be0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsla-clamp-4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, -200%, 1)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,255, "50,25", "0,0,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.html
new file mode 100644
index 0000000..285108a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsla-clamp-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsla-clamp-5</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, 50%, 2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.worker.js
new file mode 100644
index 0000000..d534d4d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsla-clamp-5
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, 50%, 2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.html
new file mode 100644
index 0000000..8056511b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.hsla-clamp-6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.hsla-clamp-6</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, 0%, -2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.worker.js
new file mode 100644
index 0000000..32a77d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.hsla-clamp-6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.hsla-clamp-6
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'hsla(120, 100%, 0%, -2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.html
new file mode 100644
index 0000000..f0ea1a7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.html4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.html4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'limE';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.worker.js
new file mode 100644
index 0000000..c954966
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.html4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.html4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'limE';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html
new file mode 100644
index 0000000..b23a376
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-hsl-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100%, 50% / 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.worker.js
new file mode 100644
index 0000000..27db125
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-hsl-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100%, 50% / 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html
new file mode 100644
index 0000000..2227d55
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-hsl-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0 100% 50%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.worker.js
new file mode 100644
index 0000000..4edbae4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-hsl-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0 100% 50%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html
new file mode 100644
index 0000000..dc7caad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-hsl-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100% 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.worker.js
new file mode 100644
index 0000000..4744f9e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-hsl-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100% 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html
new file mode 100644
index 0000000..affb65e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-hsl-4</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0 100% 50% /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.worker.js
new file mode 100644
index 0000000..545df307
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-hsl-4
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0 100% 50% /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html
new file mode 100644
index 0000000..407f6ee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-hsl-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-hsl-5</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100%, 50% /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.worker.js
new file mode 100644
index 0000000..960e3184
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsl-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-hsl-5
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100%, 50% /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html
new file mode 100644
index 0000000..319676e2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-hsla-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-hsla-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0, 100%, 50% / 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.worker.js
new file mode 100644
index 0000000..0bbf5acc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-hsla-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0, 100%, 50% / 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html
new file mode 100644
index 0000000..001e1ba
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-hsla-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-hsla-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0 100% 50%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.worker.js
new file mode 100644
index 0000000..c1e7c0a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-hsla-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0 100% 50%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html
new file mode 100644
index 0000000..4e9e59c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-hsla-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-hsla-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0, 100% 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.worker.js
new file mode 100644
index 0000000..bb45213
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-hsla-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-hsla-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0, 100% 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html
new file mode 100644
index 0000000..ba0ca5e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-rgb-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255, 0, 0 / 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.worker.js
new file mode 100644
index 0000000..17a8f44
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-rgb-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255, 0, 0 / 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html
new file mode 100644
index 0000000..42354ae
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-rgb-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255 0 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.worker.js
new file mode 100644
index 0000000..7f6efc60
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-rgb-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255 0 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html
new file mode 100644
index 0000000..402e6ad5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-rgb-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255, 0 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.worker.js
new file mode 100644
index 0000000..f5d551c0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-rgb-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255, 0 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html
new file mode 100644
index 0000000..2556a9c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-rgb-4</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(0 0 0 /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.worker.js
new file mode 100644
index 0000000..966f465
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-rgb-4
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(0 0 0 /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html
new file mode 100644
index 0000000..c2fc1ee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-rgb-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-rgb-5</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(0, 0, 0 /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.worker.js
new file mode 100644
index 0000000..3a54246
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgb-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-rgb-5
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(0, 0, 0 /)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html
new file mode 100644
index 0000000..f842efaf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-rgba-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-rgba-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0 / 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.worker.js
new file mode 100644
index 0000000..88f7d354
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-rgba-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0 / 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html
new file mode 100644
index 0000000..22660ca3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-rgba-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-rgba-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255 0 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.worker.js
new file mode 100644
index 0000000..cd4b4890
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-rgba-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255 0 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html
new file mode 100644
index 0000000..e89a715e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.css-color-4-rgba-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.css-color-4-rgba-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.worker.js
new file mode 100644
index 0000000..999e0b5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.css-color-4-rgba-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.css-color-4-rgba-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html
new file mode 100644
index 0000000..07ee370
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hex1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hex1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#f'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.worker.js
new file mode 100644
index 0000000..f595e108
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hex1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#f'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.html
new file mode 100644
index 0000000..330c4bac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hex2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hex2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#f0'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.worker.js
new file mode 100644
index 0000000..6fb16f3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hex2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#f0'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.html
new file mode 100644
index 0000000..0a69c28
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hex3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hex3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#g00'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.worker.js
new file mode 100644
index 0000000..832f4dea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hex3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#g00'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.html
new file mode 100644
index 0000000..5565e70
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hex4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hex4</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#fg00'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.worker.js
new file mode 100644
index 0000000..f7a7097a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hex4
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#fg00'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.html
new file mode 100644
index 0000000..b1e452c2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hex5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hex5</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#ff000'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.worker.js
new file mode 100644
index 0000000..a931467b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hex5
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#ff000'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.html
new file mode 100644
index 0000000..b0954ef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hex6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hex6</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#fg0000'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.worker.js
new file mode 100644
index 0000000..750548d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hex6
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#fg0000'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.html
new file mode 100644
index 0000000..e53cb87
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hex7</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hex7</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#ff0000f'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.worker.js
new file mode 100644
index 0000000..7796a4e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex7.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hex7
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#ff0000f'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.html
new file mode 100644
index 0000000..a59332f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hex8</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hex8</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#fg0000ff'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.worker.js
new file mode 100644
index 0000000..2156ef0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hex8.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hex8
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '#fg0000ff'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.html
new file mode 100644
index 0000000..fb15484
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsl-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsl-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0%, 100%, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.worker.js
new file mode 100644
index 0000000..f1b2a50
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsl-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0%, 100%, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.html
new file mode 100644
index 0000000..7f50966e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsl-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsl-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(z, 100%, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.worker.js
new file mode 100644
index 0000000..b09a92d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsl-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(z, 100%, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.html
new file mode 100644
index 0000000..7244cd0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsl-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsl-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 0, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.worker.js
new file mode 100644
index 0000000..0b2a065
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsl-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 0, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.html
new file mode 100644
index 0000000..3577666a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsl-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsl-4</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100%, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.worker.js
new file mode 100644
index 0000000..f174347
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsl-4
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100%, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html
new file mode 100644
index 0000000..a3b90708
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsl-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsl-5</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100.%, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.worker.js
new file mode 100644
index 0000000..331ec07
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsl-5
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100.%, 50%)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html
new file mode 100644
index 0000000..9e80a62
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsl-6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsl-6</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100%, 50%,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.worker.js
new file mode 100644
index 0000000..3cad84f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsl-6.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsl-6
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsl(0, 100%, 50%,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.html
new file mode 100644
index 0000000..0904209
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsla-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsla-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0%, 100%, 50%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.worker.js
new file mode 100644
index 0000000..011fbe7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsla-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0%, 100%, 50%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html
new file mode 100644
index 0000000..6e89e9d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsla-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsla-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0, 0, 50%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.worker.js
new file mode 100644
index 0000000..9ac75b7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsla-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0, 0, 50%, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html
new file mode 100644
index 0000000..82ca843
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.hsla-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.hsla-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0, 0, 50%, 1,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.worker.js
new file mode 100644
index 0000000..5f5126ef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.hsla-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.hsla-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'hsla(0, 0, 50%, 1,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html
new file mode 100644
index 0000000..26bbd26
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.name-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.name-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'darkbrown'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.worker.js
new file mode 100644
index 0000000..70b2440
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.name-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'darkbrown'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.html
new file mode 100644
index 0000000..d112d5d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.name-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.name-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'firebrick1'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.worker.js
new file mode 100644
index 0000000..1aa0f528
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.name-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'firebrick1'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.html
new file mode 100644
index 0000000..07a0f6c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.name-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.name-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'red blue'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.worker.js
new file mode 100644
index 0000000..abc579a8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.name-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'red blue'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.html
new file mode 100644
index 0000000..a69c30e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.name-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.name-4</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '"red"'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.worker.js
new file mode 100644
index 0000000..7b2f119d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.name-4
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '"red"'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.html
new file mode 100644
index 0000000..3f3ae631
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.name-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.name-5</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '"red'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.worker.js
new file mode 100644
index 0000000..a3f9cf14
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.name-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.name-5
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = '"red'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html
new file mode 100644
index 0000000..3ba241bc9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.rgb-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.rgb-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255.0, 0, 0,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.worker.js
new file mode 100644
index 0000000..c1ef405
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.rgb-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255.0, 0, 0,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html
new file mode 100644
index 0000000..061784f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.rgb-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.rgb-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(100%, 0, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.worker.js
new file mode 100644
index 0000000..e2c287eb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.rgb-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(100%, 0, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html
new file mode 100644
index 0000000..1641667
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.rgb-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.rgb-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255, - 1, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.worker.js
new file mode 100644
index 0000000..bdb9b6d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgb-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.rgb-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgb(255, - 1, 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html
new file mode 100644
index 0000000..bc40569
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.rgba-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.rgba-1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(100%, 0, 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.worker.js
new file mode 100644
index 0000000..290f175
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.rgba-1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(100%, 0, 0, 1)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html
new file mode 100644
index 0000000..eded526
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.rgba-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.rgba-2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0, 1. 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.worker.js
new file mode 100644
index 0000000..038b383
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.rgba-2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0, 1. 0)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html
new file mode 100644
index 0000000..dec7ace
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.rgba-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.rgba-3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0, 1.)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.worker.js
new file mode 100644
index 0000000..9bdf773
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.rgba-3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0, 1.)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html
new file mode 100644
index 0000000..8b0aee5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.rgba-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.rgba-4</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0, '; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.worker.js
new file mode 100644
index 0000000..0db44c3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.rgba-4
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0, '; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html
new file mode 100644
index 0000000..a3d9790a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.invalid.rgba-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.invalid.rgba-5</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0, 1,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.worker.js
new file mode 100644
index 0000000..e8317ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.invalid.rgba-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.invalid.rgba-5
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#0f0';
+try { ctx.fillStyle = 'rgba(255, 0, 0, 1,)'; } catch (e) { } // this shouldn't throw, but it shouldn't matter here if it does
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html
new file mode 100644
index 0000000..5c48aee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgb-clamp-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgb-clamp-1</h1>
+<p class="desc"></p>
+
+<p class="notes">Assumes colours are clamped to [0,255].
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-1000, 1000, -1000)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.worker.js
new file mode 100644
index 0000000..b98c41c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgb-clamp-1
+// Description:
+// Note:<p class="notes">Assumes colours are clamped to [0,255].
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-1000, 1000, -1000)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.html
new file mode 100644
index 0000000..3db018c5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgb-clamp-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgb-clamp-2</h1>
+<p class="desc"></p>
+
+<p class="notes">Assumes colours are clamped to [0,255].
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-200%, 200%, -200%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.worker.js
new file mode 100644
index 0000000..de7f906
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgb-clamp-2
+// Description:
+// Note:<p class="notes">Assumes colours are clamped to [0,255].
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-200%, 200%, -200%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.html
new file mode 100644
index 0000000..bde2348
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgb-clamp-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgb-clamp-3</h1>
+<p class="desc"></p>
+
+<p class="notes">Assumes colours are clamped to [0,255].
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-2147483649, 4294967298, -18446744073709551619)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.worker.js
new file mode 100644
index 0000000..a594da0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgb-clamp-3
+// Description:
+// Note:<p class="notes">Assumes colours are clamped to [0,255].
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-2147483649, 4294967298, -18446744073709551619)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.html
new file mode 100644
index 0000000..3668053
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgb-clamp-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgb-clamp-4</h1>
+<p class="desc"></p>
+
+<p class="notes">Assumes colours are clamped to [0,255].
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-1000000000000000000000000000000000000000, 1000000000000000000000000000000000000000, -1000000000000000000000000000000000000000)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.worker.js
new file mode 100644
index 0000000..0dcbcbc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgb-clamp-4
+// Description:
+// Note:<p class="notes">Assumes colours are clamped to [0,255].
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-1000000000000000000000000000000000000000, 1000000000000000000000000000000000000000, -1000000000000000000000000000000000000000)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.html
new file mode 100644
index 0000000..04913c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgb-clamp-5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgb-clamp-5</h1>
+<p class="desc"></p>
+
+<p class="notes">Assumes colours are clamped to [0,255].
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, -10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.worker.js
new file mode 100644
index 0000000..21ebeff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-clamp-5.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgb-clamp-5
+// Description:
+// Note:<p class="notes">Assumes colours are clamped to [0,255].
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(-10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, -10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.html
new file mode 100644
index 0000000..31586c65a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgb-eof</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgb-eof</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0, 255, 0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.worker.js
new file mode 100644
index 0000000..ead4ddd5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-eof.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgb-eof
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0, 255, 0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.html
new file mode 100644
index 0000000..2821ff2c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgb-num</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgb-num</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0,255,0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.worker.js
new file mode 100644
index 0000000..333fe0f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-num.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgb-num
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0,255,0)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.html
new file mode 100644
index 0000000..0fd927b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgb-percent</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgb-percent</h1>
+<p class="desc"></p>
+
+<p class="notes">CSS3 Color says "The integer value 255 corresponds to 100%". (In particular, it is not 254...)
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0% ,100% ,0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.worker.js
new file mode 100644
index 0000000..67513fb5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgb-percent.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgb-percent
+// Description:
+// Note:<p class="notes">CSS3 Color says "The integer value 255 corresponds to 100%". (In particular, it is not 254...)
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgb(0% ,100% ,0%)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.html
new file mode 100644
index 0000000..6e40324
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-clamp-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-clamp-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, -2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.worker.js
new file mode 100644
index 0000000..561f2322
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-clamp-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, -2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.html
new file mode 100644
index 0000000..c65b440
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-clamp-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-clamp-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, 2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.worker.js
new file mode 100644
index 0000000..7d7b27c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-clamp-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-clamp-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, 2)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.html
new file mode 100644
index 0000000..5f05f788
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-eof</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-eof</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, 1';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.worker.js
new file mode 100644
index 0000000..8fa8b51e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-eof.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-eof
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0, 255, 0, 1';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.html
new file mode 100644
index 0000000..8b75a3f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-num-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-num-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  ,  .499  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,127, "50,25", "0,255,0,127");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.worker.js
new file mode 100644
index 0000000..2dbb9285
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-num-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  ,  .499  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,127, "50,25", "0,255,0,127");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.html
new file mode 100644
index 0000000..c843b9a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-num-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-num-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  ,  0.499  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,127, "50,25", "0,255,0,127");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.worker.js
new file mode 100644
index 0000000..3d8a26a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-num-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-num-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  ,  0.499  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,127, "50,25", "0,255,0,127");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.html
new file mode 100644
index 0000000..ccd02ae
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-percent</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-percent</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0%,100%,0%,0.499)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,127, "50,25", "0,255,0,127");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.worker.js
new file mode 100644
index 0000000..0952166
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-percent.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-percent
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(0%,100%,0%,0.499)';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,127, "50,25", "0,255,0,127");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.html
new file mode 100644
index 0000000..ba577fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-solid-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-solid-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  ,  1  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.worker.js
new file mode 100644
index 0000000..585e851
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-solid-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  ,  1  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.html
new file mode 100644
index 0000000..6fb884c1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-solid-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-solid-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  ,  1.0  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.worker.js
new file mode 100644
index 0000000..61265402
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-solid-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  ,  1.0  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.html
new file mode 100644
index 0000000..e48a586f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-solid-3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-solid-3</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  , +1  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.worker.js
new file mode 100644
index 0000000..db4516a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-3.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-solid-3
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba(  0  ,  255  ,  0  , +1  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.html
new file mode 100644
index 0000000..5a48b8d1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.rgba-solid-4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.rgba-solid-4</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba( -0  ,  255  , +0  ,  1  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.worker.js
new file mode 100644
index 0000000..181cc45b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.rgba-solid-4.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.rgba-solid-4
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'rgba( -0  ,  255  , +0  ,  1  )';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.html
new file mode 100644
index 0000000..e9c9726
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.svg-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.svg-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'gray';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 128,128,128,255, "50,25", "128,128,128,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.worker.js
new file mode 100644
index 0000000..71bcb605f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.svg-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'gray';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 128,128,128,255, "50,25", "128,128,128,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.html
new file mode 100644
index 0000000..dcfec31
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.svg-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.svg-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'grey';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 128,128,128,255, "50,25", "128,128,128,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.worker.js
new file mode 100644
index 0000000..0ac80544
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.svg-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.svg-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'grey';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 128,128,128,255, "50,25", "128,128,128,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.html
new file mode 100644
index 0000000..ce35a742
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.system</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.system</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'ThreeDDarkShadow';
+assert_regexp_match(ctx.fillStyle, /^#(?!(FF0000|ff0000|f00)$)/); // test that it's not red
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.worker.js
new file mode 100644
index 0000000..ab5907d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.system.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.system
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'ThreeDDarkShadow';
+assert_regexp_match(ctx.fillStyle, /^#(?!(FF0000|ff0000|f00)$)/); // test that it's not red
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.html
new file mode 100644
index 0000000..3e7da89
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.transparent-1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.transparent-1</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'transparent';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.worker.js
new file mode 100644
index 0000000..10bb53b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-1.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.transparent-1
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'transparent';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html
new file mode 100644
index 0000000..9dd87625
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.fillStyle.parse.transparent-2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.fillStyle.parse.transparent-2</h1>
+<p class="desc"></p>
+
+<p class="notes">
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'TrAnSpArEnT';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.worker.js
new file mode 100644
index 0000000..0dd0784
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.fillStyle.parse.transparent-2
+// Description:
+// Note:<p class="notes">
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+
+ctx.fillStyle = '#f00';
+ctx.fillStyle = 'TrAnSpArEnT';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.html
new file mode 100644
index 0000000..37205580
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.empty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.empty</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(0, 0, 0, 50);
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.worker.js
new file mode 100644
index 0000000..146520e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.empty.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.empty
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(0, 0, 0, 50);
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.html
new file mode 100644
index 0000000..696c6e6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.alpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.alpha</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#ff0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, 'rgba(0,0,255, 0)');
+g.addColorStop(1, 'rgba(0,0,255, 1)');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 25,25, 191,191,63,255, "25,25", "191,191,63,255", 3);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255", 3);
+_assertPixelApprox(offscreenCanvas, 75,25, 63,63,191,255, "75,25", "63,63,191,255", 3);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.worker.js
new file mode 100644
index 0000000..fe53db22
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.alpha.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.alpha
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#ff0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, 'rgba(0,0,255, 0)');
+g.addColorStop(1, 'rgba(0,0,255, 1)');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 25,25, 191,191,63,255, "25,25", "191,191,63,255", 3);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255", 3);
+_assertPixelApprox(offscreenCanvas, 75,25, 63,63,191,255, "75,25", "63,63,191,255", 3);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.html
new file mode 100644
index 0000000..a924677
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.colour</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.colour</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, '#ff0');
+g.addColorStop(1, '#00f');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 25,25, 191,191,63,255, "25,25", "191,191,63,255", 3);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255", 3);
+_assertPixelApprox(offscreenCanvas, 75,25, 63,63,191,255, "75,25", "63,63,191,255", 3);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.worker.js
new file mode 100644
index 0000000..87cea53d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colour.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.colour
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, '#ff0');
+g.addColorStop(1, '#00f');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 25,25, 191,191,63,255, "25,25", "191,191,63,255", 3);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255", 3);
+_assertPixelApprox(offscreenCanvas, 75,25, 63,63,191,255, "75,25", "63,63,191,255", 3);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.html
new file mode 100644
index 0000000..19c4e47
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.colouralpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.colouralpha</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, 'rgba(255,255,0, 0)');
+g.addColorStop(1, 'rgba(0,0,255, 1)');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 25,25, 190,190,65,65, "25,25", "190,190,65,65", 3);
+_assertPixelApprox(offscreenCanvas, 50,25, 126,126,128,128, "50,25", "126,126,128,128", 3);
+_assertPixelApprox(offscreenCanvas, 75,25, 62,62,192,192, "75,25", "62,62,192,192", 3);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.worker.js
new file mode 100644
index 0000000..34c2d037
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.colouralpha.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.colouralpha
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, 'rgba(255,255,0, 0)');
+g.addColorStop(1, 'rgba(0,0,255, 1)');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 25,25, 190,190,65,65, "25,25", "190,190,65,65", 3);
+_assertPixelApprox(offscreenCanvas, 50,25, 126,126,128,128, "50,25", "126,126,128,128", 3);
+_assertPixelApprox(offscreenCanvas, 75,25, 62,62,192,192, "75,25", "62,62,192,192", 3);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.html
new file mode 100644
index 0000000..7f5cd7b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.multiple</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.multiple</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 200;
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#ff0');
+g.addColorStop(0.5, '#0ff');
+g.addColorStop(1, '#f0f');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 200, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,255,127,255, "50,25", "127,255,127,255", 3);
+_assertPixelApprox(offscreenCanvas, 100,25, 0,255,255,255, "100,25", "0,255,255,255", 3);
+_assertPixelApprox(offscreenCanvas, 150,25, 127,127,255,255, "150,25", "127,127,255,255", 3);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.worker.js
new file mode 100644
index 0000000..33bdf88
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.multiple.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.multiple
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 200;
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#ff0');
+g.addColorStop(0.5, '#0ff');
+g.addColorStop(1, '#f0f');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 200, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,255,127,255, "50,25", "127,255,127,255", 3);
+_assertPixelApprox(offscreenCanvas, 100,25, 0,255,255,255, "100,25", "0,255,255,255", 3);
+_assertPixelApprox(offscreenCanvas, 150,25, 127,127,255,255, "150,25", "127,127,255,255", 3);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.html
new file mode 100644
index 0000000..f0fd9af
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.outside</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(25, 0, 75, 0);
+g.addColorStop(0.4, '#0f0');
+g.addColorStop(0.6, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 20,25, 0,255,0,255, "20,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 80,25, 0,255,0,255, "80,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js
new file mode 100644
index 0000000..9216d0f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.outside.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.outside
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(25, 0, 75, 0);
+g.addColorStop(0.4, '#0f0');
+g.addColorStop(0.6, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 20,25, 0,255,0,255, "20,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 80,25, 0,255,0,255, "80,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.html
new file mode 100644
index 0000000..945873e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.overlap</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.overlap</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 200;
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(0, '#ff0');
+g.addColorStop(0.25, '#00f');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.25, '#ff0');
+g.addColorStop(0.5, '#00f');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.75, '#00f');
+g.addColorStop(0.75, '#f00');
+g.addColorStop(0.75, '#ff0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.5, '#ff0');
+g.addColorStop(1, '#00f');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 200, 50);
+_assertPixelApprox(offscreenCanvas, 49,25, 0,0,255,255, "49,25", "0,0,255,255", 16);
+_assertPixelApprox(offscreenCanvas, 51,25, 255,255,0,255, "51,25", "255,255,0,255", 16);
+_assertPixelApprox(offscreenCanvas, 99,25, 0,0,255,255, "99,25", "0,0,255,255", 16);
+_assertPixelApprox(offscreenCanvas, 101,25, 255,255,0,255, "101,25", "255,255,0,255", 16);
+_assertPixelApprox(offscreenCanvas, 149,25, 0,0,255,255, "149,25", "0,0,255,255", 16);
+_assertPixelApprox(offscreenCanvas, 151,25, 255,255,0,255, "151,25", "255,255,0,255", 16);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.worker.js
new file mode 100644
index 0000000..bf5a5a5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap.worker.js
@@ -0,0 +1,45 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.overlap
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 200;
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(0, '#ff0');
+g.addColorStop(0.25, '#00f');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.25, '#ff0');
+g.addColorStop(0.5, '#00f');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.75, '#00f');
+g.addColorStop(0.75, '#f00');
+g.addColorStop(0.75, '#ff0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.5, '#ff0');
+g.addColorStop(1, '#00f');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 200, 50);
+_assertPixelApprox(offscreenCanvas, 49,25, 0,0,255,255, "49,25", "0,0,255,255", 16);
+_assertPixelApprox(offscreenCanvas, 51,25, 255,255,0,255, "51,25", "255,255,0,255", 16);
+_assertPixelApprox(offscreenCanvas, 99,25, 0,0,255,255, "99,25", "0,0,255,255", 16);
+_assertPixelApprox(offscreenCanvas, 101,25, 255,255,0,255, "101,25", "255,255,0,255", 16);
+_assertPixelApprox(offscreenCanvas, 149,25, 0,0,255,255, "149,25", "0,0,255,255", 16);
+_assertPixelApprox(offscreenCanvas, 151,25, 255,255,0,255, "151,25", "255,255,0,255", 16);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.html
new file mode 100644
index 0000000..f20904e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.overlap2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.overlap2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+var ps = [ 0, 1/10, 1/4, 1/3, 1/2, 3/4, 1 ];
+for (var p = 0; p < ps.length; ++p)
+{
+        g.addColorStop(ps[p], '#0f0');
+        for (var i = 0; i < 15; ++i)
+                g.addColorStop(ps[p], '#f00');
+        g.addColorStop(ps[p], '#0f0');
+}
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 30,25, 0,255,0,255, "30,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 40,25, 0,255,0,255, "40,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 60,25, 0,255,0,255, "60,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,25, 0,255,0,255, "80,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.worker.js
new file mode 100644
index 0000000..42b8473
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.overlap2.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.overlap2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+var ps = [ 0, 1/10, 1/4, 1/3, 1/2, 3/4, 1 ];
+for (var p = 0; p < ps.length; ++p)
+{
+        g.addColorStop(ps[p], '#0f0');
+        for (var i = 0; i < 15; ++i)
+                g.addColorStop(ps[p], '#f00');
+        g.addColorStop(ps[p], '#0f0');
+}
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 30,25, 0,255,0,255, "30,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 40,25, 0,255,0,255, "40,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 60,25, 0,255,0,255, "60,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,25, 0,255,0,255, "80,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.html
new file mode 100644
index 0000000..c585bb0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.solid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.solid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.worker.js
new file mode 100644
index 0000000..4b50008
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.solid.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.solid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.html
new file mode 100644
index 0000000..ffdb32de87
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.vertical</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.vertical</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 0, 50);
+g.addColorStop(0, '#ff0');
+g.addColorStop(1, '#00f');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,12, 191,191,63,255, "50,12", "191,191,63,255", 10);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255", 5);
+_assertPixelApprox(offscreenCanvas, 50,37, 63,63,191,255, "50,37", "63,63,191,255", 10);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.worker.js
new file mode 100644
index 0000000..8212ad8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.vertical.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.vertical
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 0, 50);
+g.addColorStop(0, '#ff0');
+g.addColorStop(1, '#00f');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,12, 191,191,63,255, "50,12", "191,191,63,255", 10);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,127,127,255, "50,25", "127,127,127,255", 5);
+_assertPixelApprox(offscreenCanvas, 50,37, 63,63,191,255, "50,37", "63,63,191,255", 10);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html
new file mode 100644
index 0000000..7c8eea80
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.zerosize.fill</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.zerosize.fill</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.rect(0, 0, 100, 50);
+ctx.fill();
+_assertPixel(offscreenCanvas, 40,20, 0,255,0,255, "40,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js
new file mode 100644
index 0000000..4dbe1462
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fill.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.zerosize.fill
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.rect(0, 0, 100, 50);
+ctx.fill();
+_assertPixel(offscreenCanvas, 40,20, 0,255,0,255, "40,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html
new file mode 100644
index 0000000..5eb37c8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.zerosize.fillRect</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.zerosize.fillRect</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 40,20, 0,255,0,255, "40,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js
new file mode 100644
index 0000000..935e16a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.fillRect.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.zerosize.fillRect
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 40,20, 0,255,0,255, "40,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html
new file mode 100644
index 0000000..7215a9554
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.zerosize.stroke</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.zerosize.stroke</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.strokeStyle = g;
+ctx.rect(20, 20, 60, 10);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 19,19, 0,255,0,255, "19,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,19, 0,255,0,255, "20,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,19, 0,255,0,255, "21,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 19,20, 0,255,0,255, "19,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,20, 0,255,0,255, "20,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,20, 0,255,0,255, "21,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 19,21, 0,255,0,255, "19,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,21, 0,255,0,255, "20,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,21, 0,255,0,255, "21,21", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js
new file mode 100644
index 0000000..cda4dc4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.stroke.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.zerosize.stroke
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.strokeStyle = g;
+ctx.rect(20, 20, 60, 10);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 19,19, 0,255,0,255, "19,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,19, 0,255,0,255, "20,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,19, 0,255,0,255, "21,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 19,20, 0,255,0,255, "19,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,20, 0,255,0,255, "20,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,20, 0,255,0,255, "21,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 19,21, 0,255,0,255, "19,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,21, 0,255,0,255, "20,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,21, 0,255,0,255, "21,21", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html
new file mode 100644
index 0000000..21c94ee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.interpolate.zerosize.strokeRect</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.interpolate.zerosize.strokeRect</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.strokeStyle = g;
+ctx.strokeRect(20, 20, 60, 10);
+_assertPixel(offscreenCanvas, 19,19, 0,255,0,255, "19,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,19, 0,255,0,255, "20,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,19, 0,255,0,255, "21,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 19,20, 0,255,0,255, "19,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,20, 0,255,0,255, "20,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,20, 0,255,0,255, "21,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 19,21, 0,255,0,255, "19,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,21, 0,255,0,255, "20,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,21, 0,255,0,255, "21,21", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js
new file mode 100644
index 0000000..78b8e8f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.interpolate.zerosize.strokeRect.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.interpolate.zerosize.strokeRect
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.strokeStyle = g;
+ctx.strokeRect(20, 20, 60, 10);
+_assertPixel(offscreenCanvas, 19,19, 0,255,0,255, "19,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,19, 0,255,0,255, "20,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,19, 0,255,0,255, "21,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 19,20, 0,255,0,255, "19,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,20, 0,255,0,255, "20,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,20, 0,255,0,255, "21,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 19,21, 0,255,0,255, "19,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,21, 0,255,0,255, "20,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,21, 0,255,0,255, "21,21", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html
new file mode 100644
index 0000000..47b1ee5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.linear.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.linear.nonfinite</h1>
+<p class="desc">createLinearGradient() throws TypeError if arguments are not finite</p>
+
+
+<script>
+var t = async_test("createLinearGradient() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(-Infinity, 0, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(NaN, 0, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, -Infinity, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, NaN, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, -Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, NaN, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, NaN); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, 1, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, 1, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, 1, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, Infinity, Infinity); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js
new file mode 100644
index 0000000..502921f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.nonfinite.worker.js
@@ -0,0 +1,42 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.linear.nonfinite
+// Description:createLinearGradient() throws TypeError if arguments are not finite
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createLinearGradient() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(-Infinity, 0, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(NaN, 0, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, -Infinity, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, NaN, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, -Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, NaN, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, NaN); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, 1, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, 1, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, 1, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, Infinity, 0); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, 1, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, Infinity, Infinity); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.html
new file mode 100644
index 0000000..43b17d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.linear.transform.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.linear.transform.1</h1>
+<p class="desc">Linear gradient coordinates are relative to the coordinate space at the time of filling</p>
+
+
+<script>
+var t = async_test("Linear gradient coordinates are relative to the coordinate space at the time of filling");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.75, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.translate(-50, 0);
+ctx.fillRect(50, 0, 100, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.worker.js
new file mode 100644
index 0000000..f775d85
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.1.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.linear.transform.1
+// Description:Linear gradient coordinates are relative to the coordinate space at the time of filling
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Linear gradient coordinates are relative to the coordinate space at the time of filling");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.75, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.translate(-50, 0);
+ctx.fillRect(50, 0, 100, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.html
new file mode 100644
index 0000000..44c95e7c0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.linear.transform.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.linear.transform.2</h1>
+<p class="desc">Linear gradient coordinates are relative to the coordinate space at the time of filling</p>
+
+
+<script>
+var t = async_test("Linear gradient coordinates are relative to the coordinate space at the time of filling");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.translate(100, 0);
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.75, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.translate(-150, 0);
+ctx.fillRect(50, 0, 100, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.worker.js
new file mode 100644
index 0000000..bca8df0a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.2.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.linear.transform.2
+// Description:Linear gradient coordinates are relative to the coordinate space at the time of filling
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Linear gradient coordinates are relative to the coordinate space at the time of filling");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.translate(100, 0);
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.75, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.translate(-150, 0);
+ctx.fillRect(50, 0, 100, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.html
new file mode 100644
index 0000000..963b7ea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.linear.transform.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.linear.transform.3</h1>
+<p class="desc">Linear gradient transforms do not experience broken caching effects</p>
+
+
+<script>
+var t = async_test("Linear gradient transforms do not experience broken caching effects");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.75, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(-50, 0);
+ctx.fillRect(50, 0, 100, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.worker.js
new file mode 100644
index 0000000..6acfd00
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.linear.transform.3.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.linear.transform.3
+// Description:Linear gradient transforms do not experience broken caching effects
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Linear gradient transforms do not experience broken caching effects");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.25, '#0f0');
+g.addColorStop(0.75, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(-50, 0);
+ctx.fillRect(50, 0, 100, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.html
new file mode 100644
index 0000000..1aec24c6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.object.compare</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.object.compare</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g1 = ctx.createLinearGradient(0, 0, 100, 0);
+var g2 = ctx.createLinearGradient(0, 0, 100, 0);
+_assertDifferent(g1, g2, "g1", "g2");
+ctx.fillStyle = g1;
+_assertSame(ctx.fillStyle, g1, "ctx.fillStyle", "g1");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.worker.js
new file mode 100644
index 0000000..affd6438
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.compare.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.object.compare
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g1 = ctx.createLinearGradient(0, 0, 100, 0);
+var g2 = ctx.createLinearGradient(0, 0, 100, 0);
+_assertDifferent(g1, g2, "g1", "g2");
+ctx.fillStyle = g1;
+_assertSame(ctx.fillStyle, g1, "ctx.fillStyle", "g1");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html
new file mode 100644
index 0000000..eeb62426
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.object.crosscanvas</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.object.crosscanvas</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var g = offscreenCanvas2.getContext('2d').createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js
new file mode 100644
index 0000000..9699977
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.crosscanvas.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.object.crosscanvas
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var g = offscreenCanvas2.getContext('2d').createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.html
new file mode 100644
index 0000000..795673ba
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.object.invalidcolour</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.object.invalidcolour</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, ""); });
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); });
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); });
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, null); });
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, undefined); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.worker.js
new file mode 100644
index 0000000..1fa62f3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidcolour.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.object.invalidcolour
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, ""); });
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, 'null'); });
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, 'undefined'); });
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, null); });
+assert_throws("SYNTAX_ERR", function() { g.addColorStop(0, undefined); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.html
new file mode 100644
index 0000000..2dd87fb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.object.invalidoffset</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.object.invalidoffset</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+assert_throws("INDEX_SIZE_ERR", function() { g.addColorStop(-1, '#000'); });
+assert_throws("INDEX_SIZE_ERR", function() { g.addColorStop(2, '#000'); });
+assert_throws(new TypeError(), function() { g.addColorStop(Infinity, '#000'); });
+assert_throws(new TypeError(), function() { g.addColorStop(-Infinity, '#000'); });
+assert_throws(new TypeError(), function() { g.addColorStop(NaN, '#000'); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.worker.js
new file mode 100644
index 0000000..28f7111
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.invalidoffset.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.object.invalidoffset
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+assert_throws("INDEX_SIZE_ERR", function() { g.addColorStop(-1, '#000'); });
+assert_throws("INDEX_SIZE_ERR", function() { g.addColorStop(2, '#000'); });
+assert_throws(new TypeError(), function() { g.addColorStop(Infinity, '#000'); });
+assert_throws(new TypeError(), function() { g.addColorStop(-Infinity, '#000'); });
+assert_throws(new TypeError(), function() { g.addColorStop(NaN, '#000'); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.html
new file mode 100644
index 0000000..c7f36a3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.object.update</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.object.update</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(-100, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+g.addColorStop(0.1, '#0f0');
+g.addColorStop(0.9, '#0f0');
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.worker.js
new file mode 100644
index 0000000..028d9342
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.object.update.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.object.update
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createLinearGradient(-100, 0, 200, 0);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+g.addColorStop(0.1, '#0f0');
+g.addColorStop(0.9, '#0f0');
+ctx.fillRect(0, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html
new file mode 100644
index 0000000..6819e160
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.cone.behind</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.cone.behind</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js
new file mode 100644
index 0000000..397ff4e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.behind.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.cone.behind
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html
new file mode 100644
index 0000000..0c81b81
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.cone.beside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.cone.beside</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js
new file mode 100644
index 0000000..145e511
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.beside.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.cone.beside
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html
new file mode 100644
index 0000000..5145775
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.cone.bottom</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.cone.bottom</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js
new file mode 100644
index 0000000..daa24b06
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.bottom.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.cone.bottom
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html
new file mode 100644
index 0000000..8f6c3025
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.cone.cylinder</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.cone.cylinder</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js
new file mode 100644
index 0000000..85f2495
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.cylinder.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.cone.cylinder
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.html
new file mode 100644
index 0000000..c5b46be
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.cone.front</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.cone.front</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js
new file mode 100644
index 0000000..a7758e9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.front.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.cone.front
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html
new file mode 100644
index 0000000..a702557
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.cone.shape1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.cone.shape1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(30+tol, 40);
+ctx.lineTo(110, -20+tol);
+ctx.lineTo(110, 100-tol);
+ctx.fill();
+var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js
new file mode 100644
index 0000000..41323f6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape1.worker.js
@@ -0,0 +1,42 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.cone.shape1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(30+tol, 40);
+ctx.lineTo(110, -20+tol);
+ctx.lineTo(110, 100-tol);
+ctx.fill();
+var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html
new file mode 100644
index 0000000..f4f8bb5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.cone.shape2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.cone.shape2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(30-tol, 40);
+ctx.lineTo(110, -20-tol);
+ctx.lineTo(110, 100+tol);
+ctx.fill();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js
new file mode 100644
index 0000000..4a0b9ad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.shape2.worker.js
@@ -0,0 +1,42 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.cone.shape2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(30-tol, 40);
+ctx.lineTo(110, -20-tol);
+ctx.lineTo(110, 100+tol);
+ctx.fill();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.html
new file mode 100644
index 0000000..36f439ea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.cone.top</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.cone.top</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js
new file mode 100644
index 0000000..4275e56
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.cone.top.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.cone.top
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.html
new file mode 100644
index 0000000..9bbf489
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.equal</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.equal</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js
new file mode 100644
index 0000000..f5224a32
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.equal.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.equal
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.html
new file mode 100644
index 0000000..2cdcd88
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.inside1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.inside1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js
new file mode 100644
index 0000000..9a3f95a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside1.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.inside1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.html
new file mode 100644
index 0000000..0a79dbef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.inside2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.inside2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js
new file mode 100644
index 0000000..4715d4e2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside2.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.inside2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.html
new file mode 100644
index 0000000..25d276ed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.inside3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.inside3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.993, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js
new file mode 100644
index 0000000..b1f5530
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.inside3.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.inside3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.993, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.html
new file mode 100644
index 0000000..7de3114
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.negative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.negative</h1>
+<p class="desc">createRadialGradient() throws INDEX_SIZE_ERR if either radius is negative</p>
+
+
+<script>
+var t = async_test("createRadialGradient() throws INDEX_SIZE_ERR if either radius is negative");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createRadialGradient(0, 0, -0.1, 0, 0, 1); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createRadialGradient(0, 0, 1, 0, 0, -0.1); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createRadialGradient(0, 0, -0.1, 0, 0, -0.1); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.worker.js
new file mode 100644
index 0000000..c6a98ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.negative.worker.js
@@ -0,0 +1,22 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.negative
+// Description:createRadialGradient() throws INDEX_SIZE_ERR if either radius is negative
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createRadialGradient() throws INDEX_SIZE_ERR if either radius is negative");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createRadialGradient(0, 0, -0.1, 0, 0, 1); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createRadialGradient(0, 0, 1, 0, 0, -0.1); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createRadialGradient(0, 0, -0.1, 0, 0, -0.1); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html
new file mode 100644
index 0000000..22dbe27
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.nonfinite</h1>
+<p class="desc">createRadialGradient() throws TypeError if arguments are not finite</p>
+
+
+<script>
+var t = async_test("createRadialGradient() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(-Infinity, 0, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(NaN, 0, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, -Infinity, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, NaN, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, -Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, NaN, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, -Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, NaN, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, -Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, NaN, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, 0, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, 0, NaN); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, Infinity, Infinity); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js
new file mode 100644
index 0000000..bbd2e95
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.nonfinite.worker.js
@@ -0,0 +1,94 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.nonfinite
+// Description:createRadialGradient() throws TypeError if arguments are not finite
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createRadialGradient() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(-Infinity, 0, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(NaN, 0, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, -Infinity, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, NaN, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, -Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, NaN, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, -Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, NaN, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, -Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, NaN, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, 0, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, 0, NaN); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, Infinity, 1, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, Infinity, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(Infinity, 0, 1, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, 0, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, Infinity, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, Infinity, 1, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, Infinity, 0, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, 0, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, 0, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, Infinity, 0, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, Infinity, Infinity, 1); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, Infinity, 0, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createRadialGradient(0, 0, 1, 0, Infinity, Infinity); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.html
new file mode 100644
index 0000000..ba0676b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.outside1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.outside1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js
new file mode 100644
index 0000000..58280a6e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside1.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.outside1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#0f0');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.html
new file mode 100644
index 0000000..24c3a73
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.outside2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.outside2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js
new file mode 100644
index 0000000..7f1b101
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside2.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.outside2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3-expected.txt
new file mode 100644
index 0000000..4786c45
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL OffscreenCanvas test: 2d.gradient.radial.outside3 assert_equals: Red channel of the pixel at (1, 1) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.html
new file mode 100644
index 0000000..42589dd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.outside3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.outside3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
+g.addColorStop(0, '#0f0');
+g.addColorStop(0.001, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js
new file mode 100644
index 0000000..3c41392
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.outside3.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.outside3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
+g.addColorStop(0, '#0f0');
+g.addColorStop(0.001, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.html
new file mode 100644
index 0000000..7fc34302
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.touch1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.touch1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js
new file mode 100644
index 0000000..d176c01
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch1.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.touch1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.html
new file mode 100644
index 0000000..1c8597d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.touch2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.touch2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.01, '#0f0');
+g.addColorStop(0.99, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js
new file mode 100644
index 0000000..2ffbc75
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch2.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.touch2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150);
+g.addColorStop(0, '#f00');
+g.addColorStop(0.01, '#0f0');
+g.addColorStop(0.99, '#0f0');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.html
new file mode 100644
index 0000000..1a8a81e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.touch3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.touch3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js
new file mode 100644
index 0000000..4ea9b865
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.touch3.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.touch3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50);
+g.addColorStop(0, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.html
new file mode 100644
index 0000000..a3b466f9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.transform.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.transform.1</h1>
+<p class="desc">Radial gradient coordinates are relative to the coordinate space at the time of filling</p>
+
+
+<script>
+var t = async_test("Radial gradient coordinates are relative to the coordinate space at the time of filling");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
+g.addColorStop(0, '#0f0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.51, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.translate(50, 25);
+ctx.scale(10, 10);
+ctx.fillRect(-5, -2.5, 10, 5);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.worker.js
new file mode 100644
index 0000000..36834918
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.1.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.transform.1
+// Description:Radial gradient coordinates are relative to the coordinate space at the time of filling
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Radial gradient coordinates are relative to the coordinate space at the time of filling");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
+g.addColorStop(0, '#0f0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.51, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.translate(50, 25);
+ctx.scale(10, 10);
+ctx.fillRect(-5, -2.5, 10, 5);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.html
new file mode 100644
index 0000000..2ea3d2a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.transform.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.transform.2</h1>
+<p class="desc">Radial gradient coordinates are relative to the coordinate space at the time of filling</p>
+
+
+<script>
+var t = async_test("Radial gradient coordinates are relative to the coordinate space at the time of filling");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.translate(100, 0);
+var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
+g.addColorStop(0, '#0f0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.51, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.translate(-50, 25);
+ctx.scale(10, 10);
+ctx.fillRect(-5, -2.5, 10, 5);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.worker.js
new file mode 100644
index 0000000..1519c337
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.2.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.transform.2
+// Description:Radial gradient coordinates are relative to the coordinate space at the time of filling
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Radial gradient coordinates are relative to the coordinate space at the time of filling");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.translate(100, 0);
+var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
+g.addColorStop(0, '#0f0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.51, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.translate(-50, 25);
+ctx.scale(10, 10);
+ctx.fillRect(-5, -2.5, 10, 5);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.html
new file mode 100644
index 0000000..eb3f7ba
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.gradient.radial.transform.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.gradient.radial.transform.3</h1>
+<p class="desc">Radial gradient transforms do not experience broken caching effects</p>
+
+
+<script>
+var t = async_test("Radial gradient transforms do not experience broken caching effects");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
+g.addColorStop(0, '#0f0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.51, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(50, 25);
+ctx.scale(10, 10);
+ctx.fillRect(-5, -2.5, 10, 5);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.worker.js
new file mode 100644
index 0000000..5239376
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.gradient.radial.transform.3.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.gradient.radial.transform.3
+// Description:Radial gradient transforms do not experience broken caching effects
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Radial gradient transforms do not experience broken caching effects");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
+g.addColorStop(0, '#0f0');
+g.addColorStop(0.5, '#0f0');
+g.addColorStop(0.51, '#f00');
+g.addColorStop(1, '#f00');
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(50, 25);
+ctx.scale(10, 10);
+ctx.fillRect(-5, -2.5, 10, 5);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.html
new file mode 100644
index 0000000..b3be4e9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.basic.canvas</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.basic.canvas</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 0, 100, 50);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js
new file mode 100644
index 0000000..a9969f65
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.canvas.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.basic.canvas
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 0, 100, 50);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.html
new file mode 100644
index 0000000..730fb02
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.basic.image</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.basic.image</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.worker.js
new file mode 100644
index 0000000..2d4dfd8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.image.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.basic.image
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.html
new file mode 100644
index 0000000..fcaecbc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.basic.nocontext</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.basic.nocontext</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js
new file mode 100644
index 0000000..a5dacef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.nocontext.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.basic.nocontext
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html
new file mode 100644
index 0000000..4652c40
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.basic.zerocanvas</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.basic.zerocanvas</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 0;
+offscreenCanvas.height = 10;
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 10, "offscreenCanvas.height", "10");
+assert_throws("INVALID_STATE_ERR", function() { ctx.createPattern(offscreenCanvas, 'repeat'); });
+offscreenCanvas.width = 10;
+offscreenCanvas.height = 0;
+_assertSame(offscreenCanvas.width, 10, "offscreenCanvas.width", "10");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+assert_throws("INVALID_STATE_ERR", function() { ctx.createPattern(offscreenCanvas, 'repeat'); });
+offscreenCanvas.width = 0;
+offscreenCanvas.height = 0;
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+assert_throws("INVALID_STATE_ERR", function() { ctx.createPattern(offscreenCanvas, 'repeat'); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js
new file mode 100644
index 0000000..326ce53
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.basic.zerocanvas.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.basic.zerocanvas
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 0;
+offscreenCanvas.height = 10;
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 10, "offscreenCanvas.height", "10");
+assert_throws("INVALID_STATE_ERR", function() { ctx.createPattern(offscreenCanvas, 'repeat'); });
+offscreenCanvas.width = 10;
+offscreenCanvas.height = 0;
+_assertSame(offscreenCanvas.width, 10, "offscreenCanvas.width", "10");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+assert_throws("INVALID_STATE_ERR", function() { ctx.createPattern(offscreenCanvas, 'repeat'); });
+offscreenCanvas.width = 0;
+offscreenCanvas.height = 0;
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+assert_throws("INVALID_STATE_ERR", function() { ctx.createPattern(offscreenCanvas, 'repeat'); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.html
new file mode 100644
index 0000000..f7d0c5f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.crosscanvas</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.crosscanvas</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+    var pattern = offscreenCanvas2.getContext('2d').createPattern(response, 'no-repeat');
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js
new file mode 100644
index 0000000..6d3ba31
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.crosscanvas.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.crosscanvas
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+    var pattern = offscreenCanvas2.getContext('2d').createPattern(response, 'no-repeat');
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.html
new file mode 100644
index 0000000..30fd65a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.image.null</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.image.null</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createPattern(null, 'repeat'); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.worker.js
new file mode 100644
index 0000000..454e619a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.null.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.image.null
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createPattern(null, 'repeat'); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.html
new file mode 100644
index 0000000..bcc4ad0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.image.string</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.image.string</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createPattern('../images/red.png', 'repeat'); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.worker.js
new file mode 100644
index 0000000..6d732e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.string.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.image.string
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createPattern('../images/red.png', 'repeat'); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.html
new file mode 100644
index 0000000..f0347ea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.image.undefined</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.image.undefined</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createPattern(undefined, 'repeat'); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js
new file mode 100644
index 0000000..8ed51b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.image.undefined.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.image.undefined
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createPattern(undefined, 'repeat'); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.html
new file mode 100644
index 0000000..23c7e78
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.modify.canvas1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.modify.canvas1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 0, 100, 50);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 100, 50);
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js
new file mode 100644
index 0000000..6ca4d6da
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas1.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.modify.canvas1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 0, 100, 50);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 100, 50);
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.html
new file mode 100644
index 0000000..f7488fcc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.modify.canvas2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.modify.canvas2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 0, 100, 50);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 100, 50);
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js
new file mode 100644
index 0000000..a872bb8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.modify.canvas2.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.modify.canvas2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 0, 100, 50);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 100, 50);
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html
new file mode 100644
index 0000000..925e5cb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.norepeat.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.norepeat.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js
new file mode 100644
index 0000000..9316317d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.basic.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.norepeat.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html
new file mode 100644
index 0000000..2b81da14
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.norepeat.coord1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.norepeat.coord1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.translate(50, 0);
+    ctx.fillRect(-50, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js
new file mode 100644
index 0000000..4210eaa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord1.worker.js
@@ -0,0 +1,42 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.norepeat.coord1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.translate(50, 0);
+    ctx.fillRect(-50, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html
new file mode 100644
index 0000000..bdc3ab95
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.norepeat.coord2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.norepeat.coord2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 50, 50);
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(50, 0, 50, 50);
+    ctx.fillStyle = pattern;
+    ctx.translate(50, 0);
+    ctx.fillRect(-50, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js
new file mode 100644
index 0000000..226db04e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord2.worker.js
@@ -0,0 +1,42 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.norepeat.coord2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 50, 50);
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(50, 0, 50, 50);
+    ctx.fillStyle = pattern;
+    ctx.translate(50, 0);
+    ctx.fillRect(-50, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html
new file mode 100644
index 0000000..8c027af
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.norepeat.coord3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.norepeat.coord3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.translate(50, 25);
+    ctx.fillRect(-50, -25, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 50, 25);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js
new file mode 100644
index 0000000..da93c53
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.coord3.worker.js
@@ -0,0 +1,42 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.norepeat.coord3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.translate(50, 25);
+    ctx.fillRect(-50, -25, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 50, 25);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html
new file mode 100644
index 0000000..916272fc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.norepeat.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.norepeat.outside</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+    ctx.fillRect(-100, 0, 100, 50);
+    ctx.fillRect(0, 50, 100, 50);
+    ctx.fillRect(100, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js
new file mode 100644
index 0000000..d8b5900
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.norepeat.outside.worker.js
@@ -0,0 +1,44 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.norepeat.outside
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+    ctx.fillRect(-100, 0, 100, 50);
+    ctx.fillRect(0, 50, 100, 50);
+    ctx.fillRect(100, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html
new file mode 100644
index 0000000..42576fa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.orientation.canvas</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.orientation.canvas</h1>
+<p class="desc">Canvas patterns do not get flipped when painted</p>
+
+
+<script>
+var t = async_test("Canvas patterns do not get flipped when painted");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 100, 25);
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 25, 100, 25);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 25);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js
new file mode 100644
index 0000000..3a7b8521
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.canvas.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.orientation.canvas
+// Description:Canvas patterns do not get flipped when painted
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Canvas patterns do not get flipped when painted");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 100, 25);
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 25, 100, 25);
+var pattern = ctx.createPattern(offscreenCanvas2, 'no-repeat');
+ctx.fillStyle = pattern;
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 25);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html
new file mode 100644
index 0000000..0b9bda31
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.orientation.image</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.orientation.image</h1>
+<p class="desc">Image patterns do not get flipped when painted</p>
+
+
+<script>
+var t = async_test("Image patterns do not get flipped when painted");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/rrgg-256x256.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.save();
+    ctx.translate(0, -103);
+    ctx.fillRect(0, 103, 100, 50);
+    ctx.restore();
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 25);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js
new file mode 100644
index 0000000..a1fa022
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.orientation.image.worker.js
@@ -0,0 +1,44 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.orientation.image
+// Description:Image patterns do not get flipped when painted
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Image patterns do not get flipped when painted");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/rrgg-256x256.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.save();
+    ctx.translate(0, -103);
+    ctx.fillRect(0, 103, 100, 50);
+    ctx.restore();
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 25);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html
new file mode 100644
index 0000000..e2dd06a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeat.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeat.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js
new file mode 100644
index 0000000..062c595
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.basic.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeat.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html
new file mode 100644
index 0000000..b7d9a57
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeat.coord1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeat.coord1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/rgrg-256x256.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.translate(-128, -78);
+    ctx.fillRect(128, 78, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js
new file mode 100644
index 0000000..9f442a8d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord1.worker.js
@@ -0,0 +1,40 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeat.coord1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/rgrg-256x256.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.translate(-128, -78);
+    ctx.fillRect(128, 78, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html
new file mode 100644
index 0000000..ff5b67d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeat.coord2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeat.coord2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/grgr-256x256.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js
new file mode 100644
index 0000000..5e2f121
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord2.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeat.coord2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/grgr-256x256.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html
new file mode 100644
index 0000000..02c45fd5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeat.coord3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeat.coord3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/rgrg-256x256.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.translate(-128, -78);
+    ctx.fillRect(128, 78, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js
new file mode 100644
index 0000000..622bcec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeat.coord3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/rgrg-256x256.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.translate(-128, -78);
+    ctx.fillRect(128, 78, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html
new file mode 100644
index 0000000..6489e235
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeat.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeat.outside</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.translate(50, 25);
+    ctx.fillRect(-50, -25, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js
new file mode 100644
index 0000000..246bccec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeat.outside.worker.js
@@ -0,0 +1,40 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeat.outside
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'no-repeat');
+    ctx.fillStyle = pattern;
+    ctx.translate(50, 25);
+    ctx.fillRect(-50, -25, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html
new file mode 100644
index 0000000..13e7b8d3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeatx.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeatx.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 16);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-x');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js
new file mode 100644
index 0000000..aba0118
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.basic.worker.js
@@ -0,0 +1,41 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeatx.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 16);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-x');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html
new file mode 100644
index 0000000..1fc2e52
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeatx.coord1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeatx.coord1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-x');
+    ctx.fillStyle = pattern;
+    ctx.translate(0, 16);
+    ctx.fillRect(0, -16, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 16);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js
new file mode 100644
index 0000000..e4777e05
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.coord1.worker.js
@@ -0,0 +1,44 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeatx.coord1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-x');
+    ctx.fillStyle = pattern;
+    ctx.translate(0, 16);
+    ctx.fillRect(0, -16, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 16);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html
new file mode 100644
index 0000000..c6ec122
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeatx.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeatx.outside</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-x');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 16);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js
new file mode 100644
index 0000000..fc8a4a0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeatx.outside.worker.js
@@ -0,0 +1,41 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeatx.outside
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-x');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 16);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html
new file mode 100644
index 0000000..f678f1c2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeaty.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeaty.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 16, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-y');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js
new file mode 100644
index 0000000..40dfda9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.basic.worker.js
@@ -0,0 +1,41 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeaty.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 16, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-y');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html
new file mode 100644
index 0000000..6d3e343
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeaty.coord1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeaty.coord1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-y');
+    ctx.fillStyle = pattern;
+    ctx.translate(48, 0);
+    ctx.fillRect(-48, 0, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 16, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js
new file mode 100644
index 0000000..108c462
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.coord1.worker.js
@@ -0,0 +1,44 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeaty.coord1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-y');
+    ctx.fillStyle = pattern;
+    ctx.translate(48, 0);
+    ctx.fillRect(-48, 0, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 16, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html
new file mode 100644
index 0000000..5790bda
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.paint.repeaty.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.paint.repeaty.outside</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-y');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 16, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js
new file mode 100644
index 0000000..4958674
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.paint.repeaty.outside.worker.js
@@ -0,0 +1,41 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.paint.repeaty.outside
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red-16x16.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat-y');
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 16, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.html
new file mode 100644
index 0000000..0b082df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.repeat.case</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.repeat.case</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, "Repeat"); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.worker.js
new file mode 100644
index 0000000..0130fe3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.case.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.repeat.case
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, "Repeat"); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.html
new file mode 100644
index 0000000..009736cc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.repeat.empty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.repeat.empty</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-1x1.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, "");
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 200, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js
new file mode 100644
index 0000000..8042a3c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.empty.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.repeat.empty
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/green-1x1.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, "");
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, 0, 200, 50);
+    _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.html
new file mode 100644
index 0000000..7e78ae01
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.repeat.null</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.repeat.null</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assert(ctx.createPattern(offscreenCanvas, null) != null, "ctx.createPattern(offscreenCanvas, null) != null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.worker.js
new file mode 100644
index 0000000..ee623df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.null.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.repeat.null
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assert(ctx.createPattern(offscreenCanvas, null) != null, "ctx.createPattern(offscreenCanvas, null) != null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.html
new file mode 100644
index 0000000..7f85f3e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.repeat.nullsuffix</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.repeat.nullsuffix</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, "repeat\0"); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.worker.js
new file mode 100644
index 0000000..c6ed1417
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.nullsuffix.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.repeat.nullsuffix
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, "repeat\0"); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.html
new file mode 100644
index 0000000..298ba997
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.repeat.undefined</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.repeat.undefined</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, undefined); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.worker.js
new file mode 100644
index 0000000..3a275b8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.undefined.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.repeat.undefined
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, undefined); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.html
new file mode 100644
index 0000000..79e379e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.repeat.unrecognised</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.repeat.unrecognised</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, "invalid"); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.worker.js
new file mode 100644
index 0000000..08c076b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognised.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.repeat.unrecognised
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, "invalid"); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.html
new file mode 100644
index 0000000..c8f4ccf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.pattern.repeat.unrecognisednull</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.pattern.repeat.unrecognisednull</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, "null"); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.worker.js
new file mode 100644
index 0000000..fc4a45510
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.pattern.repeat.unrecognisednull.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.pattern.repeat.unrecognisednull
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("SYNTAX_ERR", function() { ctx.createPattern(offscreenCanvas, "null"); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.html
new file mode 100644
index 0000000..06976858
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.strokeStyle.default</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.strokeStyle.default</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.strokeStyle, '#000000', "ctx.strokeStyle", "'#000000'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.worker.js
new file mode 100644
index 0000000..498f2f9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/fill-and-stroke-styles/2d.strokeStyle.default.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.strokeStyle.default
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.strokeStyle, '#000000', "ctx.strokeStyle", "'#000000'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.butt.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.butt.html
new file mode 100644
index 0000000..21ca86b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.butt.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.cap.butt</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.cap.butt</h1>
+<p class="desc">lineCap 'butt' is rendered correctly</p>
+
+
+<script>
+var t = async_test("lineCap 'butt' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineCap = 'butt';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(15, 15, 20, 20);
+ctx.beginPath();
+ctx.moveTo(25, 15);
+ctx.lineTo(25, 35);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(75, 15);
+ctx.lineTo(75, 35);
+ctx.stroke();
+ctx.fillRect(65, 15, 20, 20);
+_assertPixel(offscreenCanvas, 25,14, 0,255,0,255, "25,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,15, 0,255,0,255, "25,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,16, 0,255,0,255, "25,16", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,34, 0,255,0,255, "25,34", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,35, 0,255,0,255, "25,35", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,36, 0,255,0,255, "25,36", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,14, 0,255,0,255, "75,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,15, 0,255,0,255, "75,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,16, 0,255,0,255, "75,16", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,34, 0,255,0,255, "75,34", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,35, 0,255,0,255, "75,35", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,36, 0,255,0,255, "75,36", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.butt.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.butt.worker.js
new file mode 100644
index 0000000..b9d503c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.butt.worker.js
@@ -0,0 +1,49 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.cap.butt
+// Description:lineCap 'butt' is rendered correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineCap 'butt' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineCap = 'butt';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(15, 15, 20, 20);
+ctx.beginPath();
+ctx.moveTo(25, 15);
+ctx.lineTo(25, 35);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(75, 15);
+ctx.lineTo(75, 35);
+ctx.stroke();
+ctx.fillRect(65, 15, 20, 20);
+_assertPixel(offscreenCanvas, 25,14, 0,255,0,255, "25,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,15, 0,255,0,255, "25,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,16, 0,255,0,255, "25,16", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,34, 0,255,0,255, "25,34", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,35, 0,255,0,255, "25,35", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,36, 0,255,0,255, "25,36", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,14, 0,255,0,255, "75,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,15, 0,255,0,255, "75,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,16, 0,255,0,255, "75,16", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,34, 0,255,0,255, "75,34", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,35, 0,255,0,255, "75,35", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,36, 0,255,0,255, "75,36", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.closed.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.closed.html
new file mode 100644
index 0000000..66b08530
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.closed.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.cap.closed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.cap.closed</h1>
+<p class="desc">Line caps are not drawn at the corners of an unclosed rectangle</p>
+
+
+<script>
+var t = async_test("Line caps are not drawn at the corners of an unclosed rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'bevel';
+ctx.lineCap = 'square';
+ctx.lineWidth = 400;
+ctx.beginPath();
+ctx.moveTo(200, 200);
+ctx.lineTo(200, 1000);
+ctx.lineTo(1000, 1000);
+ctx.lineTo(1000, 200);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.closed.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.closed.worker.js
new file mode 100644
index 0000000..f5237d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.closed.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.cap.closed
+// Description:Line caps are not drawn at the corners of an unclosed rectangle
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Line caps are not drawn at the corners of an unclosed rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'bevel';
+ctx.lineCap = 'square';
+ctx.lineWidth = 400;
+ctx.beginPath();
+ctx.moveTo(200, 200);
+ctx.lineTo(200, 1000);
+ctx.lineTo(1000, 1000);
+ctx.lineTo(1000, 200);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.invalid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.invalid.html
new file mode 100644
index 0000000..cbf7ceb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.invalid.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.cap.invalid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.cap.invalid</h1>
+<p class="desc">Setting lineCap to invalid values is ignored</p>
+
+
+<script>
+var t = async_test("Setting lineCap to invalid values is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineCap = 'butt'
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'invalid';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'ROUND';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'round\0';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'round ';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = "";
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'bevel';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.invalid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.invalid.worker.js
new file mode 100644
index 0000000..4c3495f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.invalid.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.cap.invalid
+// Description:Setting lineCap to invalid values is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting lineCap to invalid values is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineCap = 'butt'
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'invalid';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'ROUND';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'round\0';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'round ';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = "";
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'butt';
+ctx.lineCap = 'bevel';
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.open.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.open.html
new file mode 100644
index 0000000..8b7a599
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.open.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.cap.open</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.cap.open</h1>
+<p class="desc">Line caps are drawn at the corners of an unclosed rectangle</p>
+
+
+<script>
+var t = async_test("Line caps are drawn at the corners of an unclosed rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'bevel';
+ctx.lineCap = 'square';
+ctx.lineWidth = 400;
+ctx.beginPath();
+ctx.moveTo(200, 200);
+ctx.lineTo(200, 1000);
+ctx.lineTo(1000, 1000);
+ctx.lineTo(1000, 200);
+ctx.lineTo(200, 200);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.open.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.open.worker.js
new file mode 100644
index 0000000..b67dc57
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.open.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.cap.open
+// Description:Line caps are drawn at the corners of an unclosed rectangle
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Line caps are drawn at the corners of an unclosed rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'bevel';
+ctx.lineCap = 'square';
+ctx.lineWidth = 400;
+ctx.beginPath();
+ctx.moveTo(200, 200);
+ctx.lineTo(200, 1000);
+ctx.lineTo(1000, 1000);
+ctx.lineTo(1000, 200);
+ctx.lineTo(200, 200);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.round.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.round.html
new file mode 100644
index 0000000..fb383cb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.round.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.cap.round</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.cap.round</h1>
+<p class="desc">lineCap 'round' is rendered correctly</p>
+
+
+<script>
+var t = async_test("lineCap 'round' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.lineCap = 'round';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(35-tol, 15);
+ctx.arc(25, 15, 10-tol, 0, Math.PI, true);
+ctx.arc(25, 35, 10-tol, Math.PI, 0, true);
+ctx.fill();
+ctx.beginPath();
+ctx.moveTo(25, 15);
+ctx.lineTo(25, 35);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(75, 15);
+ctx.lineTo(75, 35);
+ctx.stroke();
+ctx.beginPath();
+ctx.moveTo(85+tol, 15);
+ctx.arc(75, 15, 10+tol, 0, Math.PI, true);
+ctx.arc(75, 35, 10+tol, Math.PI, 0, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 17,6, 0,255,0,255, "17,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,6, 0,255,0,255, "25,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 32,6, 0,255,0,255, "32,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 17,43, 0,255,0,255, "17,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,43, 0,255,0,255, "25,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 32,43, 0,255,0,255, "32,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 67,6, 0,255,0,255, "67,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,6, 0,255,0,255, "75,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 82,6, 0,255,0,255, "82,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 67,43, 0,255,0,255, "67,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,43, 0,255,0,255, "75,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 82,43, 0,255,0,255, "82,43", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.round.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.round.worker.js
new file mode 100644
index 0000000..7592393b3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.round.worker.js
@@ -0,0 +1,58 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.cap.round
+// Description:lineCap 'round' is rendered correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineCap 'round' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.lineCap = 'round';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(35-tol, 15);
+ctx.arc(25, 15, 10-tol, 0, Math.PI, true);
+ctx.arc(25, 35, 10-tol, Math.PI, 0, true);
+ctx.fill();
+ctx.beginPath();
+ctx.moveTo(25, 15);
+ctx.lineTo(25, 35);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(75, 15);
+ctx.lineTo(75, 35);
+ctx.stroke();
+ctx.beginPath();
+ctx.moveTo(85+tol, 15);
+ctx.arc(75, 15, 10+tol, 0, Math.PI, true);
+ctx.arc(75, 35, 10+tol, Math.PI, 0, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 17,6, 0,255,0,255, "17,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,6, 0,255,0,255, "25,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 32,6, 0,255,0,255, "32,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 17,43, 0,255,0,255, "17,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,43, 0,255,0,255, "25,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 32,43, 0,255,0,255, "32,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 67,6, 0,255,0,255, "67,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,6, 0,255,0,255, "75,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 82,6, 0,255,0,255, "82,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 67,43, 0,255,0,255, "67,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,43, 0,255,0,255, "75,43", "0,255,0,255");
+_assertPixel(offscreenCanvas, 82,43, 0,255,0,255, "82,43", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.square.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.square.html
new file mode 100644
index 0000000..ef9646e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.square.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.cap.square</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.cap.square</h1>
+<p class="desc">lineCap 'square' is rendered correctly</p>
+
+
+<script>
+var t = async_test("lineCap 'square' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineCap = 'square';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(15, 5, 20, 40);
+ctx.beginPath();
+ctx.moveTo(25, 15);
+ctx.lineTo(25, 35);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(75, 15);
+ctx.lineTo(75, 35);
+ctx.stroke();
+ctx.fillRect(65, 5, 20, 40);
+_assertPixel(offscreenCanvas, 25,4, 0,255,0,255, "25,4", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,5, 0,255,0,255, "25,5", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,6, 0,255,0,255, "25,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,44, 0,255,0,255, "25,44", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,45, 0,255,0,255, "25,45", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,46, 0,255,0,255, "25,46", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,4, 0,255,0,255, "75,4", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,5, 0,255,0,255, "75,5", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,6, 0,255,0,255, "75,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,44, 0,255,0,255, "75,44", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,45, 0,255,0,255, "75,45", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,46, 0,255,0,255, "75,46", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.square.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.square.worker.js
new file mode 100644
index 0000000..6e07a80
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.square.worker.js
@@ -0,0 +1,49 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.cap.square
+// Description:lineCap 'square' is rendered correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineCap 'square' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineCap = 'square';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(15, 5, 20, 40);
+ctx.beginPath();
+ctx.moveTo(25, 15);
+ctx.lineTo(25, 35);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(75, 15);
+ctx.lineTo(75, 35);
+ctx.stroke();
+ctx.fillRect(65, 5, 20, 40);
+_assertPixel(offscreenCanvas, 25,4, 0,255,0,255, "25,4", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,5, 0,255,0,255, "25,5", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,6, 0,255,0,255, "25,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,44, 0,255,0,255, "25,44", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,45, 0,255,0,255, "25,45", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,46, 0,255,0,255, "25,46", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,4, 0,255,0,255, "75,4", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,5, 0,255,0,255, "75,5", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,6, 0,255,0,255, "75,6", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,44, 0,255,0,255, "75,44", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,45, 0,255,0,255, "75,45", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,46, 0,255,0,255, "75,46", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.valid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.valid.html
new file mode 100644
index 0000000..16a4f48d2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.valid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.cap.valid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.cap.valid</h1>
+<p class="desc">Setting lineCap to valid values works</p>
+
+
+<script>
+var t = async_test("Setting lineCap to valid values works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineCap = 'butt'
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'round';
+_assertSame(ctx.lineCap, 'round', "ctx.lineCap", "'round'");
+ctx.lineCap = 'square';
+_assertSame(ctx.lineCap, 'square', "ctx.lineCap", "'square'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.valid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.valid.worker.js
new file mode 100644
index 0000000..b364f3d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cap.valid.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.cap.valid
+// Description:Setting lineCap to valid values works
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting lineCap to valid values works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineCap = 'butt'
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+ctx.lineCap = 'round';
+_assertSame(ctx.lineCap, 'round', "ctx.lineCap", "'round'");
+ctx.lineCap = 'square';
+_assertSame(ctx.lineCap, 'square', "ctx.lineCap", "'square'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cross.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cross.html
new file mode 100644
index 0000000..31fc3f3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cross.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.cross</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.cross</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.lineJoin = 'bevel';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(110, 50);
+ctx.lineTo(110, 60);
+ctx.lineTo(100, 60);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cross.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cross.worker.js
new file mode 100644
index 0000000..b85231e8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.cross.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.cross
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.lineJoin = 'bevel';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(110, 50);
+ctx.lineTo(110, 60);
+ctx.lineTo(100, 60);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.defaults.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.defaults.html
new file mode 100644
index 0000000..e9fc509
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.defaults.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.defaults</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.defaults</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.lineWidth, 1, "ctx.lineWidth", "1");
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+_assertSame(ctx.lineJoin, 'miter', "ctx.lineJoin", "'miter'");
+_assertSame(ctx.miterLimit, 10, "ctx.miterLimit", "10");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.defaults.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.defaults.worker.js
new file mode 100644
index 0000000..672bee54
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.defaults.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.defaults
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.lineWidth, 1, "ctx.lineWidth", "1");
+_assertSame(ctx.lineCap, 'butt', "ctx.lineCap", "'butt'");
+_assertSame(ctx.lineJoin, 'miter', "ctx.lineJoin", "'miter'");
+_assertSame(ctx.miterLimit, 10, "ctx.miterLimit", "10");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.bevel.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.bevel.html
new file mode 100644
index 0000000..c721d29b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.bevel.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.join.bevel</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.join.bevel</h1>
+<p class="desc">lineJoin 'bevel' is rendered correctly</p>
+
+
+<script>
+var t = async_test("lineJoin 'bevel' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.lineJoin = 'bevel';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(10, 10, 20, 20);
+ctx.fillRect(20, 20, 20, 20);
+ctx.beginPath();
+ctx.moveTo(30, 20);
+ctx.lineTo(40-tol, 20);
+ctx.lineTo(30, 10+tol);
+ctx.fill();
+ctx.beginPath();
+ctx.moveTo(10, 20);
+ctx.lineTo(30, 20);
+ctx.lineTo(30, 40);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(60, 20);
+ctx.lineTo(80, 20);
+ctx.lineTo(80, 40);
+ctx.stroke();
+ctx.fillRect(60, 10, 20, 20);
+ctx.fillRect(70, 20, 20, 20);
+ctx.beginPath();
+ctx.moveTo(80, 20);
+ctx.lineTo(90+tol, 20);
+ctx.lineTo(80, 10-tol);
+ctx.fill();
+_assertPixel(offscreenCanvas, 34,16, 0,255,0,255, "34,16", "0,255,0,255");
+_assertPixel(offscreenCanvas, 34,15, 0,255,0,255, "34,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 35,15, 0,255,0,255, "35,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,15, 0,255,0,255, "36,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,14, 0,255,0,255, "36,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 84,16, 0,255,0,255, "84,16", "0,255,0,255");
+_assertPixel(offscreenCanvas, 84,15, 0,255,0,255, "84,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 85,15, 0,255,0,255, "85,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,15, 0,255,0,255, "86,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,14, 0,255,0,255, "86,14", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.bevel.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.bevel.worker.js
new file mode 100644
index 0000000..94d9efb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.bevel.worker.js
@@ -0,0 +1,62 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.join.bevel
+// Description:lineJoin 'bevel' is rendered correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineJoin 'bevel' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.lineJoin = 'bevel';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(10, 10, 20, 20);
+ctx.fillRect(20, 20, 20, 20);
+ctx.beginPath();
+ctx.moveTo(30, 20);
+ctx.lineTo(40-tol, 20);
+ctx.lineTo(30, 10+tol);
+ctx.fill();
+ctx.beginPath();
+ctx.moveTo(10, 20);
+ctx.lineTo(30, 20);
+ctx.lineTo(30, 40);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(60, 20);
+ctx.lineTo(80, 20);
+ctx.lineTo(80, 40);
+ctx.stroke();
+ctx.fillRect(60, 10, 20, 20);
+ctx.fillRect(70, 20, 20, 20);
+ctx.beginPath();
+ctx.moveTo(80, 20);
+ctx.lineTo(90+tol, 20);
+ctx.lineTo(80, 10-tol);
+ctx.fill();
+_assertPixel(offscreenCanvas, 34,16, 0,255,0,255, "34,16", "0,255,0,255");
+_assertPixel(offscreenCanvas, 34,15, 0,255,0,255, "34,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 35,15, 0,255,0,255, "35,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,15, 0,255,0,255, "36,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,14, 0,255,0,255, "36,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 84,16, 0,255,0,255, "84,16", "0,255,0,255");
+_assertPixel(offscreenCanvas, 84,15, 0,255,0,255, "84,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 85,15, 0,255,0,255, "85,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,15, 0,255,0,255, "86,15", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,14, 0,255,0,255, "86,14", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.closed.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.closed.html
new file mode 100644
index 0000000..874ef833
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.closed.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.join.closed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.join.closed</h1>
+<p class="desc">Line joins are drawn at the corner of a closed rectangle</p>
+
+
+<script>
+var t = async_test("Line joins are drawn at the corner of a closed rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'miter';
+ctx.lineWidth = 200;
+ctx.beginPath();
+ctx.moveTo(100, 50);
+ctx.lineTo(100, 1000);
+ctx.lineTo(1000, 1000);
+ctx.lineTo(1000, 50);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.closed.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.closed.worker.js
new file mode 100644
index 0000000..195f500
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.closed.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.join.closed
+// Description:Line joins are drawn at the corner of a closed rectangle
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Line joins are drawn at the corner of a closed rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'miter';
+ctx.lineWidth = 200;
+ctx.beginPath();
+ctx.moveTo(100, 50);
+ctx.lineTo(100, 1000);
+ctx.lineTo(1000, 1000);
+ctx.lineTo(1000, 50);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.invalid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.invalid.html
new file mode 100644
index 0000000..e153368
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.invalid.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.join.invalid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.join.invalid</h1>
+<p class="desc">Setting lineJoin to invalid values is ignored</p>
+
+
+<script>
+var t = async_test("Setting lineJoin to invalid values is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineJoin = 'bevel'
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'invalid';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'ROUND';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'round\0';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'round ';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = "";
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'butt';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.invalid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.invalid.worker.js
new file mode 100644
index 0000000..1f3fb4a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.invalid.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.join.invalid
+// Description:Setting lineJoin to invalid values is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting lineJoin to invalid values is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineJoin = 'bevel'
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'invalid';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'ROUND';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'round\0';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'round ';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = "";
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'bevel';
+ctx.lineJoin = 'butt';
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.miter.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.miter.html
new file mode 100644
index 0000000..9a463ed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.miter.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.join.miter</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.join.miter</h1>
+<p class="desc">lineJoin 'miter' is rendered correctly</p>
+
+
+<script>
+var t = async_test("lineJoin 'miter' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'miter';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(10, 10, 30, 20);
+ctx.fillRect(20, 10, 20, 30);
+ctx.beginPath();
+ctx.moveTo(10, 20);
+ctx.lineTo(30, 20);
+ctx.lineTo(30, 40);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(60, 20);
+ctx.lineTo(80, 20);
+ctx.lineTo(80, 40);
+ctx.stroke();
+ctx.fillRect(60, 10, 30, 20);
+ctx.fillRect(70, 10, 20, 30);
+_assertPixel(offscreenCanvas, 38,12, 0,255,0,255, "38,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,11, 0,255,0,255, "39,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 40,10, 0,255,0,255, "40,10", "0,255,0,255");
+_assertPixel(offscreenCanvas, 41,9, 0,255,0,255, "41,9", "0,255,0,255");
+_assertPixel(offscreenCanvas, 42,8, 0,255,0,255, "42,8", "0,255,0,255");
+_assertPixel(offscreenCanvas, 88,12, 0,255,0,255, "88,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 89,11, 0,255,0,255, "89,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,10, 0,255,0,255, "90,10", "0,255,0,255");
+_assertPixel(offscreenCanvas, 91,9, 0,255,0,255, "91,9", "0,255,0,255");
+_assertPixel(offscreenCanvas, 92,8, 0,255,0,255, "92,8", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.miter.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.miter.worker.js
new file mode 100644
index 0000000..2d432fca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.miter.worker.js
@@ -0,0 +1,53 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.join.miter
+// Description:lineJoin 'miter' is rendered correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineJoin 'miter' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'miter';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(10, 10, 30, 20);
+ctx.fillRect(20, 10, 20, 30);
+ctx.beginPath();
+ctx.moveTo(10, 20);
+ctx.lineTo(30, 20);
+ctx.lineTo(30, 40);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(60, 20);
+ctx.lineTo(80, 20);
+ctx.lineTo(80, 40);
+ctx.stroke();
+ctx.fillRect(60, 10, 30, 20);
+ctx.fillRect(70, 10, 20, 30);
+_assertPixel(offscreenCanvas, 38,12, 0,255,0,255, "38,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,11, 0,255,0,255, "39,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 40,10, 0,255,0,255, "40,10", "0,255,0,255");
+_assertPixel(offscreenCanvas, 41,9, 0,255,0,255, "41,9", "0,255,0,255");
+_assertPixel(offscreenCanvas, 42,8, 0,255,0,255, "42,8", "0,255,0,255");
+_assertPixel(offscreenCanvas, 88,12, 0,255,0,255, "88,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 89,11, 0,255,0,255, "89,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,10, 0,255,0,255, "90,10", "0,255,0,255");
+_assertPixel(offscreenCanvas, 91,9, 0,255,0,255, "91,9", "0,255,0,255");
+_assertPixel(offscreenCanvas, 92,8, 0,255,0,255, "92,8", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.open.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.open.html
new file mode 100644
index 0000000..83b55b5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.open.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.join.open</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.join.open</h1>
+<p class="desc">Line joins are not drawn at the corner of an unclosed rectangle</p>
+
+
+<script>
+var t = async_test("Line joins are not drawn at the corner of an unclosed rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'miter';
+ctx.lineWidth = 200;
+ctx.beginPath();
+ctx.moveTo(100, 50);
+ctx.lineTo(100, 1000);
+ctx.lineTo(1000, 1000);
+ctx.lineTo(1000, 50);
+ctx.lineTo(100, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.open.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.open.worker.js
new file mode 100644
index 0000000..f846631
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.open.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.join.open
+// Description:Line joins are not drawn at the corner of an unclosed rectangle
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Line joins are not drawn at the corner of an unclosed rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineJoin = 'miter';
+ctx.lineWidth = 200;
+ctx.beginPath();
+ctx.moveTo(100, 50);
+ctx.lineTo(100, 1000);
+ctx.lineTo(1000, 1000);
+ctx.lineTo(1000, 50);
+ctx.lineTo(100, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.parallel.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.parallel.html
new file mode 100644
index 0000000..52fa398
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.parallel.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.join.parallel</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.join.parallel</h1>
+<p class="desc">Line joins are drawn at 180-degree joins</p>
+
+
+<script>
+var t = async_test("Line joins are drawn at 180-degree joins");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 300;
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(-100, 25);
+ctx.lineTo(0, 25);
+ctx.lineTo(-100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.parallel.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.parallel.worker.js
new file mode 100644
index 0000000..e13b32d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.parallel.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.join.parallel
+// Description:Line joins are drawn at 180-degree joins
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Line joins are drawn at 180-degree joins");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 300;
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(-100, 25);
+ctx.lineTo(0, 25);
+ctx.lineTo(-100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.round.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.round.html
new file mode 100644
index 0000000..26ce2d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.round.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.join.round</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.join.round</h1>
+<p class="desc">lineJoin 'round' is rendered correctly</p>
+
+
+<script>
+var t = async_test("lineJoin 'round' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.lineJoin = 'round';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(10, 10, 20, 20);
+ctx.fillRect(20, 20, 20, 20);
+ctx.beginPath();
+ctx.moveTo(30, 20);
+ctx.arc(30, 20, 10-tol, 0, 2*Math.PI, true);
+ctx.fill();
+ctx.beginPath();
+ctx.moveTo(10, 20);
+ctx.lineTo(30, 20);
+ctx.lineTo(30, 40);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(60, 20);
+ctx.lineTo(80, 20);
+ctx.lineTo(80, 40);
+ctx.stroke();
+ctx.fillRect(60, 10, 20, 20);
+ctx.fillRect(70, 20, 20, 20);
+ctx.beginPath();
+ctx.moveTo(80, 20);
+ctx.arc(80, 20, 10+tol, 0, 2*Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 36,14, 0,255,0,255, "36,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,13, 0,255,0,255, "36,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 37,13, 0,255,0,255, "37,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 38,13, 0,255,0,255, "38,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 38,12, 0,255,0,255, "38,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,14, 0,255,0,255, "86,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,13, 0,255,0,255, "86,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 87,13, 0,255,0,255, "87,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 88,13, 0,255,0,255, "88,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 88,12, 0,255,0,255, "88,12", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.round.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.round.worker.js
new file mode 100644
index 0000000..0c51663
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.round.worker.js
@@ -0,0 +1,60 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.join.round
+// Description:lineJoin 'round' is rendered correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineJoin 'round' is rendered correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var tol = 1; // tolerance to avoid antialiasing artifacts
+ctx.lineJoin = 'round';
+ctx.lineWidth = 20;
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(10, 10, 20, 20);
+ctx.fillRect(20, 20, 20, 20);
+ctx.beginPath();
+ctx.moveTo(30, 20);
+ctx.arc(30, 20, 10-tol, 0, 2*Math.PI, true);
+ctx.fill();
+ctx.beginPath();
+ctx.moveTo(10, 20);
+ctx.lineTo(30, 20);
+ctx.lineTo(30, 40);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(60, 20);
+ctx.lineTo(80, 20);
+ctx.lineTo(80, 40);
+ctx.stroke();
+ctx.fillRect(60, 10, 20, 20);
+ctx.fillRect(70, 20, 20, 20);
+ctx.beginPath();
+ctx.moveTo(80, 20);
+ctx.arc(80, 20, 10+tol, 0, 2*Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 36,14, 0,255,0,255, "36,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,13, 0,255,0,255, "36,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 37,13, 0,255,0,255, "37,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 38,13, 0,255,0,255, "38,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 38,12, 0,255,0,255, "38,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,14, 0,255,0,255, "86,14", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,13, 0,255,0,255, "86,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 87,13, 0,255,0,255, "87,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 88,13, 0,255,0,255, "88,13", "0,255,0,255");
+_assertPixel(offscreenCanvas, 88,12, 0,255,0,255, "88,12", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.valid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.valid.html
new file mode 100644
index 0000000..16ce035
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.valid.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.join.valid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.join.valid</h1>
+<p class="desc">Setting lineJoin to valid values works</p>
+
+
+<script>
+var t = async_test("Setting lineJoin to valid values works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineJoin = 'bevel'
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'round';
+_assertSame(ctx.lineJoin, 'round', "ctx.lineJoin", "'round'");
+ctx.lineJoin = 'miter';
+_assertSame(ctx.lineJoin, 'miter', "ctx.lineJoin", "'miter'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.valid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.valid.worker.js
new file mode 100644
index 0000000..161803b8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.join.valid.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.join.valid
+// Description:Setting lineJoin to valid values works
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting lineJoin to valid values works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineJoin = 'bevel'
+_assertSame(ctx.lineJoin, 'bevel', "ctx.lineJoin", "'bevel'");
+ctx.lineJoin = 'round';
+_assertSame(ctx.lineJoin, 'round', "ctx.lineJoin", "'round'");
+ctx.lineJoin = 'miter';
+_assertSame(ctx.lineJoin, 'miter', "ctx.lineJoin", "'miter'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.acute.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.acute.html
new file mode 100644
index 0000000..62de5322
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.acute.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.miter.acute</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.miter.acute</h1>
+<p class="desc">Miter joins are drawn correctly with acute angles</p>
+
+
+<script>
+var t = async_test("Miter joins are drawn correctly with acute angles");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#0f0';
+ctx.miterLimit = 2.614;
+ctx.beginPath();
+ctx.moveTo(100, 1000);
+ctx.lineTo(100, 100);
+ctx.lineTo(1000, 1000);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 2.613;
+ctx.beginPath();
+ctx.moveTo(100, 1000);
+ctx.lineTo(100, 100);
+ctx.lineTo(1000, 1000);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.acute.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.acute.worker.js
new file mode 100644
index 0000000..63f909e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.acute.worker.js
@@ -0,0 +1,41 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.miter.acute
+// Description:Miter joins are drawn correctly with acute angles
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Miter joins are drawn correctly with acute angles");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#0f0';
+ctx.miterLimit = 2.614;
+ctx.beginPath();
+ctx.moveTo(100, 1000);
+ctx.lineTo(100, 100);
+ctx.lineTo(1000, 1000);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 2.613;
+ctx.beginPath();
+ctx.moveTo(100, 1000);
+ctx.lineTo(100, 100);
+ctx.lineTo(1000, 1000);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.exceeded.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.exceeded.html
new file mode 100644
index 0000000..f15309b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.exceeded.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.miter.exceeded</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.miter.exceeded</h1>
+<p class="desc">Miter joins are not drawn when the miter limit is exceeded</p>
+
+
+<script>
+var t = async_test("Miter joins are not drawn when the miter limit is exceeded");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 400;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 1.414;
+ctx.beginPath();
+ctx.moveTo(200, 1000);
+ctx.lineTo(200, 200);
+ctx.lineTo(1000, 201); // slightly non-right-angle to avoid being a special case
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.exceeded.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.exceeded.worker.js
new file mode 100644
index 0000000..02b1653
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.exceeded.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.miter.exceeded
+// Description:Miter joins are not drawn when the miter limit is exceeded
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Miter joins are not drawn when the miter limit is exceeded");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 400;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 1.414;
+ctx.beginPath();
+ctx.moveTo(200, 1000);
+ctx.lineTo(200, 200);
+ctx.lineTo(1000, 201); // slightly non-right-angle to avoid being a special case
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.invalid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.invalid.html
new file mode 100644
index 0000000..e8d8863
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.invalid.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.miter.invalid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.miter.invalid</h1>
+<p class="desc">Setting miterLimit to invalid values is ignored</p>
+
+
+<script>
+var t = async_test("Setting miterLimit to invalid values is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.miterLimit = 1.5;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = 0;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = -1;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = Infinity;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = -Infinity;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = NaN;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.invalid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.invalid.worker.js
new file mode 100644
index 0000000..1628f78
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.invalid.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.miter.invalid
+// Description:Setting miterLimit to invalid values is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting miterLimit to invalid values is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.miterLimit = 1.5;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = 0;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = -1;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = Infinity;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = -Infinity;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = 1.5;
+ctx.miterLimit = NaN;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.lineedge.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.lineedge.html
new file mode 100644
index 0000000..d6f8a60
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.lineedge.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.miter.lineedge</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.miter.lineedge</h1>
+<p class="desc">Miter joins are not drawn when the miter limit is exceeded at the corners of a zero-height rectangle</p>
+
+
+<script>
+var t = async_test("Miter joins are not drawn when the miter limit is exceeded at the corners of a zero-height rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 1.414;
+ctx.beginPath();
+ctx.strokeRect(100, 25, 200, 0);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.lineedge.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.lineedge.worker.js
new file mode 100644
index 0000000..a0d1aaa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.lineedge.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.miter.lineedge
+// Description:Miter joins are not drawn when the miter limit is exceeded at the corners of a zero-height rectangle
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Miter joins are not drawn when the miter limit is exceeded at the corners of a zero-height rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 1.414;
+ctx.beginPath();
+ctx.strokeRect(100, 25, 200, 0);
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.obtuse.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.obtuse.html
new file mode 100644
index 0000000..2e87a873
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.obtuse.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.miter.obtuse</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.miter.obtuse</h1>
+<p class="desc">Miter joins are drawn correctly with obtuse angles</p>
+
+
+<script>
+var t = async_test("Miter joins are drawn correctly with obtuse angles");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 1600;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#0f0';
+ctx.miterLimit = 1.083;
+ctx.beginPath();
+ctx.moveTo(800, 10000);
+ctx.lineTo(800, 300);
+ctx.lineTo(10000, -8900);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 1.082;
+ctx.beginPath();
+ctx.moveTo(800, 10000);
+ctx.lineTo(800, 300);
+ctx.lineTo(10000, -8900);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.obtuse.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.obtuse.worker.js
new file mode 100644
index 0000000..5796352c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.obtuse.worker.js
@@ -0,0 +1,41 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.miter.obtuse
+// Description:Miter joins are drawn correctly with obtuse angles
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Miter joins are drawn correctly with obtuse angles");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 1600;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#0f0';
+ctx.miterLimit = 1.083;
+ctx.beginPath();
+ctx.moveTo(800, 10000);
+ctx.lineTo(800, 300);
+ctx.lineTo(10000, -8900);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 1.082;
+ctx.beginPath();
+ctx.moveTo(800, 10000);
+ctx.lineTo(800, 300);
+ctx.lineTo(10000, -8900);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.rightangle.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.rightangle.html
new file mode 100644
index 0000000..a7121f5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.rightangle.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.miter.rightangle</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.miter.rightangle</h1>
+<p class="desc">Miter joins are not drawn when the miter limit is exceeded, on exact right angles</p>
+
+
+<script>
+var t = async_test("Miter joins are not drawn when the miter limit is exceeded, on exact right angles");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 400;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 1.414;
+ctx.beginPath();
+ctx.moveTo(200, 1000);
+ctx.lineTo(200, 200);
+ctx.lineTo(1000, 200);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.rightangle.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.rightangle.worker.js
new file mode 100644
index 0000000..717d7f23
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.rightangle.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.miter.rightangle
+// Description:Miter joins are not drawn when the miter limit is exceeded, on exact right angles
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Miter joins are not drawn when the miter limit is exceeded, on exact right angles");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 400;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#f00';
+ctx.miterLimit = 1.414;
+ctx.beginPath();
+ctx.moveTo(200, 1000);
+ctx.lineTo(200, 200);
+ctx.lineTo(1000, 200);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.valid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.valid.html
new file mode 100644
index 0000000..8cd86b84
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.valid.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.miter.valid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.miter.valid</h1>
+<p class="desc">Setting miterLimit to valid values works</p>
+
+
+<script>
+var t = async_test("Setting miterLimit to valid values works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.miterLimit = 1.5;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = "1e1";
+_assertSame(ctx.miterLimit, 10, "ctx.miterLimit", "10");
+ctx.miterLimit = 1/1024;
+_assertSame(ctx.miterLimit, 1/1024, "ctx.miterLimit", "1/1024");
+ctx.miterLimit = 1000;
+_assertSame(ctx.miterLimit, 1000, "ctx.miterLimit", "1000");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.valid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.valid.worker.js
new file mode 100644
index 0000000..60af195
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.valid.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.miter.valid
+// Description:Setting miterLimit to valid values works
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting miterLimit to valid values works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.miterLimit = 1.5;
+_assertSame(ctx.miterLimit, 1.5, "ctx.miterLimit", "1.5");
+ctx.miterLimit = "1e1";
+_assertSame(ctx.miterLimit, 10, "ctx.miterLimit", "10");
+ctx.miterLimit = 1/1024;
+_assertSame(ctx.miterLimit, 1/1024, "ctx.miterLimit", "1/1024");
+ctx.miterLimit = 1000;
+_assertSame(ctx.miterLimit, 1000, "ctx.miterLimit", "1000");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.within.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.within.html
new file mode 100644
index 0000000..12f10b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.within.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.miter.within</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.miter.within</h1>
+<p class="desc">Miter joins are drawn when the miter limit is not quite exceeded</p>
+
+
+<script>
+var t = async_test("Miter joins are drawn when the miter limit is not quite exceeded");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 400;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#0f0';
+ctx.miterLimit = 1.416;
+ctx.beginPath();
+ctx.moveTo(200, 1000);
+ctx.lineTo(200, 200);
+ctx.lineTo(1000, 201);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.within.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.within.worker.js
new file mode 100644
index 0000000..c2e9463
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.miter.within.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.miter.within
+// Description:Miter joins are drawn when the miter limit is not quite exceeded
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Miter joins are drawn when the miter limit is not quite exceeded");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 400;
+ctx.lineJoin = 'miter';
+ctx.strokeStyle = '#0f0';
+ctx.miterLimit = 1.416;
+ctx.beginPath();
+ctx.moveTo(200, 1000);
+ctx.lineTo(200, 200);
+ctx.lineTo(1000, 201);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.union.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.union.html
new file mode 100644
index 0000000..626a1a5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.union.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.union</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.union</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 24);
+ctx.lineTo(100, 25);
+ctx.lineTo(0, 26);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,1, 0,255,0,255, "25,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,1, 0,255,0,255, "25,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.union.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.union.worker.js
new file mode 100644
index 0000000..e2c6668
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.union.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.union
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 24);
+ctx.lineTo(100, 25);
+ctx.lineTo(0, 26);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,1, 0,255,0,255, "25,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,1, 0,255,0,255, "48,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,1, 0,255,0,255, "25,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.basic.html
new file mode 100644
index 0000000..1dd1bbf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.basic.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.width.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.width.basic</h1>
+<p class="desc">lineWidth determines the width of line strokes</p>
+
+
+<script>
+var t = async_test("lineWidth determines the width of line strokes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 20;
+// Draw a green line over a red box, to check the line is not too small
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(15, 15, 20, 20);
+ctx.beginPath();
+ctx.moveTo(25, 15);
+ctx.lineTo(25, 35);
+ctx.stroke();
+// Draw a green box over a red line, to check the line is not too large
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(75, 15);
+ctx.lineTo(75, 35);
+ctx.stroke();
+ctx.fillRect(65, 15, 20, 20);
+_assertPixel(offscreenCanvas, 14,25, 0,255,0,255, "14,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 15,25, 0,255,0,255, "15,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 16,25, 0,255,0,255, "16,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 34,25, 0,255,0,255, "34,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,25, 0,255,0,255, "36,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 64,25, 0,255,0,255, "64,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 66,25, 0,255,0,255, "66,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 84,25, 0,255,0,255, "84,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 85,25, 0,255,0,255, "85,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,25, 0,255,0,255, "86,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.basic.worker.js
new file mode 100644
index 0000000..e1e8a05
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.basic.worker.js
@@ -0,0 +1,52 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.width.basic
+// Description:lineWidth determines the width of line strokes
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineWidth determines the width of line strokes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 20;
+// Draw a green line over a red box, to check the line is not too small
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(15, 15, 20, 20);
+ctx.beginPath();
+ctx.moveTo(25, 15);
+ctx.lineTo(25, 35);
+ctx.stroke();
+// Draw a green box over a red line, to check the line is not too large
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(75, 15);
+ctx.lineTo(75, 35);
+ctx.stroke();
+ctx.fillRect(65, 15, 20, 20);
+_assertPixel(offscreenCanvas, 14,25, 0,255,0,255, "14,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 15,25, 0,255,0,255, "15,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 16,25, 0,255,0,255, "16,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 34,25, 0,255,0,255, "34,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,25, 0,255,0,255, "36,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 64,25, 0,255,0,255, "64,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 66,25, 0,255,0,255, "66,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 84,25, 0,255,0,255, "84,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 85,25, 0,255,0,255, "85,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,25, 0,255,0,255, "86,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.invalid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.invalid.html
new file mode 100644
index 0000000..2f72c8d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.invalid.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.width.invalid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.width.invalid</h1>
+<p class="desc">Setting lineWidth to invalid values is ignored</p>
+
+
+<script>
+var t = async_test("Setting lineWidth to invalid values is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineWidth = 1.5;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = 0;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = -1;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = Infinity;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = -Infinity;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = NaN;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.invalid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.invalid.worker.js
new file mode 100644
index 0000000..2c3be82
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.invalid.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.width.invalid
+// Description:Setting lineWidth to invalid values is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting lineWidth to invalid values is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineWidth = 1.5;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = 0;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = -1;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = Infinity;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = -Infinity;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = 1.5;
+ctx.lineWidth = NaN;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.scaledefault.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.scaledefault.html
new file mode 100644
index 0000000..bb4607f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.scaledefault.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.width.scaledefault</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.width.scaledefault</h1>
+<p class="desc">Default lineWidth strokes are affected by scale transformations</p>
+
+
+<script>
+var t = async_test("Default lineWidth strokes are affected by scale transformations");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(50, 50);
+ctx.strokeStyle = '#0f0';
+ctx.moveTo(0, 0.5);
+ctx.lineTo(2, 0.5);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,5, 0,255,0,255, "50,5", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,45, 0,255,0,255, "50,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.scaledefault.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.scaledefault.worker.js
new file mode 100644
index 0000000..7fedaed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.scaledefault.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.width.scaledefault
+// Description:Default lineWidth strokes are affected by scale transformations
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Default lineWidth strokes are affected by scale transformations");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(50, 50);
+ctx.strokeStyle = '#0f0';
+ctx.moveTo(0, 0.5);
+ctx.lineTo(2, 0.5);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,5, 0,255,0,255, "50,5", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,45, 0,255,0,255, "50,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.transformed.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.transformed.html
new file mode 100644
index 0000000..72370f5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.transformed.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.width.transformed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.width.transformed</h1>
+<p class="desc">Line stroke widths are affected by scale transformations</p>
+
+
+<script>
+var t = async_test("Line stroke widths are affected by scale transformations");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 4;
+// Draw a green line over a red box, to check the line is not too small
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(15, 15, 20, 20);
+ctx.save();
+ ctx.scale(5, 1);
+ ctx.beginPath();
+ ctx.moveTo(5, 15);
+ ctx.lineTo(5, 35);
+ ctx.stroke();
+ctx.restore();
+// Draw a green box over a red line, to check the line is not too large
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.save();
+ ctx.scale(-5, 1);
+ ctx.beginPath();
+ ctx.moveTo(-15, 15);
+ ctx.lineTo(-15, 35);
+ ctx.stroke();
+ctx.restore();
+ctx.fillRect(65, 15, 20, 20);
+_assertPixel(offscreenCanvas, 14,25, 0,255,0,255, "14,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 15,25, 0,255,0,255, "15,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 16,25, 0,255,0,255, "16,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 34,25, 0,255,0,255, "34,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,25, 0,255,0,255, "36,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 64,25, 0,255,0,255, "64,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 66,25, 0,255,0,255, "66,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 84,25, 0,255,0,255, "84,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 85,25, 0,255,0,255, "85,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,25, 0,255,0,255, "86,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.transformed.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.transformed.worker.js
new file mode 100644
index 0000000..7bd4efb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.transformed.worker.js
@@ -0,0 +1,58 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.width.transformed
+// Description:Line stroke widths are affected by scale transformations
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Line stroke widths are affected by scale transformations");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 4;
+// Draw a green line over a red box, to check the line is not too small
+ctx.fillStyle = '#f00';
+ctx.strokeStyle = '#0f0';
+ctx.fillRect(15, 15, 20, 20);
+ctx.save();
+ ctx.scale(5, 1);
+ ctx.beginPath();
+ ctx.moveTo(5, 15);
+ ctx.lineTo(5, 35);
+ ctx.stroke();
+ctx.restore();
+// Draw a green box over a red line, to check the line is not too large
+ctx.fillStyle = '#0f0';
+ctx.strokeStyle = '#f00';
+ctx.save();
+ ctx.scale(-5, 1);
+ ctx.beginPath();
+ ctx.moveTo(-15, 15);
+ ctx.lineTo(-15, 35);
+ ctx.stroke();
+ctx.restore();
+ctx.fillRect(65, 15, 20, 20);
+_assertPixel(offscreenCanvas, 14,25, 0,255,0,255, "14,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 15,25, 0,255,0,255, "15,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 16,25, 0,255,0,255, "16,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 34,25, 0,255,0,255, "34,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 36,25, 0,255,0,255, "36,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 64,25, 0,255,0,255, "64,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 66,25, 0,255,0,255, "66,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 84,25, 0,255,0,255, "84,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 85,25, 0,255,0,255, "85,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 86,25, 0,255,0,255, "86,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.valid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.valid.html
new file mode 100644
index 0000000..6cfb199
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.valid.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.line.width.valid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.line.width.valid</h1>
+<p class="desc">Setting lineWidth to valid values works</p>
+
+
+<script>
+var t = async_test("Setting lineWidth to valid values works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineWidth = 1.5;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = "1e1";
+_assertSame(ctx.lineWidth, 10, "ctx.lineWidth", "10");
+ctx.lineWidth = 1/1024;
+_assertSame(ctx.lineWidth, 1/1024, "ctx.lineWidth", "1/1024");
+ctx.lineWidth = 1000;
+_assertSame(ctx.lineWidth, 1000, "ctx.lineWidth", "1000");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.valid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.valid.worker.js
new file mode 100644
index 0000000..8e7498f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/line-styles/2d.line.width.valid.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.line.width.valid
+// Description:Setting lineWidth to valid values works
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting lineWidth to valid values works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineWidth = 1.5;
+_assertSame(ctx.lineWidth, 1.5, "ctx.lineWidth", "1.5");
+ctx.lineWidth = "1e1";
+_assertSame(ctx.lineWidth, 10, "ctx.lineWidth", "10");
+ctx.lineWidth = 1/1024;
+_assertSame(ctx.lineWidth, 1/1024, "ctx.lineWidth", "1/1024");
+ctx.lineWidth = 1000;
+_assertSame(ctx.lineWidth, 1000, "ctx.lineWidth", "1000");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.1.html
new file mode 100644
index 0000000..1a4cfe9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.angle.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.angle.1</h1>
+<p class="desc">arc() draws pi/2 .. -pi anticlockwise correctly</p>
+
+
+<script>
+var t = async_test("arc() draws pi/2 .. -pi anticlockwise correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, Math.PI/2, -Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.1.worker.js
new file mode 100644
index 0000000..18536c9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.angle.1
+// Description:arc() draws pi/2 .. -pi anticlockwise correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws pi/2 .. -pi anticlockwise correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, Math.PI/2, -Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.2.html
new file mode 100644
index 0000000..ac1a5a6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.2.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.angle.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.angle.2</h1>
+<p class="desc">arc() draws -3pi/2 .. -pi anticlockwise correctly</p>
+
+
+<script>
+var t = async_test("arc() draws -3pi/2 .. -pi anticlockwise correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, -3*Math.PI/2, -Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.2.worker.js
new file mode 100644
index 0000000..7a7def97
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.2.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.angle.2
+// Description:arc() draws -3pi/2 .. -pi anticlockwise correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws -3pi/2 .. -pi anticlockwise correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, -3*Math.PI/2, -Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.3.html
new file mode 100644
index 0000000..0684024
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.3.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.angle.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.angle.3</h1>
+<p class="desc">arc() wraps angles mod 2pi when anticlockwise and end > start+2pi</p>
+
+
+<script>
+var t = async_test("arc() wraps angles mod 2pi when anticlockwise and end > start+2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, (512+1/2)*Math.PI, (1024-1)*Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.3.worker.js
new file mode 100644
index 0000000..4c4bfa8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.3.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.angle.3
+// Description:arc() wraps angles mod 2pi when anticlockwise and end > start+2pi
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() wraps angles mod 2pi when anticlockwise and end > start+2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, (512+1/2)*Math.PI, (1024-1)*Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.4.html
new file mode 100644
index 0000000..f47669c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.4.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.angle.4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.angle.4</h1>
+<p class="desc">arc() draws a full circle when clockwise and end > start+2pi</p>
+
+
+<script>
+var t = async_test("arc() draws a full circle when clockwise and end > start+2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.arc(50, 25, 60, (512+1/2)*Math.PI, (1024-1)*Math.PI, false);
+ctx.fill();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.4.worker.js
new file mode 100644
index 0000000..675808c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.4.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.angle.4
+// Description:arc() draws a full circle when clockwise and end > start+2pi
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws a full circle when clockwise and end > start+2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.arc(50, 25, 60, (512+1/2)*Math.PI, (1024-1)*Math.PI, false);
+ctx.fill();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.5.html
new file mode 100644
index 0000000..9020ff1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.5.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.angle.5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.angle.5</h1>
+<p class="desc">arc() wraps angles mod 2pi when clockwise and start > end+2pi</p>
+
+
+<script>
+var t = async_test("arc() wraps angles mod 2pi when clockwise and start > end+2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, (1024-1)*Math.PI, (512+1/2)*Math.PI, false);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.5.worker.js
new file mode 100644
index 0000000..ba5c521
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.5.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.angle.5
+// Description:arc() wraps angles mod 2pi when clockwise and start > end+2pi
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() wraps angles mod 2pi when clockwise and start > end+2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, (1024-1)*Math.PI, (512+1/2)*Math.PI, false);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.6.html
new file mode 100644
index 0000000..9a9d9dd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.6.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.angle.6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.angle.6</h1>
+<p class="desc">arc() draws a full circle when anticlockwise and start > end+2pi</p>
+
+
+<script>
+var t = async_test("arc() draws a full circle when anticlockwise and start > end+2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.arc(50, 25, 60, (1024-1)*Math.PI, (512+1/2)*Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.6.worker.js
new file mode 100644
index 0000000..7201b69d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.angle.6.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.angle.6
+// Description:arc() draws a full circle when anticlockwise and start > end+2pi
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws a full circle when anticlockwise and start > end+2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.arc(50, 25, 60, (1024-1)*Math.PI, (512+1/2)*Math.PI, true);
+ctx.fill();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.default.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.default.html
new file mode 100644
index 0000000..077fe88
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.default.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.default</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.default</h1>
+<p class="desc">arc() with missing last argument defaults to clockwise</p>
+
+
+<script>
+var t = async_test("arc() with missing last argument defaults to clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, -Math.PI, Math.PI/2);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.default.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.default.worker.js
new file mode 100644
index 0000000..f6db49f0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.default.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.default
+// Description:arc() with missing last argument defaults to clockwise
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() with missing last argument defaults to clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 0);
+ctx.arc(100, 0, 150, -Math.PI, Math.PI/2);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.empty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.empty.html
new file mode 100644
index 0000000..ec669b0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.empty.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.empty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.empty</h1>
+<p class="desc">arc() with an empty path does not draw a straight line to the start point</p>
+
+
+<script>
+var t = async_test("arc() with an empty path does not draw a straight line to the start point");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(200, 25, 5, 0, 2*Math.PI, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.empty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.empty.worker.js
new file mode 100644
index 0000000..f78e4a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.empty.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.empty
+// Description:arc() with an empty path does not draw a straight line to the start point
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() with an empty path does not draw a straight line to the start point");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(200, 25, 5, 0, 2*Math.PI, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.end.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.end.html
new file mode 100644
index 0000000..649c304
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.end.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.end</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.end</h1>
+<p class="desc">arc() adds the end point of the arc to the subpath</p>
+
+
+<script>
+var t = async_test("arc() adds the end point of the arc to the subpath");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(-100, 0);
+ctx.arc(-100, 0, 25, -Math.PI/2, Math.PI/2, true);
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.end.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.end.worker.js
new file mode 100644
index 0000000..3782a6d82
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.end.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.end
+// Description:arc() adds the end point of the arc to the subpath
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() adds the end point of the arc to the subpath");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(-100, 0);
+ctx.arc(-100, 0, 25, -Math.PI/2, Math.PI/2, true);
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.negative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.negative.html
new file mode 100644
index 0000000..c46d56ce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.negative.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.negative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.negative</h1>
+<p class="desc">arc() with negative radius throws INDEX_SIZE_ERR</p>
+
+
+<script>
+var t = async_test("arc() with negative radius throws INDEX_SIZE_ERR");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.arc(0, 0, -1, 0, 0, true); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.negative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.negative.worker.js
new file mode 100644
index 0000000..e389aafb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.negative.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.negative
+// Description:arc() with negative radius throws INDEX_SIZE_ERR
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() with negative radius throws INDEX_SIZE_ERR");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.arc(0, 0, -1, 0, 0, true); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonempty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonempty.html
new file mode 100644
index 0000000..75c70da4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonempty.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.nonempty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.nonempty</h1>
+<p class="desc">arc() with a non-empty path does draw a straight line to the start point</p>
+
+
+<script>
+var t = async_test("arc() with a non-empty path does draw a straight line to the start point");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arc(200, 25, 5, 0, 2*Math.PI, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonempty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonempty.worker.js
new file mode 100644
index 0000000..4446654d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonempty.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.nonempty
+// Description:arc() with a non-empty path does draw a straight line to the start point
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() with a non-empty path does draw a straight line to the start point");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arc(200, 25, 5, 0, 2*Math.PI, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonfinite.html
new file mode 100644
index 0000000..e6743e4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonfinite.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.nonfinite</h1>
+<p class="desc">arc() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("arc() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.arc(Infinity, 0, 50, 0, 2*Math.PI, true);
+ctx.arc(-Infinity, 0, 50, 0, 2*Math.PI, true);
+ctx.arc(NaN, 0, 50, 0, 2*Math.PI, true);
+ctx.arc(0, Infinity, 50, 0, 2*Math.PI, true);
+ctx.arc(0, -Infinity, 50, 0, 2*Math.PI, true);
+ctx.arc(0, NaN, 50, 0, 2*Math.PI, true);
+ctx.arc(0, 0, Infinity, 0, 2*Math.PI, true);
+ctx.arc(0, 0, -Infinity, 0, 2*Math.PI, true);
+ctx.arc(0, 0, NaN, 0, 2*Math.PI, true);
+ctx.arc(0, 0, 50, Infinity, 2*Math.PI, true);
+ctx.arc(0, 0, 50, -Infinity, 2*Math.PI, true);
+ctx.arc(0, 0, 50, NaN, 2*Math.PI, true);
+ctx.arc(0, 0, 50, 0, Infinity, true);
+ctx.arc(0, 0, 50, 0, -Infinity, true);
+ctx.arc(0, 0, 50, 0, NaN, true);
+ctx.arc(Infinity, Infinity, 50, 0, 2*Math.PI, true);
+ctx.arc(Infinity, Infinity, Infinity, 0, 2*Math.PI, true);
+ctx.arc(Infinity, Infinity, Infinity, Infinity, 2*Math.PI, true);
+ctx.arc(Infinity, Infinity, Infinity, Infinity, Infinity, true);
+ctx.arc(Infinity, Infinity, Infinity, 0, Infinity, true);
+ctx.arc(Infinity, Infinity, 50, Infinity, 2*Math.PI, true);
+ctx.arc(Infinity, Infinity, 50, Infinity, Infinity, true);
+ctx.arc(Infinity, Infinity, 50, 0, Infinity, true);
+ctx.arc(Infinity, 0, Infinity, 0, 2*Math.PI, true);
+ctx.arc(Infinity, 0, Infinity, Infinity, 2*Math.PI, true);
+ctx.arc(Infinity, 0, Infinity, Infinity, Infinity, true);
+ctx.arc(Infinity, 0, Infinity, 0, Infinity, true);
+ctx.arc(Infinity, 0, 50, Infinity, 2*Math.PI, true);
+ctx.arc(Infinity, 0, 50, Infinity, Infinity, true);
+ctx.arc(Infinity, 0, 50, 0, Infinity, true);
+ctx.arc(0, Infinity, Infinity, 0, 2*Math.PI, true);
+ctx.arc(0, Infinity, Infinity, Infinity, 2*Math.PI, true);
+ctx.arc(0, Infinity, Infinity, Infinity, Infinity, true);
+ctx.arc(0, Infinity, Infinity, 0, Infinity, true);
+ctx.arc(0, Infinity, 50, Infinity, 2*Math.PI, true);
+ctx.arc(0, Infinity, 50, Infinity, Infinity, true);
+ctx.arc(0, Infinity, 50, 0, Infinity, true);
+ctx.arc(0, 0, Infinity, Infinity, 2*Math.PI, true);
+ctx.arc(0, 0, Infinity, Infinity, Infinity, true);
+ctx.arc(0, 0, Infinity, 0, Infinity, true);
+ctx.arc(0, 0, 50, Infinity, Infinity, true);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonfinite.worker.js
new file mode 100644
index 0000000..6a81cfec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.nonfinite.worker.js
@@ -0,0 +1,70 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.nonfinite
+// Description:arc() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.arc(Infinity, 0, 50, 0, 2*Math.PI, true);
+ctx.arc(-Infinity, 0, 50, 0, 2*Math.PI, true);
+ctx.arc(NaN, 0, 50, 0, 2*Math.PI, true);
+ctx.arc(0, Infinity, 50, 0, 2*Math.PI, true);
+ctx.arc(0, -Infinity, 50, 0, 2*Math.PI, true);
+ctx.arc(0, NaN, 50, 0, 2*Math.PI, true);
+ctx.arc(0, 0, Infinity, 0, 2*Math.PI, true);
+ctx.arc(0, 0, -Infinity, 0, 2*Math.PI, true);
+ctx.arc(0, 0, NaN, 0, 2*Math.PI, true);
+ctx.arc(0, 0, 50, Infinity, 2*Math.PI, true);
+ctx.arc(0, 0, 50, -Infinity, 2*Math.PI, true);
+ctx.arc(0, 0, 50, NaN, 2*Math.PI, true);
+ctx.arc(0, 0, 50, 0, Infinity, true);
+ctx.arc(0, 0, 50, 0, -Infinity, true);
+ctx.arc(0, 0, 50, 0, NaN, true);
+ctx.arc(Infinity, Infinity, 50, 0, 2*Math.PI, true);
+ctx.arc(Infinity, Infinity, Infinity, 0, 2*Math.PI, true);
+ctx.arc(Infinity, Infinity, Infinity, Infinity, 2*Math.PI, true);
+ctx.arc(Infinity, Infinity, Infinity, Infinity, Infinity, true);
+ctx.arc(Infinity, Infinity, Infinity, 0, Infinity, true);
+ctx.arc(Infinity, Infinity, 50, Infinity, 2*Math.PI, true);
+ctx.arc(Infinity, Infinity, 50, Infinity, Infinity, true);
+ctx.arc(Infinity, Infinity, 50, 0, Infinity, true);
+ctx.arc(Infinity, 0, Infinity, 0, 2*Math.PI, true);
+ctx.arc(Infinity, 0, Infinity, Infinity, 2*Math.PI, true);
+ctx.arc(Infinity, 0, Infinity, Infinity, Infinity, true);
+ctx.arc(Infinity, 0, Infinity, 0, Infinity, true);
+ctx.arc(Infinity, 0, 50, Infinity, 2*Math.PI, true);
+ctx.arc(Infinity, 0, 50, Infinity, Infinity, true);
+ctx.arc(Infinity, 0, 50, 0, Infinity, true);
+ctx.arc(0, Infinity, Infinity, 0, 2*Math.PI, true);
+ctx.arc(0, Infinity, Infinity, Infinity, 2*Math.PI, true);
+ctx.arc(0, Infinity, Infinity, Infinity, Infinity, true);
+ctx.arc(0, Infinity, Infinity, 0, Infinity, true);
+ctx.arc(0, Infinity, 50, Infinity, 2*Math.PI, true);
+ctx.arc(0, Infinity, 50, Infinity, Infinity, true);
+ctx.arc(0, Infinity, 50, 0, Infinity, true);
+ctx.arc(0, 0, Infinity, Infinity, 2*Math.PI, true);
+ctx.arc(0, 0, Infinity, Infinity, Infinity, true);
+ctx.arc(0, 0, Infinity, 0, Infinity, true);
+ctx.arc(0, 0, 50, Infinity, Infinity, true);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.1.html
new file mode 100644
index 0000000..d6dd793
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.1.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.scale.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.scale.1</h1>
+<p class="desc">Non-uniformly scaled arcs are the right shape</p>
+
+
+<script>
+var t = async_test("Non-uniformly scaled arcs are the right shape");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(2, 0.5);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.arc(25, 50, 56, 0, 2*Math.PI, false);
+ctx.fill();
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(-25, 50);
+ctx.arc(-25, 50, 24, 0, 2*Math.PI, false);
+ctx.moveTo(75, 50);
+ctx.arc(75, 50, 24, 0, 2*Math.PI, false);
+ctx.moveTo(25, -25);
+ctx.arc(25, -25, 24, 0, 2*Math.PI, false);
+ctx.moveTo(25, 125);
+ctx.arc(25, 125, 24, 0, 2*Math.PI, false);
+ctx.fill();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.1.worker.js
new file mode 100644
index 0000000..f35ba45
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.1.worker.js
@@ -0,0 +1,46 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.scale.1
+// Description:Non-uniformly scaled arcs are the right shape
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Non-uniformly scaled arcs are the right shape");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(2, 0.5);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.arc(25, 50, 56, 0, 2*Math.PI, false);
+ctx.fill();
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(-25, 50);
+ctx.arc(-25, 50, 24, 0, 2*Math.PI, false);
+ctx.moveTo(75, 50);
+ctx.arc(75, 50, 24, 0, 2*Math.PI, false);
+ctx.moveTo(25, -25);
+ctx.arc(25, -25, 24, 0, 2*Math.PI, false);
+ctx.moveTo(25, 125);
+ctx.arc(25, 125, 24, 0, 2*Math.PI, false);
+ctx.fill();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.2.html
new file mode 100644
index 0000000..c3dfddef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.2.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.scale.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.scale.2</h1>
+<p class="desc">Highly scaled arcs are the right shape</p>
+
+
+<script>
+var t = async_test("Highly scaled arcs are the right shape");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(100, 100);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 1.2;
+ctx.beginPath();
+ctx.arc(0, 0, 0.6, 0, Math.PI/2, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.2.worker.js
new file mode 100644
index 0000000..4ace0218
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.scale.2.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.scale.2
+// Description:Highly scaled arcs are the right shape
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Highly scaled arcs are the right shape");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(100, 100);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 1.2;
+ctx.beginPath();
+ctx.arc(0, 0, 0.6, 0, Math.PI/2, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.html
new file mode 100644
index 0000000..fbab5d1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.selfintersect.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.selfintersect.1</h1>
+<p class="desc">arc() with lineWidth > 2*radius is drawn sensibly</p>
+
+
+<script>
+var t = async_test("arc() with lineWidth > 2*radius is drawn sensibly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(100, 50, 25, 0, -Math.PI/2, true);
+ctx.stroke();
+ctx.beginPath();
+ctx.arc(0, 0, 25, 0, -Math.PI/2, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.worker.js
new file mode 100644
index 0000000..3148354
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.1.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.selfintersect.1
+// Description:arc() with lineWidth > 2*radius is drawn sensibly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() with lineWidth > 2*radius is drawn sensibly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(100, 50, 25, 0, -Math.PI/2, true);
+ctx.stroke();
+ctx.beginPath();
+ctx.arc(0, 0, 25, 0, -Math.PI/2, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.html
new file mode 100644
index 0000000..e96b8f2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.selfintersect.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.selfintersect.2</h1>
+<p class="desc">arc() with lineWidth > 2*radius is drawn sensibly</p>
+
+
+<script>
+var t = async_test("arc() with lineWidth > 2*radius is drawn sensibly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 180;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.arc(-50, 50, 25, 0, -Math.PI/2, true);
+ctx.stroke();
+ctx.beginPath();
+ctx.arc(100, 0, 25, 0, -Math.PI/2, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,10, 0,255,0,255, "90,10", "0,255,0,255");
+_assertPixel(offscreenCanvas, 97,1, 0,255,0,255, "97,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 97,2, 0,255,0,255, "97,2", "0,255,0,255");
+_assertPixel(offscreenCanvas, 97,3, 0,255,0,255, "97,3", "0,255,0,255");
+_assertPixel(offscreenCanvas, 2,48, 0,255,0,255, "2,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.worker.js
new file mode 100644
index 0000000..bf29cd12
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.selfintersect.2.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.selfintersect.2
+// Description:arc() with lineWidth > 2*radius is drawn sensibly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() with lineWidth > 2*radius is drawn sensibly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 180;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.arc(-50, 50, 25, 0, -Math.PI/2, true);
+ctx.stroke();
+ctx.beginPath();
+ctx.arc(100, 0, 25, 0, -Math.PI/2, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,10, 0,255,0,255, "90,10", "0,255,0,255");
+_assertPixel(offscreenCanvas, 97,1, 0,255,0,255, "97,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 97,2, 0,255,0,255, "97,2", "0,255,0,255");
+_assertPixel(offscreenCanvas, 97,3, 0,255,0,255, "97,3", "0,255,0,255");
+_assertPixel(offscreenCanvas, 2,48, 0,255,0,255, "2,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.1.html
new file mode 100644
index 0000000..8be62a1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.shape.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.shape.1</h1>
+<p class="desc">arc() from 0 to pi does not draw anything in the wrong half</p>
+
+
+<script>
+var t = async_test("arc() from 0 to pi does not draw anything in the wrong half");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(50, 50, 50, 0, Math.PI, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,48, 0,255,0,255, "20,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.1.worker.js
new file mode 100644
index 0000000..3be6bc6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.1.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.shape.1
+// Description:arc() from 0 to pi does not draw anything in the wrong half
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() from 0 to pi does not draw anything in the wrong half");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(50, 50, 50, 0, Math.PI, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,48, 0,255,0,255, "20,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.2.html
new file mode 100644
index 0000000..d9b53d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.shape.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.shape.2</h1>
+<p class="desc">arc() from 0 to pi draws stuff in the right half</p>
+
+
+<script>
+var t = async_test("arc() from 0 to pi draws stuff in the right half");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 100;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.arc(50, 50, 50, 0, Math.PI, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,48, 0,255,0,255, "20,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.2.worker.js
new file mode 100644
index 0000000..98e7b1d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.2.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.shape.2
+// Description:arc() from 0 to pi draws stuff in the right half
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() from 0 to pi draws stuff in the right half");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 100;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.arc(50, 50, 50, 0, Math.PI, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 20,48, 0,255,0,255, "20,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.3.html
new file mode 100644
index 0000000..03b44d77
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.3.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.shape.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.shape.3</h1>
+<p class="desc">arc() from 0 to -pi/2 does not draw anything in the wrong quadrant</p>
+
+
+<script>
+var t = async_test("arc() from 0 to -pi/2 does not draw anything in the wrong quadrant");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 100;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(0, 50, 50, 0, -Math.PI/2, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.3.worker.js
new file mode 100644
index 0000000..1f09f586
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.3.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.shape.3
+// Description:arc() from 0 to -pi/2 does not draw anything in the wrong quadrant
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() from 0 to -pi/2 does not draw anything in the wrong quadrant");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 100;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(0, 50, 50, 0, -Math.PI/2, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.4.html
new file mode 100644
index 0000000..68767de
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.4.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.shape.4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.shape.4</h1>
+<p class="desc">arc() from 0 to -pi/2 draws stuff in the right quadrant</p>
+
+
+<script>
+var t = async_test("arc() from 0 to -pi/2 draws stuff in the right quadrant");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 150;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.arc(-50, 50, 100, 0, -Math.PI/2, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.4.worker.js
new file mode 100644
index 0000000..d299c5b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.4.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.shape.4
+// Description:arc() from 0 to -pi/2 draws stuff in the right quadrant
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() from 0 to -pi/2 draws stuff in the right quadrant");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 150;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.arc(-50, 50, 100, 0, -Math.PI/2, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.5.html
new file mode 100644
index 0000000..e6a2aadb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.5.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.shape.5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.shape.5</h1>
+<p class="desc">arc() from 0 to 5pi does not draw crazy things</p>
+
+
+<script>
+var t = async_test("arc() from 0 to 5pi does not draw crazy things");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(300, 0, 100, 0, 5*Math.PI, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.5.worker.js
new file mode 100644
index 0000000..21a0ca3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.shape.5.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.shape.5
+// Description:arc() from 0 to 5pi does not draw crazy things
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() from 0 to 5pi does not draw crazy things");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 200;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arc(300, 0, 100, 0, 5*Math.PI, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.1.html
new file mode 100644
index 0000000..5595e3284
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.twopie.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.twopie.1</h1>
+<p class="desc">arc() draws nothing when end = start + 2pi-e and anticlockwise</p>
+
+
+<script>
+var t = async_test("arc() draws nothing when end = start + 2pi-e and anticlockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 2*Math.PI - 1e-4, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.1.worker.js
new file mode 100644
index 0000000..5525571
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.twopie.1
+// Description:arc() draws nothing when end = start + 2pi-e and anticlockwise
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws nothing when end = start + 2pi-e and anticlockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 2*Math.PI - 1e-4, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.2.html
new file mode 100644
index 0000000..4ea42b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.2.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.twopie.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.twopie.2</h1>
+<p class="desc">arc() draws a full circle when end = start + 2pi-e and clockwise</p>
+
+
+<script>
+var t = async_test("arc() draws a full circle when end = start + 2pi-e and clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 2*Math.PI - 1e-4, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.2.worker.js
new file mode 100644
index 0000000..d9f41d8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.2.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.twopie.2
+// Description:arc() draws a full circle when end = start + 2pi-e and clockwise
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws a full circle when end = start + 2pi-e and clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 2*Math.PI - 1e-4, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.3.html
new file mode 100644
index 0000000..01bae07
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.3.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.twopie.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.twopie.3</h1>
+<p class="desc">arc() draws a full circle when end = start + 2pi+e and anticlockwise</p>
+
+
+<script>
+var t = async_test("arc() draws a full circle when end = start + 2pi+e and anticlockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 2*Math.PI + 1e-4, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.3.worker.js
new file mode 100644
index 0000000..41c400e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.3.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.twopie.3
+// Description:arc() draws a full circle when end = start + 2pi+e and anticlockwise
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws a full circle when end = start + 2pi+e and anticlockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 2*Math.PI + 1e-4, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.4.html
new file mode 100644
index 0000000..9906377
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.4.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.twopie.4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.twopie.4</h1>
+<p class="desc">arc() draws nothing when end = start + 2pi+e and clockwise</p>
+
+
+<script>
+var t = async_test("arc() draws nothing when end = start + 2pi+e and clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 2*Math.PI + 1e-4, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.4.worker.js
new file mode 100644
index 0000000..241071f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.twopie.4.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.twopie.4
+// Description:arc() draws nothing when end = start + 2pi+e and clockwise
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws nothing when end = start + 2pi+e and clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 2*Math.PI + 1e-4, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.1.html
new file mode 100644
index 0000000..60b73e0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.zero.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.zero.1</h1>
+<p class="desc">arc() draws nothing when startAngle = endAngle and anticlockwise</p>
+
+
+<script>
+var t = async_test("arc() draws nothing when startAngle = endAngle and anticlockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 0, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.1.worker.js
new file mode 100644
index 0000000..91f15d4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.zero.1
+// Description:arc() draws nothing when startAngle = endAngle and anticlockwise
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws nothing when startAngle = endAngle and anticlockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 0, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.2.html
new file mode 100644
index 0000000..306e5312
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.2.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.zero.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.zero.2</h1>
+<p class="desc">arc() draws nothing when startAngle = endAngle and clockwise</p>
+
+
+<script>
+var t = async_test("arc() draws nothing when startAngle = endAngle and clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 0, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.2.worker.js
new file mode 100644
index 0000000..4238b7d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zero.2.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.zero.2
+// Description:arc() draws nothing when startAngle = endAngle and clockwise
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() draws nothing when startAngle = endAngle and clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.arc(50, 25, 50, 0, 0, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,20, 0,255,0,255, "50,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zeroradius.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zeroradius.html
new file mode 100644
index 0000000..ed77c3b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zeroradius.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arc.zeroradius</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arc.zeroradius</h1>
+<p class="desc">arc() with zero radius draws a line to the start point</p>
+
+
+<script>
+var t = async_test("arc() with zero radius draws a line to the start point");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00'
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arc(200, 25, 0, 0, Math.PI, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zeroradius.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zeroradius.worker.js
new file mode 100644
index 0000000..fb12a8f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arc.zeroradius.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arc.zeroradius
+// Description:arc() with zero radius draws a line to the start point
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arc() with zero radius draws a line to the start point");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00'
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arc(200, 25, 0, 0, Math.PI, true);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.html
new file mode 100644
index 0000000..1f730256
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.coincide.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.coincide.1</h1>
+<p class="desc">arcTo() has no effect if P0 = P1</p>
+
+
+<script>
+var t = async_test("arcTo() has no effect if P0 = P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(0, 25, 50, 1000, 1);
+ctx.lineTo(100, 25);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.arcTo(50, 25, 100, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.worker.js
new file mode 100644
index 0000000..a646c36
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.1.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.coincide.1
+// Description:arcTo() has no effect if P0 = P1
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() has no effect if P0 = P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(0, 25, 50, 1000, 1);
+ctx.lineTo(100, 25);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.arcTo(50, 25, 100, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,1, 0,255,0,255, "50,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,48, 0,255,0,255, "50,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.html
new file mode 100644
index 0000000..d77d5de
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.coincide.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.coincide.2</h1>
+<p class="desc">arcTo() draws a straight line to P1 if P1 = P2</p>
+
+
+<script>
+var t = async_test("arcTo() draws a straight line to P1 if P1 = P2");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, 100, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.worker.js
new file mode 100644
index 0000000..5459619
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.coincide.2.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.coincide.2
+// Description:arcTo() draws a straight line to P1 if P1 = P2
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() draws a straight line to P1 if P1 = P2");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, 100, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.html
new file mode 100644
index 0000000..e1cd149
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.collinear.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.collinear.1</h1>
+<p class="desc">arcTo() with all points on a line, and P1 between P0/P2, draws a straight line to P1</p>
+
+
+<script>
+var t = async_test("arcTo() with all points on a line, and P1 between P0/P2, draws a straight line to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, 200, 25, 1);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(-100, 25);
+ctx.arcTo(0, 25, 100, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.worker.js
new file mode 100644
index 0000000..580cac8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.1.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.collinear.1
+// Description:arcTo() with all points on a line, and P1 between P0/P2, draws a straight line to P1
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() with all points on a line, and P1 between P0/P2, draws a straight line to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, 200, 25, 1);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(-100, 25);
+ctx.arcTo(0, 25, 100, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.html
new file mode 100644
index 0000000..1287b57
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.collinear.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.collinear.2</h1>
+<p class="desc">arcTo() with all points on a line, and P2 between P0/P1, draws a straight line to P1</p>
+
+
+<script>
+var t = async_test("arcTo() with all points on a line, and P2 between P0/P1, draws a straight line to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, 10, 25, 1);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 25);
+ctx.arcTo(200, 25, 110, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.worker.js
new file mode 100644
index 0000000..ceeae492
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.2.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.collinear.2
+// Description:arcTo() with all points on a line, and P2 between P0/P1, draws a straight line to P1
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() with all points on a line, and P2 between P0/P1, draws a straight line to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, 10, 25, 1);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 25);
+ctx.arcTo(200, 25, 110, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.html
new file mode 100644
index 0000000..0c56e4d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.collinear.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.collinear.3</h1>
+<p class="desc">arcTo() with all points on a line, and P0 between P1/P2, draws a straight line to P1</p>
+
+
+<script>
+var t = async_test("arcTo() with all points on a line, and P0 between P1/P2, draws a straight line to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, -100, 25, 1);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 25);
+ctx.arcTo(200, 25, 0, 25, 1);
+ctx.stroke();
+ctx.beginPath();
+ctx.moveTo(-100, 25);
+ctx.arcTo(0, 25, -200, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.worker.js
new file mode 100644
index 0000000..536bd0d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.collinear.3.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.collinear.3
+// Description:arcTo() with all points on a line, and P0 between P1/P2, draws a straight line to P1
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() with all points on a line, and P0 between P1/P2, draws a straight line to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, -100, 25, 1);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 25);
+ctx.arcTo(200, 25, 0, 25, 1);
+ctx.stroke();
+ctx.beginPath();
+ctx.moveTo(-100, 25);
+ctx.arcTo(0, 25, -200, 25, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.html
new file mode 100644
index 0000000..8b5490637
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.ensuresubpath.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.ensuresubpath.1</h1>
+<p class="desc">If there is no subpath, the first control point is added (and nothing is drawn up to it)</p>
+
+
+<script>
+var t = async_test("If there is no subpath, the first control point is added (and nothing is drawn up to it)");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arcTo(100, 50, 200, 50, 0.1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.worker.js
new file mode 100644
index 0000000..cefcf11
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.ensuresubpath.1
+// Description:If there is no subpath, the first control point is added (and nothing is drawn up to it)
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("If there is no subpath, the first control point is added (and nothing is drawn up to it)");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.arcTo(100, 50, 200, 50, 0.1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.html
new file mode 100644
index 0000000..8056389a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.ensuresubpath.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.ensuresubpath.2</h1>
+<p class="desc">If there is no subpath, the first control point is added</p>
+
+
+<script>
+var t = async_test("If there is no subpath, the first control point is added");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.arcTo(0, 25, 50, 250, 0.1); // adds (x1,y1), draws nothing
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.worker.js
new file mode 100644
index 0000000..d6ab04e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.ensuresubpath.2.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.ensuresubpath.2
+// Description:If there is no subpath, the first control point is added
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("If there is no subpath, the first control point is added");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.arcTo(0, 25, 50, 250, 0.1); // adds (x1,y1), draws nothing
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.negative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.negative.html
new file mode 100644
index 0000000..d258d0b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.negative.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.negative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.negative</h1>
+<p class="desc">arcTo() with negative radius throws an exception</p>
+
+
+<script>
+var t = async_test("arcTo() with negative radius throws an exception");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.arcTo(0, 0, 0, 0, -1); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.negative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.negative.worker.js
new file mode 100644
index 0000000..b95f4c5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.negative.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.negative
+// Description:arcTo() with negative radius throws an exception
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() with negative radius throws an exception");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.arcTo(0, 0, 0, 0, -1); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.html
new file mode 100644
index 0000000..2226f57
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.nonfinite</h1>
+<p class="desc">arcTo() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("arcTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.arcTo(Infinity, 50, 0, 50, 0);
+ctx.arcTo(-Infinity, 50, 0, 50, 0);
+ctx.arcTo(NaN, 50, 0, 50, 0);
+ctx.arcTo(0, Infinity, 0, 50, 0);
+ctx.arcTo(0, -Infinity, 0, 50, 0);
+ctx.arcTo(0, NaN, 0, 50, 0);
+ctx.arcTo(0, 50, Infinity, 50, 0);
+ctx.arcTo(0, 50, -Infinity, 50, 0);
+ctx.arcTo(0, 50, NaN, 50, 0);
+ctx.arcTo(0, 50, 0, Infinity, 0);
+ctx.arcTo(0, 50, 0, -Infinity, 0);
+ctx.arcTo(0, 50, 0, NaN, 0);
+ctx.arcTo(0, 50, 0, 50, Infinity);
+ctx.arcTo(0, 50, 0, 50, -Infinity);
+ctx.arcTo(0, 50, 0, 50, NaN);
+ctx.arcTo(Infinity, Infinity, 0, 50, 0);
+ctx.arcTo(Infinity, Infinity, Infinity, 50, 0);
+ctx.arcTo(Infinity, Infinity, Infinity, Infinity, 0);
+ctx.arcTo(Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.arcTo(Infinity, Infinity, Infinity, 50, Infinity);
+ctx.arcTo(Infinity, Infinity, 0, Infinity, 0);
+ctx.arcTo(Infinity, Infinity, 0, Infinity, Infinity);
+ctx.arcTo(Infinity, Infinity, 0, 50, Infinity);
+ctx.arcTo(Infinity, 50, Infinity, 50, 0);
+ctx.arcTo(Infinity, 50, Infinity, Infinity, 0);
+ctx.arcTo(Infinity, 50, Infinity, Infinity, Infinity);
+ctx.arcTo(Infinity, 50, Infinity, 50, Infinity);
+ctx.arcTo(Infinity, 50, 0, Infinity, 0);
+ctx.arcTo(Infinity, 50, 0, Infinity, Infinity);
+ctx.arcTo(Infinity, 50, 0, 50, Infinity);
+ctx.arcTo(0, Infinity, Infinity, 50, 0);
+ctx.arcTo(0, Infinity, Infinity, Infinity, 0);
+ctx.arcTo(0, Infinity, Infinity, Infinity, Infinity);
+ctx.arcTo(0, Infinity, Infinity, 50, Infinity);
+ctx.arcTo(0, Infinity, 0, Infinity, 0);
+ctx.arcTo(0, Infinity, 0, Infinity, Infinity);
+ctx.arcTo(0, Infinity, 0, 50, Infinity);
+ctx.arcTo(0, 50, Infinity, Infinity, 0);
+ctx.arcTo(0, 50, Infinity, Infinity, Infinity);
+ctx.arcTo(0, 50, Infinity, 50, Infinity);
+ctx.arcTo(0, 50, 0, Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.worker.js
new file mode 100644
index 0000000..c8b00759
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.nonfinite.worker.js
@@ -0,0 +1,68 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.nonfinite
+// Description:arcTo() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.arcTo(Infinity, 50, 0, 50, 0);
+ctx.arcTo(-Infinity, 50, 0, 50, 0);
+ctx.arcTo(NaN, 50, 0, 50, 0);
+ctx.arcTo(0, Infinity, 0, 50, 0);
+ctx.arcTo(0, -Infinity, 0, 50, 0);
+ctx.arcTo(0, NaN, 0, 50, 0);
+ctx.arcTo(0, 50, Infinity, 50, 0);
+ctx.arcTo(0, 50, -Infinity, 50, 0);
+ctx.arcTo(0, 50, NaN, 50, 0);
+ctx.arcTo(0, 50, 0, Infinity, 0);
+ctx.arcTo(0, 50, 0, -Infinity, 0);
+ctx.arcTo(0, 50, 0, NaN, 0);
+ctx.arcTo(0, 50, 0, 50, Infinity);
+ctx.arcTo(0, 50, 0, 50, -Infinity);
+ctx.arcTo(0, 50, 0, 50, NaN);
+ctx.arcTo(Infinity, Infinity, 0, 50, 0);
+ctx.arcTo(Infinity, Infinity, Infinity, 50, 0);
+ctx.arcTo(Infinity, Infinity, Infinity, Infinity, 0);
+ctx.arcTo(Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.arcTo(Infinity, Infinity, Infinity, 50, Infinity);
+ctx.arcTo(Infinity, Infinity, 0, Infinity, 0);
+ctx.arcTo(Infinity, Infinity, 0, Infinity, Infinity);
+ctx.arcTo(Infinity, Infinity, 0, 50, Infinity);
+ctx.arcTo(Infinity, 50, Infinity, 50, 0);
+ctx.arcTo(Infinity, 50, Infinity, Infinity, 0);
+ctx.arcTo(Infinity, 50, Infinity, Infinity, Infinity);
+ctx.arcTo(Infinity, 50, Infinity, 50, Infinity);
+ctx.arcTo(Infinity, 50, 0, Infinity, 0);
+ctx.arcTo(Infinity, 50, 0, Infinity, Infinity);
+ctx.arcTo(Infinity, 50, 0, 50, Infinity);
+ctx.arcTo(0, Infinity, Infinity, 50, 0);
+ctx.arcTo(0, Infinity, Infinity, Infinity, 0);
+ctx.arcTo(0, Infinity, Infinity, Infinity, Infinity);
+ctx.arcTo(0, Infinity, Infinity, 50, Infinity);
+ctx.arcTo(0, Infinity, 0, Infinity, 0);
+ctx.arcTo(0, Infinity, 0, Infinity, Infinity);
+ctx.arcTo(0, Infinity, 0, 50, Infinity);
+ctx.arcTo(0, 50, Infinity, Infinity, 0);
+ctx.arcTo(0, 50, Infinity, Infinity, Infinity);
+ctx.arcTo(0, 50, Infinity, 50, Infinity);
+ctx.arcTo(0, 50, 0, Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.scale.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.scale.html
new file mode 100644
index 0000000..69490ea5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.scale.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.scale</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.scale</h1>
+<p class="desc">arcTo scales the curve, not just the control points</p>
+
+
+<script>
+var t = async_test("arcTo scales the curve, not just the control points");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 50);
+ctx.translate(100, 0);
+ctx.scale(0.1, 1);
+ctx.arcTo(50, 50, 50, 0, 50);
+ctx.lineTo(-1000, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.scale.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.scale.worker.js
new file mode 100644
index 0000000..80b3419
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.scale.worker.js
@@ -0,0 +1,38 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.scale
+// Description:arcTo scales the curve, not just the control points
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo scales the curve, not just the control points");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 50);
+ctx.translate(100, 0);
+ctx.scale(0.1, 1);
+ctx.arcTo(50, 50, 50, 0, 50);
+ctx.lineTo(-1000, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.html
new file mode 100644
index 0000000..fe94413
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.shape.curve1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.shape.curve1</h1>
+<p class="desc">arcTo() curves in the right kind of shape</p>
+
+
+<script>
+var t = async_test("arcTo() curves in the right kind of shape");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var tol = 1.5; // tolerance to avoid antialiasing artifacts
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 10;
+ctx.beginPath();
+ctx.moveTo(10, 25);
+ctx.arcTo(75, 25, 75, 60, 20);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.rect(10, 20, 45, 10);
+ctx.moveTo(80, 45);
+ctx.arc(55, 45, 25+tol, 0, -Math.PI/2, true);
+ctx.arc(55, 45, 15-tol, -Math.PI/2, 0, false);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,19, 0,255,0,255, "55,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,20, 0,255,0,255, "55,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,21, 0,255,0,255, "55,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 64,22, 0,255,0,255, "64,22", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,21, 0,255,0,255, "65,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 72,28, 0,255,0,255, "72,28", "0,255,0,255");
+_assertPixel(offscreenCanvas, 73,27, 0,255,0,255, "73,27", "0,255,0,255");
+_assertPixel(offscreenCanvas, 78,36, 0,255,0,255, "78,36", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,35, 0,255,0,255, "79,35", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,44, 0,255,0,255, "80,44", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,45, 0,255,0,255, "80,45", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,46, 0,255,0,255, "80,46", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,45, 0,255,0,255, "65,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.worker.js
new file mode 100644
index 0000000..2e7e3d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve1.worker.js
@@ -0,0 +1,49 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.shape.curve1
+// Description:arcTo() curves in the right kind of shape
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() curves in the right kind of shape");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var tol = 1.5; // tolerance to avoid antialiasing artifacts
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 10;
+ctx.beginPath();
+ctx.moveTo(10, 25);
+ctx.arcTo(75, 25, 75, 60, 20);
+ctx.stroke();
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.rect(10, 20, 45, 10);
+ctx.moveTo(80, 45);
+ctx.arc(55, 45, 25+tol, 0, -Math.PI/2, true);
+ctx.arc(55, 45, 15-tol, -Math.PI/2, 0, false);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,19, 0,255,0,255, "55,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,20, 0,255,0,255, "55,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,21, 0,255,0,255, "55,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 64,22, 0,255,0,255, "64,22", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,21, 0,255,0,255, "65,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 72,28, 0,255,0,255, "72,28", "0,255,0,255");
+_assertPixel(offscreenCanvas, 73,27, 0,255,0,255, "73,27", "0,255,0,255");
+_assertPixel(offscreenCanvas, 78,36, 0,255,0,255, "78,36", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,35, 0,255,0,255, "79,35", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,44, 0,255,0,255, "80,44", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,45, 0,255,0,255, "80,45", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,46, 0,255,0,255, "80,46", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,45, 0,255,0,255, "65,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.html
new file mode 100644
index 0000000..926b043f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.shape.curve2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.shape.curve2</h1>
+<p class="desc">arcTo() curves in the right kind of shape</p>
+
+
+<script>
+var t = async_test("arcTo() curves in the right kind of shape");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var tol = 1.5; // tolerance to avoid antialiasing artifacts
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.rect(10, 20, 45, 10);
+ctx.moveTo(80, 45);
+ctx.arc(55, 45, 25-tol, 0, -Math.PI/2, true);
+ctx.arc(55, 45, 15+tol, -Math.PI/2, 0, false);
+ctx.fill();
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 10;
+ctx.beginPath();
+ctx.moveTo(10, 25);
+ctx.arcTo(75, 25, 75, 60, 20);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,19, 0,255,0,255, "55,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,20, 0,255,0,255, "55,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,21, 0,255,0,255, "55,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 64,22, 0,255,0,255, "64,22", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,21, 0,255,0,255, "65,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 72,28, 0,255,0,255, "72,28", "0,255,0,255");
+_assertPixel(offscreenCanvas, 73,27, 0,255,0,255, "73,27", "0,255,0,255");
+_assertPixel(offscreenCanvas, 78,36, 0,255,0,255, "78,36", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,35, 0,255,0,255, "79,35", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,44, 0,255,0,255, "80,44", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,45, 0,255,0,255, "80,45", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,46, 0,255,0,255, "80,46", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.worker.js
new file mode 100644
index 0000000..f2fafb06
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.curve2.worker.js
@@ -0,0 +1,48 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.shape.curve2
+// Description:arcTo() curves in the right kind of shape
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() curves in the right kind of shape");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var tol = 1.5; // tolerance to avoid antialiasing artifacts
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.beginPath();
+ctx.rect(10, 20, 45, 10);
+ctx.moveTo(80, 45);
+ctx.arc(55, 45, 25-tol, 0, -Math.PI/2, true);
+ctx.arc(55, 45, 15+tol, -Math.PI/2, 0, false);
+ctx.fill();
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 10;
+ctx.beginPath();
+ctx.moveTo(10, 25);
+ctx.arcTo(75, 25, 75, 60, 20);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,19, 0,255,0,255, "55,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,20, 0,255,0,255, "55,20", "0,255,0,255");
+_assertPixel(offscreenCanvas, 55,21, 0,255,0,255, "55,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 64,22, 0,255,0,255, "64,22", "0,255,0,255");
+_assertPixel(offscreenCanvas, 65,21, 0,255,0,255, "65,21", "0,255,0,255");
+_assertPixel(offscreenCanvas, 72,28, 0,255,0,255, "72,28", "0,255,0,255");
+_assertPixel(offscreenCanvas, 73,27, 0,255,0,255, "73,27", "0,255,0,255");
+_assertPixel(offscreenCanvas, 78,36, 0,255,0,255, "78,36", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,35, 0,255,0,255, "79,35", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,44, 0,255,0,255, "80,44", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,45, 0,255,0,255, "80,45", "0,255,0,255");
+_assertPixel(offscreenCanvas, 80,46, 0,255,0,255, "80,46", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.end.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.end.html
new file mode 100644
index 0000000..a3341c0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.end.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.shape.end</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.shape.end</h1>
+<p class="desc">arcTo() does not draw anything from P1 to P2</p>
+
+
+<script>
+var t = async_test("arcTo() does not draw anything from P1 to P2");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(-100, -100);
+ctx.arcTo(-100, 25, 200, 25, 10);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.end.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.end.worker.js
new file mode 100644
index 0000000..52716753
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.end.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.shape.end
+// Description:arcTo() does not draw anything from P1 to P2
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() does not draw anything from P1 to P2");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(-100, -100);
+ctx.arcTo(-100, 25, 200, 25, 10);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.start.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.start.html
new file mode 100644
index 0000000..5071526e4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.start.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.shape.start</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.shape.start</h1>
+<p class="desc">arcTo() draws a straight line from P0 to P1</p>
+
+
+<script>
+var t = async_test("arcTo() draws a straight line from P0 to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(200, 25, 200, 50, 10);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.start.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.start.worker.js
new file mode 100644
index 0000000..8483568
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.shape.start.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.shape.start
+// Description:arcTo() draws a straight line from P0 to P1
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() draws a straight line from P0 to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(200, 25, 200, 50, 10);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.transformation.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.transformation.html
new file mode 100644
index 0000000..a6989d0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.transformation.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.transformation</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.transformation</h1>
+<p class="desc">arcTo joins up to the last subpath point correctly</p>
+
+
+<script>
+var t = async_test("arcTo joins up to the last subpath point correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 50);
+ctx.translate(100, 0);
+ctx.arcTo(50, 50, 50, 0, 50);
+ctx.lineTo(-100, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.transformation.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.transformation.worker.js
new file mode 100644
index 0000000..a545bd3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.transformation.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.transformation
+// Description:arcTo joins up to the last subpath point correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo joins up to the last subpath point correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 50);
+ctx.translate(100, 0);
+ctx.arcTo(50, 50, 50, 0, 50);
+ctx.lineTo(-100, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.1.html
new file mode 100644
index 0000000..77f69f59
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.zero.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.zero.1</h1>
+<p class="desc">arcTo() with zero radius draws a straight line from P0 to P1</p>
+
+
+<script>
+var t = async_test("arcTo() with zero radius draws a straight line from P0 to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, 100, 100, 0);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(0, -25);
+ctx.arcTo(50, -25, 50, 50, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.1.worker.js
new file mode 100644
index 0000000..d1d2e87b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.1.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.zero.1
+// Description:arcTo() with zero radius draws a straight line from P0 to P1
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() with zero radius draws a straight line from P0 to P1");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, 100, 100, 0);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(0, -25);
+ctx.arcTo(50, -25, 50, 50, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.2.html
new file mode 100644
index 0000000..debe3d31
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.arcTo.zero.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.arcTo.zero.2</h1>
+<p class="desc">arcTo() with zero radius draws a straight line from P0 to P1, even when all points are collinear</p>
+
+
+<script>
+var t = async_test("arcTo() with zero radius draws a straight line from P0 to P1, even when all points are collinear");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, -100, 25, 0);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 25);
+ctx.arcTo(200, 25, 50, 25, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.2.worker.js
new file mode 100644
index 0000000..3ff55ce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.arcTo.zero.2.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.arcTo.zero.2
+// Description:arcTo() with zero radius draws a straight line from P0 to P1, even when all points are collinear
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("arcTo() with zero radius draws a straight line from P0 to P1, even when all points are collinear");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.strokeStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.arcTo(100, 25, -100, 25, 0);
+ctx.stroke();
+ctx.strokeStyle = '#f00';
+ctx.beginPath();
+ctx.moveTo(100, 25);
+ctx.arcTo(200, 25, 50, 25, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.beginPath.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.beginPath.html
new file mode 100644
index 0000000..46c47d74
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.beginPath.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.beginPath</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.beginPath</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.beginPath.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.beginPath.worker.js
new file mode 100644
index 0000000..30069e3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.beginPath.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.beginPath
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.html
new file mode 100644
index 0000000..42f2f04
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.bezierCurveTo.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.bezierCurveTo.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.bezierCurveTo(100, 25, 100, 25, 100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.worker.js
new file mode 100644
index 0000000..57e1084
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.basic.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.bezierCurveTo.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.bezierCurveTo(100, 25, 100, 25, 100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.html
new file mode 100644
index 0000000..29ceb0d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.bezierCurveTo.ensuresubpath.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.bezierCurveTo.ensuresubpath.1</h1>
+<p class="desc">If there is no subpath, the first control point is added (and nothing is drawn up to it)</p>
+
+
+<script>
+var t = async_test("If there is no subpath, the first control point is added (and nothing is drawn up to it)");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.bezierCurveTo(100, 50, 200, 50, 200, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 95,45, 0,255,0,255, "95,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.worker.js
new file mode 100644
index 0000000..5c942267
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.1.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.bezierCurveTo.ensuresubpath.1
+// Description:If there is no subpath, the first control point is added (and nothing is drawn up to it)
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("If there is no subpath, the first control point is added (and nothing is drawn up to it)");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.bezierCurveTo(100, 50, 200, 50, 200, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 95,45, 0,255,0,255, "95,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.html
new file mode 100644
index 0000000..937773b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.bezierCurveTo.ensuresubpath.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.bezierCurveTo.ensuresubpath.2</h1>
+<p class="desc">If there is no subpath, the first control point is added</p>
+
+
+<script>
+var t = async_test("If there is no subpath, the first control point is added");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.bezierCurveTo(0, 25, 100, 25, 100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 5,45, 0,255,0,255, "5,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.worker.js
new file mode 100644
index 0000000..d441145
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.ensuresubpath.2.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.bezierCurveTo.ensuresubpath.2
+// Description:If there is no subpath, the first control point is added
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("If there is no subpath, the first control point is added");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.bezierCurveTo(0, 25, 100, 25, 100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 5,45, 0,255,0,255, "5,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.html
new file mode 100644
index 0000000..58de7007
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.bezierCurveTo.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.bezierCurveTo.nonfinite</h1>
+<p class="desc">bezierCurveTo() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("bezierCurveTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.bezierCurveTo(Infinity, 50, 0, 50, 0, 50);
+ctx.bezierCurveTo(-Infinity, 50, 0, 50, 0, 50);
+ctx.bezierCurveTo(NaN, 50, 0, 50, 0, 50);
+ctx.bezierCurveTo(0, Infinity, 0, 50, 0, 50);
+ctx.bezierCurveTo(0, -Infinity, 0, 50, 0, 50);
+ctx.bezierCurveTo(0, NaN, 0, 50, 0, 50);
+ctx.bezierCurveTo(0, 50, Infinity, 50, 0, 50);
+ctx.bezierCurveTo(0, 50, -Infinity, 50, 0, 50);
+ctx.bezierCurveTo(0, 50, NaN, 50, 0, 50);
+ctx.bezierCurveTo(0, 50, 0, Infinity, 0, 50);
+ctx.bezierCurveTo(0, 50, 0, -Infinity, 0, 50);
+ctx.bezierCurveTo(0, 50, 0, NaN, 0, 50);
+ctx.bezierCurveTo(0, 50, 0, 50, Infinity, 50);
+ctx.bezierCurveTo(0, 50, 0, 50, -Infinity, 50);
+ctx.bezierCurveTo(0, 50, 0, 50, NaN, 50);
+ctx.bezierCurveTo(0, 50, 0, 50, 0, Infinity);
+ctx.bezierCurveTo(0, 50, 0, 50, 0, -Infinity);
+ctx.bezierCurveTo(0, 50, 0, 50, 0, NaN);
+ctx.bezierCurveTo(Infinity, Infinity, 0, 50, 0, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, 0, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, 0, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, Infinity, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, 0, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, 0, 50);
+ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, Infinity, 50);
+ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, 0, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, 0, 50, Infinity, 50);
+ctx.bezierCurveTo(Infinity, Infinity, 0, 50, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, 0, 50, 0, Infinity);
+ctx.bezierCurveTo(Infinity, 50, Infinity, 50, 0, 50);
+ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, 0, 50);
+ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, Infinity, 50);
+ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, 0, Infinity);
+ctx.bezierCurveTo(Infinity, 50, Infinity, 50, Infinity, 50);
+ctx.bezierCurveTo(Infinity, 50, Infinity, 50, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, 50, Infinity, 50, 0, Infinity);
+ctx.bezierCurveTo(Infinity, 50, 0, Infinity, 0, 50);
+ctx.bezierCurveTo(Infinity, 50, 0, Infinity, Infinity, 50);
+ctx.bezierCurveTo(Infinity, 50, 0, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, 50, 0, Infinity, 0, Infinity);
+ctx.bezierCurveTo(Infinity, 50, 0, 50, Infinity, 50);
+ctx.bezierCurveTo(Infinity, 50, 0, 50, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, 50, 0, 50, 0, Infinity);
+ctx.bezierCurveTo(0, Infinity, Infinity, 50, 0, 50);
+ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, 0, 50);
+ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.bezierCurveTo(0, Infinity, Infinity, 50, Infinity, 50);
+ctx.bezierCurveTo(0, Infinity, Infinity, 50, Infinity, Infinity);
+ctx.bezierCurveTo(0, Infinity, Infinity, 50, 0, Infinity);
+ctx.bezierCurveTo(0, Infinity, 0, Infinity, 0, 50);
+ctx.bezierCurveTo(0, Infinity, 0, Infinity, Infinity, 50);
+ctx.bezierCurveTo(0, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(0, Infinity, 0, Infinity, 0, Infinity);
+ctx.bezierCurveTo(0, Infinity, 0, 50, Infinity, 50);
+ctx.bezierCurveTo(0, Infinity, 0, 50, Infinity, Infinity);
+ctx.bezierCurveTo(0, Infinity, 0, 50, 0, Infinity);
+ctx.bezierCurveTo(0, 50, Infinity, Infinity, 0, 50);
+ctx.bezierCurveTo(0, 50, Infinity, Infinity, Infinity, 50);
+ctx.bezierCurveTo(0, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(0, 50, Infinity, Infinity, 0, Infinity);
+ctx.bezierCurveTo(0, 50, Infinity, 50, Infinity, 50);
+ctx.bezierCurveTo(0, 50, Infinity, 50, Infinity, Infinity);
+ctx.bezierCurveTo(0, 50, Infinity, 50, 0, Infinity);
+ctx.bezierCurveTo(0, 50, 0, Infinity, Infinity, 50);
+ctx.bezierCurveTo(0, 50, 0, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(0, 50, 0, Infinity, 0, Infinity);
+ctx.bezierCurveTo(0, 50, 0, 50, Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.worker.js
new file mode 100644
index 0000000..6b199dde
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.nonfinite.worker.js
@@ -0,0 +1,102 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.bezierCurveTo.nonfinite
+// Description:bezierCurveTo() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("bezierCurveTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.bezierCurveTo(Infinity, 50, 0, 50, 0, 50);
+ctx.bezierCurveTo(-Infinity, 50, 0, 50, 0, 50);
+ctx.bezierCurveTo(NaN, 50, 0, 50, 0, 50);
+ctx.bezierCurveTo(0, Infinity, 0, 50, 0, 50);
+ctx.bezierCurveTo(0, -Infinity, 0, 50, 0, 50);
+ctx.bezierCurveTo(0, NaN, 0, 50, 0, 50);
+ctx.bezierCurveTo(0, 50, Infinity, 50, 0, 50);
+ctx.bezierCurveTo(0, 50, -Infinity, 50, 0, 50);
+ctx.bezierCurveTo(0, 50, NaN, 50, 0, 50);
+ctx.bezierCurveTo(0, 50, 0, Infinity, 0, 50);
+ctx.bezierCurveTo(0, 50, 0, -Infinity, 0, 50);
+ctx.bezierCurveTo(0, 50, 0, NaN, 0, 50);
+ctx.bezierCurveTo(0, 50, 0, 50, Infinity, 50);
+ctx.bezierCurveTo(0, 50, 0, 50, -Infinity, 50);
+ctx.bezierCurveTo(0, 50, 0, 50, NaN, 50);
+ctx.bezierCurveTo(0, 50, 0, 50, 0, Infinity);
+ctx.bezierCurveTo(0, 50, 0, 50, 0, -Infinity);
+ctx.bezierCurveTo(0, 50, 0, 50, 0, NaN);
+ctx.bezierCurveTo(Infinity, Infinity, 0, 50, 0, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, 0, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, 0, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, Infinity, 50);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, Infinity, 50, 0, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, 0, 50);
+ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, Infinity, 50);
+ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, 0, Infinity, 0, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, 0, 50, Infinity, 50);
+ctx.bezierCurveTo(Infinity, Infinity, 0, 50, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, Infinity, 0, 50, 0, Infinity);
+ctx.bezierCurveTo(Infinity, 50, Infinity, 50, 0, 50);
+ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, 0, 50);
+ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, Infinity, 50);
+ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, 50, Infinity, Infinity, 0, Infinity);
+ctx.bezierCurveTo(Infinity, 50, Infinity, 50, Infinity, 50);
+ctx.bezierCurveTo(Infinity, 50, Infinity, 50, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, 50, Infinity, 50, 0, Infinity);
+ctx.bezierCurveTo(Infinity, 50, 0, Infinity, 0, 50);
+ctx.bezierCurveTo(Infinity, 50, 0, Infinity, Infinity, 50);
+ctx.bezierCurveTo(Infinity, 50, 0, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, 50, 0, Infinity, 0, Infinity);
+ctx.bezierCurveTo(Infinity, 50, 0, 50, Infinity, 50);
+ctx.bezierCurveTo(Infinity, 50, 0, 50, Infinity, Infinity);
+ctx.bezierCurveTo(Infinity, 50, 0, 50, 0, Infinity);
+ctx.bezierCurveTo(0, Infinity, Infinity, 50, 0, 50);
+ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, 0, 50);
+ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, Infinity, 50);
+ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(0, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.bezierCurveTo(0, Infinity, Infinity, 50, Infinity, 50);
+ctx.bezierCurveTo(0, Infinity, Infinity, 50, Infinity, Infinity);
+ctx.bezierCurveTo(0, Infinity, Infinity, 50, 0, Infinity);
+ctx.bezierCurveTo(0, Infinity, 0, Infinity, 0, 50);
+ctx.bezierCurveTo(0, Infinity, 0, Infinity, Infinity, 50);
+ctx.bezierCurveTo(0, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(0, Infinity, 0, Infinity, 0, Infinity);
+ctx.bezierCurveTo(0, Infinity, 0, 50, Infinity, 50);
+ctx.bezierCurveTo(0, Infinity, 0, 50, Infinity, Infinity);
+ctx.bezierCurveTo(0, Infinity, 0, 50, 0, Infinity);
+ctx.bezierCurveTo(0, 50, Infinity, Infinity, 0, 50);
+ctx.bezierCurveTo(0, 50, Infinity, Infinity, Infinity, 50);
+ctx.bezierCurveTo(0, 50, Infinity, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(0, 50, Infinity, Infinity, 0, Infinity);
+ctx.bezierCurveTo(0, 50, Infinity, 50, Infinity, 50);
+ctx.bezierCurveTo(0, 50, Infinity, 50, Infinity, Infinity);
+ctx.bezierCurveTo(0, 50, Infinity, 50, 0, Infinity);
+ctx.bezierCurveTo(0, 50, 0, Infinity, Infinity, 50);
+ctx.bezierCurveTo(0, 50, 0, Infinity, Infinity, Infinity);
+ctx.bezierCurveTo(0, 50, 0, Infinity, 0, Infinity);
+ctx.bezierCurveTo(0, 50, 0, 50, Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.html
new file mode 100644
index 0000000..2e96235
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.bezierCurveTo.scaled</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.bezierCurveTo.scaled</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(1000, 1000);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 0.055;
+ctx.beginPath();
+ctx.moveTo(-2, 3.1);
+ctx.bezierCurveTo(-2, -1, 2.1, -1, 2.1, 3.1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.worker.js
new file mode 100644
index 0000000..7c05de1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.scaled.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.bezierCurveTo.scaled
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(1000, 1000);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 0.055;
+ctx.beginPath();
+ctx.moveTo(-2, 3.1);
+ctx.bezierCurveTo(-2, -1, 2.1, -1, 2.1, 3.1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.html
new file mode 100644
index 0000000..c601b6ba5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.bezierCurveTo.shape</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.bezierCurveTo.shape</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 55;
+ctx.beginPath();
+ctx.moveTo(-2000, 3100);
+ctx.bezierCurveTo(-2000, -1000, 2100, -1000, 2100, 3100);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.worker.js
new file mode 100644
index 0000000..ebdeda14
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.bezierCurveTo.shape.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.bezierCurveTo.shape
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 55;
+ctx.beginPath();
+ctx.moveTo(-2000, 3100);
+ctx.bezierCurveTo(-2000, -1000, 2100, -1000, 2100, 3100);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.1.html
new file mode 100644
index 0000000..4d61e3d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.clip.basic.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.clip.basic.1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(0, 0, 100, 50);
+ctx.clip();
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.1.worker.js
new file mode 100644
index 0000000..391d745
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.clip.basic.1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(0, 0, 100, 50);
+ctx.clip();
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.2.html
new file mode 100644
index 0000000..4591f77
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.2.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.clip.basic.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.clip.basic.2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(-100, 0, 100, 50);
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.2.worker.js
new file mode 100644
index 0000000..965a328
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.basic.2.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.clip.basic.2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(-100, 0, 100, 50);
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.empty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.empty.html
new file mode 100644
index 0000000..39555a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.empty.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.clip.empty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.clip.empty</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.empty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.empty.worker.js
new file mode 100644
index 0000000..d22b27ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.empty.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.clip.empty
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.intersect.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.intersect.html
new file mode 100644
index 0000000..d7bc3bd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.intersect.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.clip.intersect</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.clip.intersect</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(0, 0, 50, 50);
+ctx.clip();
+ctx.beginPath();
+ctx.rect(50, 0, 50, 50)
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.intersect.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.intersect.worker.js
new file mode 100644
index 0000000..6dd021c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.intersect.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.clip.intersect
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(0, 0, 50, 50);
+ctx.clip();
+ctx.beginPath();
+ctx.rect(50, 0, 50, 50)
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.unaffected.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.unaffected.html
new file mode 100644
index 0000000..bf5d541
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.unaffected.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.clip.unaffected</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.clip.unaffected</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.clip();
+ctx.lineTo(0, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.unaffected.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.unaffected.worker.js
new file mode 100644
index 0000000..ce6bbd00
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.unaffected.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.clip.unaffected
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.beginPath();
+ctx.moveTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.clip();
+ctx.lineTo(0, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.1.html
new file mode 100644
index 0000000..bae8e94c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.1.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.clip.winding.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.clip.winding.1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.lineTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.1.worker.js
new file mode 100644
index 0000000..5865147c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.1.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.clip.winding.1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.lineTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.2.html
new file mode 100644
index 0000000..ec25689
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.2.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.clip.winding.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.clip.winding.2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.clip();
+ctx.beginPath();
+ctx.moveTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.lineTo(0, 0);
+ctx.clip();
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.2.worker.js
new file mode 100644
index 0000000..649c4346
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.clip.winding.2.worker.js
@@ -0,0 +1,38 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.clip.winding.2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.clip();
+ctx.beginPath();
+ctx.moveTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.lineTo(0, 0);
+ctx.clip();
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.empty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.empty.html
new file mode 100644
index 0000000..8cc5168d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.empty.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.closePath.empty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.closePath.empty</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.closePath();
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.empty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.empty.worker.js
new file mode 100644
index 0000000..be09fff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.empty.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.closePath.empty
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.closePath();
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.newline.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.newline.html
new file mode 100644
index 0000000..3f4f1839
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.newline.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.closePath.newline</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.closePath.newline</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.moveTo(-100, 25);
+ctx.lineTo(-100, -100);
+ctx.lineTo(200, -100);
+ctx.lineTo(200, 25);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.newline.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.newline.worker.js
new file mode 100644
index 0000000..04f3392
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.newline.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.closePath.newline
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.moveTo(-100, 25);
+ctx.lineTo(-100, -100);
+ctx.lineTo(200, -100);
+ctx.lineTo(200, 25);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.nextpoint.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.nextpoint.html
new file mode 100644
index 0000000..b30fbd6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.nextpoint.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.closePath.nextpoint</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.closePath.nextpoint</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.moveTo(-100, 25);
+ctx.lineTo(-100, -1000);
+ctx.closePath();
+ctx.lineTo(1000, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.nextpoint.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.nextpoint.worker.js
new file mode 100644
index 0000000..f590e76
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.closePath.nextpoint.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.closePath.nextpoint
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.moveTo(-100, 25);
+ctx.lineTo(-100, -1000);
+ctx.closePath();
+ctx.lineTo(1000, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.basic.html
new file mode 100644
index 0000000..e13ea6f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.basic.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.fill.closed.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.fill.closed.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.basic.worker.js
new file mode 100644
index 0000000..3d3c3c72
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.basic.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.fill.closed.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.html
new file mode 100644
index 0000000..7fdbe47
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.fill.closed.unaffected</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.fill.closed.unaffected</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#00f';
+ctx.fillRect(0, 0, 100, 50);
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.lineTo(100, 50);
+ctx.fillStyle = '#f00';
+ctx.fill();
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 90,10, 0,255,0,255, "90,10", "0,255,0,255");
+_assertPixel(offscreenCanvas, 10,40, 0,255,0,255, "10,40", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.worker.js
new file mode 100644
index 0000000..473dad6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.closed.unaffected.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.fill.closed.unaffected
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#00f';
+ctx.fillRect(0, 0, 100, 50);
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.lineTo(100, 50);
+ctx.fillStyle = '#f00';
+ctx.fill();
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 90,10, 0,255,0,255, "90,10", "0,255,0,255");
+_assertPixel(offscreenCanvas, 10,40, 0,255,0,255, "10,40", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.overlap.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.overlap.html
new file mode 100644
index 0000000..b8c6f2a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.overlap.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.fill.overlap</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.fill.overlap</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';
+ctx.rect(0, 0, 100, 50);
+ctx.closePath();
+ctx.rect(10, 10, 80, 30);
+ctx.fill();
+_assertPixelApprox(offscreenCanvas, 50,25, 0,127,0,255, "50,25", "0,127,0,255", 1);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.overlap.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.overlap.worker.js
new file mode 100644
index 0000000..5e5301b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.overlap.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.fill.overlap
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';
+ctx.rect(0, 0, 100, 50);
+ctx.closePath();
+ctx.rect(10, 10, 80, 30);
+ctx.fill();
+_assertPixelApprox(offscreenCanvas, 50,25, 0,127,0,255, "50,25", "0,127,0,255", 1);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.add.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.add.html
new file mode 100644
index 0000000..d01c5df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.add.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.fill.winding.add</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.fill.winding.add</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.lineTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.add.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.add.worker.js
new file mode 100644
index 0000000..37df3d5a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.add.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.fill.winding.add
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.lineTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.html
new file mode 100644
index 0000000..32afbf60
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.fill.winding.subtract.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.fill.winding.subtract.1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.lineTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.worker.js
new file mode 100644
index 0000000..37f6c711
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.1.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.fill.winding.subtract.1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.lineTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.html
new file mode 100644
index 0000000..3742632
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.fill.winding.subtract.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.fill.winding.subtract.2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.moveTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.worker.js
new file mode 100644
index 0000000..864cfd5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.2.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.fill.winding.subtract.2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.moveTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.html
new file mode 100644
index 0000000..693806a0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.fill.winding.subtract.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.fill.winding.subtract.3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.lineTo(-20, -20);
+ctx.lineTo(120, -20);
+ctx.lineTo(120, 70);
+ctx.lineTo(-20, 70);
+ctx.lineTo(-20, -20);
+ctx.lineTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.worker.js
new file mode 100644
index 0000000..276b0cb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.fill.winding.subtract.3.worker.js
@@ -0,0 +1,38 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.fill.winding.subtract.3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.moveTo(-10, -10);
+ctx.lineTo(110, -10);
+ctx.lineTo(110, 60);
+ctx.lineTo(-10, 60);
+ctx.lineTo(-10, -10);
+ctx.lineTo(-20, -20);
+ctx.lineTo(120, -20);
+ctx.lineTo(120, 70);
+ctx.lineTo(-20, 70);
+ctx.lineTo(-20, -20);
+ctx.lineTo(0, 0);
+ctx.lineTo(0, 50);
+ctx.lineTo(100, 50);
+ctx.lineTo(100, 0);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.initial.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.initial.html
new file mode 100644
index 0000000..d46744d00
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.initial.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.initial</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.initial</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.closePath();
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.initial.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.initial.worker.js
new file mode 100644
index 0000000..5856714
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.initial.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.initial
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.closePath();
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc-expected.txt
new file mode 100644
index 0000000..3511b338
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() works on arcs ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc.html
new file mode 100644
index 0000000..4558af1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.arc</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.arc</h1>
+<p class="desc">isPointInPath() works on arcs</p>
+
+
+<script>
+var t = async_test("isPointInPath() works on arcs");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.arc(50, 25, 10, 0, Math.PI, false);
+_assertSame(ctx.isPointInPath(50, 10), false, "ctx.isPointInPath(50, 10)", "false");
+_assertSame(ctx.isPointInPath(50, 20), false, "ctx.isPointInPath(50, 20)", "false");
+_assertSame(ctx.isPointInPath(50, 30), true, "ctx.isPointInPath(50, 30)", "true");
+_assertSame(ctx.isPointInPath(50, 40), false, "ctx.isPointInPath(50, 40)", "false");
+_assertSame(ctx.isPointInPath(30, 20), false, "ctx.isPointInPath(30, 20)", "false");
+_assertSame(ctx.isPointInPath(70, 20), false, "ctx.isPointInPath(70, 20)", "false");
+_assertSame(ctx.isPointInPath(30, 30), false, "ctx.isPointInPath(30, 30)", "false");
+_assertSame(ctx.isPointInPath(70, 30), false, "ctx.isPointInPath(70, 30)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc.worker.js
new file mode 100644
index 0000000..9a6e76e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.arc.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.arc
+// Description:isPointInPath() works on arcs
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() works on arcs");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.arc(50, 25, 10, 0, Math.PI, false);
+_assertSame(ctx.isPointInPath(50, 10), false, "ctx.isPointInPath(50, 10)", "false");
+_assertSame(ctx.isPointInPath(50, 20), false, "ctx.isPointInPath(50, 20)", "false");
+_assertSame(ctx.isPointInPath(50, 30), true, "ctx.isPointInPath(50, 30)", "true");
+_assertSame(ctx.isPointInPath(50, 40), false, "ctx.isPointInPath(50, 40)", "false");
+_assertSame(ctx.isPointInPath(30, 20), false, "ctx.isPointInPath(30, 20)", "false");
+_assertSame(ctx.isPointInPath(70, 20), false, "ctx.isPointInPath(70, 20)", "false");
+_assertSame(ctx.isPointInPath(30, 30), false, "ctx.isPointInPath(30, 30)", "false");
+_assertSame(ctx.isPointInPath(70, 30), false, "ctx.isPointInPath(70, 30)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1-expected.txt
new file mode 100644
index 0000000..951086a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() detects whether the point is inside the path ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.html
new file mode 100644
index 0000000..774ef76
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.basic.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.basic.1</h1>
+<p class="desc">isPointInPath() detects whether the point is inside the path</p>
+
+
+<script>
+var t = async_test("isPointInPath() detects whether the point is inside the path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(0, 0, 20, 20);
+_assertSame(ctx.isPointInPath(10, 10), true, "ctx.isPointInPath(10, 10)", "true");
+_assertSame(ctx.isPointInPath(30, 10), false, "ctx.isPointInPath(30, 10)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.worker.js
new file mode 100644
index 0000000..8e2fbee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.1.worker.js
@@ -0,0 +1,22 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.basic.1
+// Description:isPointInPath() detects whether the point is inside the path
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() detects whether the point is inside the path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(0, 0, 20, 20);
+_assertSame(ctx.isPointInPath(10, 10), true, "ctx.isPointInPath(10, 10)", "true");
+_assertSame(ctx.isPointInPath(30, 10), false, "ctx.isPointInPath(30, 10)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2-expected.txt
new file mode 100644
index 0000000..951086a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() detects whether the point is inside the path ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.html
new file mode 100644
index 0000000..9216c73
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.basic.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.basic.2</h1>
+<p class="desc">isPointInPath() detects whether the point is inside the path</p>
+
+
+<script>
+var t = async_test("isPointInPath() detects whether the point is inside the path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(20, 0, 20, 20);
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(30, 10), true, "ctx.isPointInPath(30, 10)", "true");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.worker.js
new file mode 100644
index 0000000..b2bf9410
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.basic.2.worker.js
@@ -0,0 +1,22 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.basic.2
+// Description:isPointInPath() detects whether the point is inside the path
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() detects whether the point is inside the path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(20, 0, 20, 20);
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(30, 10), true, "ctx.isPointInPath(30, 10)", "true");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier-expected.txt
new file mode 100644
index 0000000..38fa934
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() works on Bezier curves ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.html
new file mode 100644
index 0000000..51901846
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.bezier</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.bezier</h1>
+<p class="desc">isPointInPath() works on Bezier curves</p>
+
+
+<script>
+var t = async_test("isPointInPath() works on Bezier curves");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(25, 25);
+ctx.bezierCurveTo(50, -50, 50, 100, 75, 25);
+_assertSame(ctx.isPointInPath(25, 20), false, "ctx.isPointInPath(25, 20)", "false");
+_assertSame(ctx.isPointInPath(25, 30), false, "ctx.isPointInPath(25, 30)", "false");
+_assertSame(ctx.isPointInPath(30, 20), true, "ctx.isPointInPath(30, 20)", "true");
+_assertSame(ctx.isPointInPath(30, 30), false, "ctx.isPointInPath(30, 30)", "false");
+_assertSame(ctx.isPointInPath(40, 2), false, "ctx.isPointInPath(40, 2)", "false");
+_assertSame(ctx.isPointInPath(40, 20), true, "ctx.isPointInPath(40, 20)", "true");
+_assertSame(ctx.isPointInPath(40, 30), false, "ctx.isPointInPath(40, 30)", "false");
+_assertSame(ctx.isPointInPath(40, 47), false, "ctx.isPointInPath(40, 47)", "false");
+_assertSame(ctx.isPointInPath(45, 20), true, "ctx.isPointInPath(45, 20)", "true");
+_assertSame(ctx.isPointInPath(45, 30), false, "ctx.isPointInPath(45, 30)", "false");
+_assertSame(ctx.isPointInPath(55, 20), false, "ctx.isPointInPath(55, 20)", "false");
+_assertSame(ctx.isPointInPath(55, 30), true, "ctx.isPointInPath(55, 30)", "true");
+_assertSame(ctx.isPointInPath(60, 2), false, "ctx.isPointInPath(60, 2)", "false");
+_assertSame(ctx.isPointInPath(60, 20), false, "ctx.isPointInPath(60, 20)", "false");
+_assertSame(ctx.isPointInPath(60, 30), true, "ctx.isPointInPath(60, 30)", "true");
+_assertSame(ctx.isPointInPath(60, 47), false, "ctx.isPointInPath(60, 47)", "false");
+_assertSame(ctx.isPointInPath(70, 20), false, "ctx.isPointInPath(70, 20)", "false");
+_assertSame(ctx.isPointInPath(70, 30), true, "ctx.isPointInPath(70, 30)", "true");
+_assertSame(ctx.isPointInPath(75, 20), false, "ctx.isPointInPath(75, 20)", "false");
+_assertSame(ctx.isPointInPath(75, 30), false, "ctx.isPointInPath(75, 30)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.worker.js
new file mode 100644
index 0000000..5d2f9e0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bezier.worker.js
@@ -0,0 +1,41 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.bezier
+// Description:isPointInPath() works on Bezier curves
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() works on Bezier curves");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(25, 25);
+ctx.bezierCurveTo(50, -50, 50, 100, 75, 25);
+_assertSame(ctx.isPointInPath(25, 20), false, "ctx.isPointInPath(25, 20)", "false");
+_assertSame(ctx.isPointInPath(25, 30), false, "ctx.isPointInPath(25, 30)", "false");
+_assertSame(ctx.isPointInPath(30, 20), true, "ctx.isPointInPath(30, 20)", "true");
+_assertSame(ctx.isPointInPath(30, 30), false, "ctx.isPointInPath(30, 30)", "false");
+_assertSame(ctx.isPointInPath(40, 2), false, "ctx.isPointInPath(40, 2)", "false");
+_assertSame(ctx.isPointInPath(40, 20), true, "ctx.isPointInPath(40, 20)", "true");
+_assertSame(ctx.isPointInPath(40, 30), false, "ctx.isPointInPath(40, 30)", "false");
+_assertSame(ctx.isPointInPath(40, 47), false, "ctx.isPointInPath(40, 47)", "false");
+_assertSame(ctx.isPointInPath(45, 20), true, "ctx.isPointInPath(45, 20)", "true");
+_assertSame(ctx.isPointInPath(45, 30), false, "ctx.isPointInPath(45, 30)", "false");
+_assertSame(ctx.isPointInPath(55, 20), false, "ctx.isPointInPath(55, 20)", "false");
+_assertSame(ctx.isPointInPath(55, 30), true, "ctx.isPointInPath(55, 30)", "true");
+_assertSame(ctx.isPointInPath(60, 2), false, "ctx.isPointInPath(60, 2)", "false");
+_assertSame(ctx.isPointInPath(60, 20), false, "ctx.isPointInPath(60, 20)", "false");
+_assertSame(ctx.isPointInPath(60, 30), true, "ctx.isPointInPath(60, 30)", "true");
+_assertSame(ctx.isPointInPath(60, 47), false, "ctx.isPointInPath(60, 47)", "false");
+_assertSame(ctx.isPointInPath(70, 20), false, "ctx.isPointInPath(70, 20)", "false");
+_assertSame(ctx.isPointInPath(70, 30), true, "ctx.isPointInPath(70, 30)", "true");
+_assertSame(ctx.isPointInPath(75, 20), false, "ctx.isPointInPath(75, 20)", "false");
+_assertSame(ctx.isPointInPath(75, 30), false, "ctx.isPointInPath(75, 30)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc-expected.txt
new file mode 100644
index 0000000..17741c5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() works on unclosed arcs larger than 2pi ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.html
new file mode 100644
index 0000000..8703eef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.bigarc</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.bigarc</h1>
+<p class="desc">isPointInPath() works on unclosed arcs larger than 2pi</p>
+
+
+<script>
+var t = async_test("isPointInPath() works on unclosed arcs larger than 2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.arc(50, 25, 10, 0, 7, false);
+_assertSame(ctx.isPointInPath(50, 10), false, "ctx.isPointInPath(50, 10)", "false");
+_assertSame(ctx.isPointInPath(50, 20), true, "ctx.isPointInPath(50, 20)", "true");
+_assertSame(ctx.isPointInPath(50, 30), true, "ctx.isPointInPath(50, 30)", "true");
+_assertSame(ctx.isPointInPath(50, 40), false, "ctx.isPointInPath(50, 40)", "false");
+_assertSame(ctx.isPointInPath(30, 20), false, "ctx.isPointInPath(30, 20)", "false");
+_assertSame(ctx.isPointInPath(70, 20), false, "ctx.isPointInPath(70, 20)", "false");
+_assertSame(ctx.isPointInPath(30, 30), false, "ctx.isPointInPath(30, 30)", "false");
+_assertSame(ctx.isPointInPath(70, 30), false, "ctx.isPointInPath(70, 30)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.worker.js
new file mode 100644
index 0000000..974ff759
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.bigarc.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.bigarc
+// Description:isPointInPath() works on unclosed arcs larger than 2pi
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() works on unclosed arcs larger than 2pi");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.arc(50, 25, 10, 0, 7, false);
+_assertSame(ctx.isPointInPath(50, 10), false, "ctx.isPointInPath(50, 10)", "false");
+_assertSame(ctx.isPointInPath(50, 20), true, "ctx.isPointInPath(50, 20)", "true");
+_assertSame(ctx.isPointInPath(50, 30), true, "ctx.isPointInPath(50, 30)", "true");
+_assertSame(ctx.isPointInPath(50, 40), false, "ctx.isPointInPath(50, 40)", "false");
+_assertSame(ctx.isPointInPath(30, 20), false, "ctx.isPointInPath(30, 20)", "false");
+_assertSame(ctx.isPointInPath(70, 20), false, "ctx.isPointInPath(70, 20)", "false");
+_assertSame(ctx.isPointInPath(30, 30), false, "ctx.isPointInPath(30, 30)", "false");
+_assertSame(ctx.isPointInPath(70, 30), false, "ctx.isPointInPath(70, 30)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge-expected.txt
new file mode 100644
index 0000000..ccdc1d4a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() counts points on the path as being inside ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge.html
new file mode 100644
index 0000000..6d6d87d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.edge</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.edge</h1>
+<p class="desc">isPointInPath() counts points on the path as being inside</p>
+
+
+<script>
+var t = async_test("isPointInPath() counts points on the path as being inside");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(0, 0, 20, 20);
+_assertSame(ctx.isPointInPath(0, 0), true, "ctx.isPointInPath(0, 0)", "true");
+_assertSame(ctx.isPointInPath(10, 0), true, "ctx.isPointInPath(10, 0)", "true");
+_assertSame(ctx.isPointInPath(20, 0), true, "ctx.isPointInPath(20, 0)", "true");
+_assertSame(ctx.isPointInPath(20, 10), true, "ctx.isPointInPath(20, 10)", "true");
+_assertSame(ctx.isPointInPath(20, 20), true, "ctx.isPointInPath(20, 20)", "true");
+_assertSame(ctx.isPointInPath(10, 20), true, "ctx.isPointInPath(10, 20)", "true");
+_assertSame(ctx.isPointInPath(0, 20), true, "ctx.isPointInPath(0, 20)", "true");
+_assertSame(ctx.isPointInPath(0, 10), true, "ctx.isPointInPath(0, 10)", "true");
+_assertSame(ctx.isPointInPath(10, -0.01), false, "ctx.isPointInPath(10, -0.01)", "false");
+_assertSame(ctx.isPointInPath(10, 20.01), false, "ctx.isPointInPath(10, 20.01)", "false");
+_assertSame(ctx.isPointInPath(-0.01, 10), false, "ctx.isPointInPath(-0.01, 10)", "false");
+_assertSame(ctx.isPointInPath(20.01, 10), false, "ctx.isPointInPath(20.01, 10)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge.worker.js
new file mode 100644
index 0000000..8bf9b19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.edge.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.edge
+// Description:isPointInPath() counts points on the path as being inside
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() counts points on the path as being inside");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(0, 0, 20, 20);
+_assertSame(ctx.isPointInPath(0, 0), true, "ctx.isPointInPath(0, 0)", "true");
+_assertSame(ctx.isPointInPath(10, 0), true, "ctx.isPointInPath(10, 0)", "true");
+_assertSame(ctx.isPointInPath(20, 0), true, "ctx.isPointInPath(20, 0)", "true");
+_assertSame(ctx.isPointInPath(20, 10), true, "ctx.isPointInPath(20, 10)", "true");
+_assertSame(ctx.isPointInPath(20, 20), true, "ctx.isPointInPath(20, 20)", "true");
+_assertSame(ctx.isPointInPath(10, 20), true, "ctx.isPointInPath(10, 20)", "true");
+_assertSame(ctx.isPointInPath(0, 20), true, "ctx.isPointInPath(0, 20)", "true");
+_assertSame(ctx.isPointInPath(0, 10), true, "ctx.isPointInPath(0, 10)", "true");
+_assertSame(ctx.isPointInPath(10, -0.01), false, "ctx.isPointInPath(10, -0.01)", "false");
+_assertSame(ctx.isPointInPath(10, 20.01), false, "ctx.isPointInPath(10, 20.01)", "false");
+_assertSame(ctx.isPointInPath(-0.01, 10), false, "ctx.isPointInPath(-0.01, 10)", "false");
+_assertSame(ctx.isPointInPath(20.01, 10), false, "ctx.isPointInPath(20.01, 10)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty-expected.txt
new file mode 100644
index 0000000..c1767b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() works when there is no path ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty.html
new file mode 100644
index 0000000..9219d50
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.empty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.empty</h1>
+<p class="desc">isPointInPath() works when there is no path</p>
+
+
+<script>
+var t = async_test("isPointInPath() works when there is no path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.isPointInPath(0, 0), false, "ctx.isPointInPath(0, 0)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty.worker.js
new file mode 100644
index 0000000..82283840
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.empty.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.empty
+// Description:isPointInPath() works when there is no path
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() works when there is no path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.isPointInPath(0, 0), false, "ctx.isPointInPath(0, 0)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite-expected.txt
new file mode 100644
index 0000000..30668bc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() returns false for non-finite arguments ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.html
new file mode 100644
index 0000000..6e6bd2e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.nonfinite</h1>
+<p class="desc">isPointInPath() returns false for non-finite arguments</p>
+
+
+<script>
+var t = async_test("isPointInPath() returns false for non-finite arguments");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(-100, -50, 200, 100);
+_assertSame(ctx.isPointInPath(Infinity, 0), false, "ctx.isPointInPath(Infinity, 0)", "false");
+_assertSame(ctx.isPointInPath(-Infinity, 0), false, "ctx.isPointInPath(-Infinity, 0)", "false");
+_assertSame(ctx.isPointInPath(NaN, 0), false, "ctx.isPointInPath(NaN, 0)", "false");
+_assertSame(ctx.isPointInPath(0, Infinity), false, "ctx.isPointInPath(0, Infinity)", "false");
+_assertSame(ctx.isPointInPath(0, -Infinity), false, "ctx.isPointInPath(0, -Infinity)", "false");
+_assertSame(ctx.isPointInPath(0, NaN), false, "ctx.isPointInPath(0, NaN)", "false");
+_assertSame(ctx.isPointInPath(NaN, NaN), false, "ctx.isPointInPath(NaN, NaN)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.worker.js
new file mode 100644
index 0000000..91c2d36
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.nonfinite.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.nonfinite
+// Description:isPointInPath() returns false for non-finite arguments
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() returns false for non-finite arguments");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(-100, -50, 200, 100);
+_assertSame(ctx.isPointInPath(Infinity, 0), false, "ctx.isPointInPath(Infinity, 0)", "false");
+_assertSame(ctx.isPointInPath(-Infinity, 0), false, "ctx.isPointInPath(-Infinity, 0)", "false");
+_assertSame(ctx.isPointInPath(NaN, 0), false, "ctx.isPointInPath(NaN, 0)", "false");
+_assertSame(ctx.isPointInPath(0, Infinity), false, "ctx.isPointInPath(0, Infinity)", "false");
+_assertSame(ctx.isPointInPath(0, -Infinity), false, "ctx.isPointInPath(0, -Infinity)", "false");
+_assertSame(ctx.isPointInPath(0, NaN), false, "ctx.isPointInPath(0, NaN)", "false");
+_assertSame(ctx.isPointInPath(NaN, NaN), false, "ctx.isPointInPath(NaN, NaN)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside-expected.txt
new file mode 100644
index 0000000..9d7e392
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() works on paths outside the canvas ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside.html
new file mode 100644
index 0000000..c3175989
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.outside</h1>
+<p class="desc">isPointInPath() works on paths outside the canvas</p>
+
+
+<script>
+var t = async_test("isPointInPath() works on paths outside the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(0, -100, 20, 20);
+ctx.rect(20, -10, 20, 20);
+_assertSame(ctx.isPointInPath(10, -110), false, "ctx.isPointInPath(10, -110)", "false");
+_assertSame(ctx.isPointInPath(10, -90), true, "ctx.isPointInPath(10, -90)", "true");
+_assertSame(ctx.isPointInPath(10, -70), false, "ctx.isPointInPath(10, -70)", "false");
+_assertSame(ctx.isPointInPath(30, -20), false, "ctx.isPointInPath(30, -20)", "false");
+_assertSame(ctx.isPointInPath(30, 0), true, "ctx.isPointInPath(30, 0)", "true");
+_assertSame(ctx.isPointInPath(30, 20), false, "ctx.isPointInPath(30, 20)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside.worker.js
new file mode 100644
index 0000000..11b81d2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.outside.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.outside
+// Description:isPointInPath() works on paths outside the canvas
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() works on paths outside the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(0, -100, 20, 20);
+ctx.rect(20, -10, 20, 20);
+_assertSame(ctx.isPointInPath(10, -110), false, "ctx.isPointInPath(10, -110)", "false");
+_assertSame(ctx.isPointInPath(10, -90), true, "ctx.isPointInPath(10, -90)", "true");
+_assertSame(ctx.isPointInPath(10, -70), false, "ctx.isPointInPath(10, -70)", "false");
+_assertSame(ctx.isPointInPath(30, -20), false, "ctx.isPointInPath(30, -20)", "false");
+_assertSame(ctx.isPointInPath(30, 0), true, "ctx.isPointInPath(30, 0)", "true");
+_assertSame(ctx.isPointInPath(30, 20), false, "ctx.isPointInPath(30, 20)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath-expected.txt
new file mode 100644
index 0000000..c835feb6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() uses the current path, not just the subpath ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.html
new file mode 100644
index 0000000..ddf7b279
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.subpath</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.subpath</h1>
+<p class="desc">isPointInPath() uses the current path, not just the subpath</p>
+
+
+<script>
+var t = async_test("isPointInPath() uses the current path, not just the subpath");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(0, 0, 20, 20);
+ctx.beginPath();
+ctx.rect(20, 0, 20, 20);
+ctx.closePath();
+ctx.rect(40, 0, 20, 20);
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(30, 10), true, "ctx.isPointInPath(30, 10)", "true");
+_assertSame(ctx.isPointInPath(50, 10), true, "ctx.isPointInPath(50, 10)", "true");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.worker.js
new file mode 100644
index 0000000..a453c805
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.subpath.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.subpath
+// Description:isPointInPath() uses the current path, not just the subpath
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() uses the current path, not just the subpath");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(0, 0, 20, 20);
+ctx.beginPath();
+ctx.rect(20, 0, 20, 20);
+ctx.closePath();
+ctx.rect(40, 0, 20, 20);
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(30, 10), true, "ctx.isPointInPath(30, 10)", "true");
+_assertSame(ctx.isPointInPath(50, 10), true, "ctx.isPointInPath(50, 10)", "true");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1-expected.txt
new file mode 100644
index 0000000..8d716b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() handles transformations correctly ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.html
new file mode 100644
index 0000000..a1e8766
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.transform.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.transform.1</h1>
+<p class="desc">isPointInPath() handles transformations correctly</p>
+
+
+<script>
+var t = async_test("isPointInPath() handles transformations correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.translate(50, 0);
+ctx.rect(0, 0, 20, 20);
+_assertSame(ctx.isPointInPath(-40, 10), false, "ctx.isPointInPath(-40, 10)", "false");
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(49, 10), false, "ctx.isPointInPath(49, 10)", "false");
+_assertSame(ctx.isPointInPath(51, 10), true, "ctx.isPointInPath(51, 10)", "true");
+_assertSame(ctx.isPointInPath(69, 10), true, "ctx.isPointInPath(69, 10)", "true");
+_assertSame(ctx.isPointInPath(71, 10), false, "ctx.isPointInPath(71, 10)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.worker.js
new file mode 100644
index 0000000..bebc6d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.transform.1
+// Description:isPointInPath() handles transformations correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() handles transformations correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.translate(50, 0);
+ctx.rect(0, 0, 20, 20);
+_assertSame(ctx.isPointInPath(-40, 10), false, "ctx.isPointInPath(-40, 10)", "false");
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(49, 10), false, "ctx.isPointInPath(49, 10)", "false");
+_assertSame(ctx.isPointInPath(51, 10), true, "ctx.isPointInPath(51, 10)", "true");
+_assertSame(ctx.isPointInPath(69, 10), true, "ctx.isPointInPath(69, 10)", "true");
+_assertSame(ctx.isPointInPath(71, 10), false, "ctx.isPointInPath(71, 10)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2-expected.txt
new file mode 100644
index 0000000..8d716b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() handles transformations correctly ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.html
new file mode 100644
index 0000000..1995295f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.transform.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.transform.2</h1>
+<p class="desc">isPointInPath() handles transformations correctly</p>
+
+
+<script>
+var t = async_test("isPointInPath() handles transformations correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(50, 0, 20, 20);
+ctx.translate(50, 0);
+_assertSame(ctx.isPointInPath(-40, 10), false, "ctx.isPointInPath(-40, 10)", "false");
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(49, 10), false, "ctx.isPointInPath(49, 10)", "false");
+_assertSame(ctx.isPointInPath(51, 10), true, "ctx.isPointInPath(51, 10)", "true");
+_assertSame(ctx.isPointInPath(69, 10), true, "ctx.isPointInPath(69, 10)", "true");
+_assertSame(ctx.isPointInPath(71, 10), false, "ctx.isPointInPath(71, 10)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.worker.js
new file mode 100644
index 0000000..a092cb9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.2.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.transform.2
+// Description:isPointInPath() handles transformations correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() handles transformations correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.rect(50, 0, 20, 20);
+ctx.translate(50, 0);
+_assertSame(ctx.isPointInPath(-40, 10), false, "ctx.isPointInPath(-40, 10)", "false");
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(49, 10), false, "ctx.isPointInPath(49, 10)", "false");
+_assertSame(ctx.isPointInPath(51, 10), true, "ctx.isPointInPath(51, 10)", "true");
+_assertSame(ctx.isPointInPath(69, 10), true, "ctx.isPointInPath(69, 10)", "true");
+_assertSame(ctx.isPointInPath(71, 10), false, "ctx.isPointInPath(71, 10)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3-expected.txt
new file mode 100644
index 0000000..8d716b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() handles transformations correctly ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.html
new file mode 100644
index 0000000..b43e104
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.transform.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.transform.3</h1>
+<p class="desc">isPointInPath() handles transformations correctly</p>
+
+
+<script>
+var t = async_test("isPointInPath() handles transformations correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.scale(-1, 1);
+ctx.rect(-70, 0, 20, 20);
+_assertSame(ctx.isPointInPath(-40, 10), false, "ctx.isPointInPath(-40, 10)", "false");
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(49, 10), false, "ctx.isPointInPath(49, 10)", "false");
+_assertSame(ctx.isPointInPath(51, 10), true, "ctx.isPointInPath(51, 10)", "true");
+_assertSame(ctx.isPointInPath(69, 10), true, "ctx.isPointInPath(69, 10)", "true");
+_assertSame(ctx.isPointInPath(71, 10), false, "ctx.isPointInPath(71, 10)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.worker.js
new file mode 100644
index 0000000..cd244a6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.3.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.transform.3
+// Description:isPointInPath() handles transformations correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() handles transformations correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.scale(-1, 1);
+ctx.rect(-70, 0, 20, 20);
+_assertSame(ctx.isPointInPath(-40, 10), false, "ctx.isPointInPath(-40, 10)", "false");
+_assertSame(ctx.isPointInPath(10, 10), false, "ctx.isPointInPath(10, 10)", "false");
+_assertSame(ctx.isPointInPath(49, 10), false, "ctx.isPointInPath(49, 10)", "false");
+_assertSame(ctx.isPointInPath(51, 10), true, "ctx.isPointInPath(51, 10)", "true");
+_assertSame(ctx.isPointInPath(69, 10), true, "ctx.isPointInPath(69, 10)", "true");
+_assertSame(ctx.isPointInPath(71, 10), false, "ctx.isPointInPath(71, 10)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4-expected.txt
new file mode 100644
index 0000000..8d716b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() handles transformations correctly ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.html
new file mode 100644
index 0000000..e7956240
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.transform.4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.transform.4</h1>
+<p class="desc">isPointInPath() handles transformations correctly</p>
+
+
+<script>
+var t = async_test("isPointInPath() handles transformations correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.translate(50, 0);
+ctx.rect(50, 0, 20, 20);
+ctx.translate(0, 50);
+_assertSame(ctx.isPointInPath(60, 10), false, "ctx.isPointInPath(60, 10)", "false");
+_assertSame(ctx.isPointInPath(110, 10), true, "ctx.isPointInPath(110, 10)", "true");
+_assertSame(ctx.isPointInPath(110, 60), false, "ctx.isPointInPath(110, 60)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.worker.js
new file mode 100644
index 0000000..6ec20136
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.transform.4.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.transform.4
+// Description:isPointInPath() handles transformations correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() handles transformations correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.translate(50, 0);
+ctx.rect(50, 0, 20, 20);
+ctx.translate(0, 50);
+_assertSame(ctx.isPointInPath(60, 10), false, "ctx.isPointInPath(60, 10)", "false");
+_assertSame(ctx.isPointInPath(110, 10), true, "ctx.isPointInPath(110, 10)", "true");
+_assertSame(ctx.isPointInPath(110, 60), false, "ctx.isPointInPath(110, 60)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed-expected.txt
new file mode 100644
index 0000000..742ec21
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() works on unclosed subpaths ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.html
new file mode 100644
index 0000000..f05a39d7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.unclosed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.unclosed</h1>
+<p class="desc">isPointInPath() works on unclosed subpaths</p>
+
+
+<script>
+var t = async_test("isPointInPath() works on unclosed subpaths");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(20, 0);
+ctx.lineTo(20, 20);
+ctx.lineTo(0, 20);
+_assertSame(ctx.isPointInPath(10, 10), true, "ctx.isPointInPath(10, 10)", "true");
+_assertSame(ctx.isPointInPath(30, 10), false, "ctx.isPointInPath(30, 10)", "false");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.worker.js
new file mode 100644
index 0000000..316e791
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.unclosed.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.unclosed
+// Description:isPointInPath() works on unclosed subpaths
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() works on unclosed subpaths");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(20, 0);
+ctx.lineTo(20, 20);
+ctx.lineTo(0, 20);
+_assertSame(ctx.isPointInPath(10, 10), true, "ctx.isPointInPath(10, 10)", "true");
+_assertSame(ctx.isPointInPath(30, 10), false, "ctx.isPointInPath(30, 10)", "false");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding-expected.txt
new file mode 100644
index 0000000..de472c7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL isPointInPath() uses the non-zero winding number rule ctx.isPointInPath is not a function
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding.html
new file mode 100644
index 0000000..8b0e07f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.isPointInPath.winding</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.isPointInPath.winding</h1>
+<p class="desc">isPointInPath() uses the non-zero winding number rule</p>
+
+
+<script>
+var t = async_test("isPointInPath() uses the non-zero winding number rule");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Create a square ring, using opposite windings to make a hole in the centre
+ctx.moveTo(0, 0);
+ctx.lineTo(50, 0);
+ctx.lineTo(50, 50);
+ctx.lineTo(0, 50);
+ctx.lineTo(0, 0);
+ctx.lineTo(10, 10);
+ctx.lineTo(10, 40);
+ctx.lineTo(40, 40);
+ctx.lineTo(40, 10);
+ctx.lineTo(10, 10);
+_assertSame(ctx.isPointInPath(5, 5), true, "ctx.isPointInPath(5, 5)", "true");
+_assertSame(ctx.isPointInPath(25, 5), true, "ctx.isPointInPath(25, 5)", "true");
+_assertSame(ctx.isPointInPath(45, 5), true, "ctx.isPointInPath(45, 5)", "true");
+_assertSame(ctx.isPointInPath(5, 25), true, "ctx.isPointInPath(5, 25)", "true");
+_assertSame(ctx.isPointInPath(25, 25), false, "ctx.isPointInPath(25, 25)", "false");
+_assertSame(ctx.isPointInPath(45, 25), true, "ctx.isPointInPath(45, 25)", "true");
+_assertSame(ctx.isPointInPath(5, 45), true, "ctx.isPointInPath(5, 45)", "true");
+_assertSame(ctx.isPointInPath(25, 45), true, "ctx.isPointInPath(25, 45)", "true");
+_assertSame(ctx.isPointInPath(45, 45), true, "ctx.isPointInPath(45, 45)", "true");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding.worker.js
new file mode 100644
index 0000000..fde0a17
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.isPointInPath.winding.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.isPointInPath.winding
+// Description:isPointInPath() uses the non-zero winding number rule
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("isPointInPath() uses the non-zero winding number rule");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Create a square ring, using opposite windings to make a hole in the centre
+ctx.moveTo(0, 0);
+ctx.lineTo(50, 0);
+ctx.lineTo(50, 50);
+ctx.lineTo(0, 50);
+ctx.lineTo(0, 0);
+ctx.lineTo(10, 10);
+ctx.lineTo(10, 40);
+ctx.lineTo(40, 40);
+ctx.lineTo(40, 10);
+ctx.lineTo(10, 10);
+_assertSame(ctx.isPointInPath(5, 5), true, "ctx.isPointInPath(5, 5)", "true");
+_assertSame(ctx.isPointInPath(25, 5), true, "ctx.isPointInPath(25, 5)", "true");
+_assertSame(ctx.isPointInPath(45, 5), true, "ctx.isPointInPath(45, 5)", "true");
+_assertSame(ctx.isPointInPath(5, 25), true, "ctx.isPointInPath(5, 25)", "true");
+_assertSame(ctx.isPointInPath(25, 25), false, "ctx.isPointInPath(25, 25)", "false");
+_assertSame(ctx.isPointInPath(45, 25), true, "ctx.isPointInPath(45, 25)", "true");
+_assertSame(ctx.isPointInPath(5, 45), true, "ctx.isPointInPath(5, 45)", "true");
+_assertSame(ctx.isPointInPath(25, 45), true, "ctx.isPointInPath(25, 45)", "true");
+_assertSame(ctx.isPointInPath(45, 45), true, "ctx.isPointInPath(45, 45)", "true");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.basic.html
new file mode 100644
index 0000000..fe4ffec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.basic.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.lineTo.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.lineTo.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.basic.worker.js
new file mode 100644
index 0000000..c070975
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.basic.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.lineTo.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.html
new file mode 100644
index 0000000..9216819
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.lineTo.ensuresubpath.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.lineTo.ensuresubpath.1</h1>
+<p class="desc">If there is no subpath, the point is added and nothing is drawn</p>
+
+
+<script>
+var t = async_test("If there is no subpath, the point is added and nothing is drawn");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.lineTo(100, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.worker.js
new file mode 100644
index 0000000..701ffdd4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.lineTo.ensuresubpath.1
+// Description:If there is no subpath, the point is added and nothing is drawn
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("If there is no subpath, the point is added and nothing is drawn");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.lineTo(100, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.html
new file mode 100644
index 0000000..fb9b04d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.lineTo.ensuresubpath.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.lineTo.ensuresubpath.2</h1>
+<p class="desc">If there is no subpath, the point is added and used for subsequent drawing</p>
+
+
+<script>
+var t = async_test("If there is no subpath, the point is added and used for subsequent drawing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.lineTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.worker.js
new file mode 100644
index 0000000..699e4404
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.ensuresubpath.2.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.lineTo.ensuresubpath.2
+// Description:If there is no subpath, the point is added and used for subsequent drawing
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("If there is no subpath, the point is added and used for subsequent drawing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.lineTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.html
new file mode 100644
index 0000000..05768c0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.lineTo.nextpoint</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.lineTo.nextpoint</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(-100, -100);
+ctx.lineTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.worker.js
new file mode 100644
index 0000000..2262b8bc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nextpoint.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.lineTo.nextpoint
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(-100, -100);
+ctx.lineTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.html
new file mode 100644
index 0000000..4ea20937
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.lineTo.nonfinite.details</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.lineTo.nonfinite.details</h1>
+<p class="desc">lineTo() with Infinity/NaN for first arg still converts the second arg</p>
+
+
+<script>
+var t = async_test("lineTo() with Infinity/NaN for first arg still converts the second arg");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+for (var arg1 of [Infinity, -Infinity, NaN]) {
+  var converted = false;
+  ctx.lineTo(arg1, { valueOf: function() { converted = true; return 0; } });
+  _assert(converted, "converted");
+}
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.worker.js
new file mode 100644
index 0000000..13d615306
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.details.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.lineTo.nonfinite.details
+// Description:lineTo() with Infinity/NaN for first arg still converts the second arg
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineTo() with Infinity/NaN for first arg still converts the second arg");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+for (var arg1 of [Infinity, -Infinity, NaN]) {
+  var converted = false;
+  ctx.lineTo(arg1, { valueOf: function() { converted = true; return 0; } });
+  _assert(converted, "converted");
+}
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.html
new file mode 100644
index 0000000..8dd773e8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.lineTo.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.lineTo.nonfinite</h1>
+<p class="desc">lineTo() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("lineTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.lineTo(Infinity, 50);
+ctx.lineTo(-Infinity, 50);
+ctx.lineTo(NaN, 50);
+ctx.lineTo(0, Infinity);
+ctx.lineTo(0, -Infinity);
+ctx.lineTo(0, NaN);
+ctx.lineTo(Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.worker.js
new file mode 100644
index 0000000..4f97b9b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.lineTo.nonfinite.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.lineTo.nonfinite
+// Description:lineTo() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("lineTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.lineTo(Infinity, 50);
+ctx.lineTo(-Infinity, 50);
+ctx.lineTo(NaN, 50);
+ctx.lineTo(0, Infinity);
+ctx.lineTo(0, -Infinity);
+ctx.lineTo(0, NaN);
+ctx.lineTo(Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.basic.html
new file mode 100644
index 0000000..36e14ac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.basic.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.moveTo.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.moveTo.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rect(0, 0, 10, 50);
+ctx.moveTo(100, 0);
+ctx.lineTo(10, 0);
+ctx.lineTo(10, 50);
+ctx.lineTo(100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 90,25, 0,255,0,255, "90,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.basic.worker.js
new file mode 100644
index 0000000..d4b928a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.basic.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.moveTo.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rect(0, 0, 10, 50);
+ctx.moveTo(100, 0);
+ctx.lineTo(10, 0);
+ctx.lineTo(10, 50);
+ctx.lineTo(100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 90,25, 0,255,0,255, "90,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.multiple.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.multiple.html
new file mode 100644
index 0000000..41f45143
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.multiple.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.moveTo.multiple</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.moveTo.multiple</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.moveTo(0, 25);
+ctx.moveTo(100, 25);
+ctx.moveTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.multiple.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.multiple.worker.js
new file mode 100644
index 0000000..7d648849
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.multiple.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.moveTo.multiple
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.moveTo(0, 25);
+ctx.moveTo(100, 25);
+ctx.moveTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.html
new file mode 100644
index 0000000..390a26154
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.moveTo.newsubpath</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.moveTo.newsubpath</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.moveTo(0, 0);
+ctx.moveTo(100, 0);
+ctx.moveTo(100, 50);
+ctx.moveTo(0, 50);
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.worker.js
new file mode 100644
index 0000000..3dac608
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.newsubpath.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.moveTo.newsubpath
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.moveTo(0, 0);
+ctx.moveTo(100, 0);
+ctx.moveTo(100, 50);
+ctx.moveTo(0, 50);
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.html
new file mode 100644
index 0000000..100259a4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.moveTo.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.moveTo.nonfinite</h1>
+<p class="desc">moveTo() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("moveTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.moveTo(Infinity, 50);
+ctx.moveTo(-Infinity, 50);
+ctx.moveTo(NaN, 50);
+ctx.moveTo(0, Infinity);
+ctx.moveTo(0, -Infinity);
+ctx.moveTo(0, NaN);
+ctx.moveTo(Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.worker.js
new file mode 100644
index 0000000..84d8972
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.moveTo.nonfinite.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.moveTo.nonfinite
+// Description:moveTo() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("moveTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.moveTo(Infinity, 50);
+ctx.moveTo(-Infinity, 50);
+ctx.moveTo(NaN, 50);
+ctx.moveTo(0, Infinity);
+ctx.moveTo(0, -Infinity);
+ctx.moveTo(0, NaN);
+ctx.moveTo(Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.html
new file mode 100644
index 0000000..957b890
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.quadraticCurveTo.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.quadraticCurveTo.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.quadraticCurveTo(100, 25, 100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.worker.js
new file mode 100644
index 0000000..d074dfa5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.basic.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.quadraticCurveTo.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.moveTo(0, 25);
+ctx.quadraticCurveTo(100, 25, 100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.html
new file mode 100644
index 0000000..8f3c10f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.quadraticCurveTo.ensuresubpath.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.quadraticCurveTo.ensuresubpath.1</h1>
+<p class="desc">If there is no subpath, the first control point is added (and nothing is drawn up to it)</p>
+
+
+<script>
+var t = async_test("If there is no subpath, the first control point is added (and nothing is drawn up to it)");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.quadraticCurveTo(100, 50, 200, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 95,45, 0,255,0,255, "95,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.worker.js
new file mode 100644
index 0000000..67b0bb2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.1.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.quadraticCurveTo.ensuresubpath.1
+// Description:If there is no subpath, the first control point is added (and nothing is drawn up to it)
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("If there is no subpath, the first control point is added (and nothing is drawn up to it)");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.quadraticCurveTo(100, 50, 200, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 95,45, 0,255,0,255, "95,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.html
new file mode 100644
index 0000000..0a61ecd8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.quadraticCurveTo.ensuresubpath.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.quadraticCurveTo.ensuresubpath.2</h1>
+<p class="desc">If there is no subpath, the first control point is added</p>
+
+
+<script>
+var t = async_test("If there is no subpath, the first control point is added");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.quadraticCurveTo(0, 25, 100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 5,45, 0,255,0,255, "5,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.worker.js
new file mode 100644
index 0000000..a8b87cc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.ensuresubpath.2.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.quadraticCurveTo.ensuresubpath.2
+// Description:If there is no subpath, the first control point is added
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("If there is no subpath, the first control point is added");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.beginPath();
+ctx.quadraticCurveTo(0, 25, 100, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 5,45, 0,255,0,255, "5,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.html
new file mode 100644
index 0000000..9806ca08
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.quadraticCurveTo.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.quadraticCurveTo.nonfinite</h1>
+<p class="desc">quadraticCurveTo() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("quadraticCurveTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.quadraticCurveTo(Infinity, 50, 0, 50);
+ctx.quadraticCurveTo(-Infinity, 50, 0, 50);
+ctx.quadraticCurveTo(NaN, 50, 0, 50);
+ctx.quadraticCurveTo(0, Infinity, 0, 50);
+ctx.quadraticCurveTo(0, -Infinity, 0, 50);
+ctx.quadraticCurveTo(0, NaN, 0, 50);
+ctx.quadraticCurveTo(0, 50, Infinity, 50);
+ctx.quadraticCurveTo(0, 50, -Infinity, 50);
+ctx.quadraticCurveTo(0, 50, NaN, 50);
+ctx.quadraticCurveTo(0, 50, 0, Infinity);
+ctx.quadraticCurveTo(0, 50, 0, -Infinity);
+ctx.quadraticCurveTo(0, 50, 0, NaN);
+ctx.quadraticCurveTo(Infinity, Infinity, 0, 50);
+ctx.quadraticCurveTo(Infinity, Infinity, Infinity, 50);
+ctx.quadraticCurveTo(Infinity, Infinity, Infinity, Infinity);
+ctx.quadraticCurveTo(Infinity, Infinity, 0, Infinity);
+ctx.quadraticCurveTo(Infinity, 50, Infinity, 50);
+ctx.quadraticCurveTo(Infinity, 50, Infinity, Infinity);
+ctx.quadraticCurveTo(Infinity, 50, 0, Infinity);
+ctx.quadraticCurveTo(0, Infinity, Infinity, 50);
+ctx.quadraticCurveTo(0, Infinity, Infinity, Infinity);
+ctx.quadraticCurveTo(0, Infinity, 0, Infinity);
+ctx.quadraticCurveTo(0, 50, Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.worker.js
new file mode 100644
index 0000000..4841053
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.nonfinite.worker.js
@@ -0,0 +1,50 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.quadraticCurveTo.nonfinite
+// Description:quadraticCurveTo() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("quadraticCurveTo() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.quadraticCurveTo(Infinity, 50, 0, 50);
+ctx.quadraticCurveTo(-Infinity, 50, 0, 50);
+ctx.quadraticCurveTo(NaN, 50, 0, 50);
+ctx.quadraticCurveTo(0, Infinity, 0, 50);
+ctx.quadraticCurveTo(0, -Infinity, 0, 50);
+ctx.quadraticCurveTo(0, NaN, 0, 50);
+ctx.quadraticCurveTo(0, 50, Infinity, 50);
+ctx.quadraticCurveTo(0, 50, -Infinity, 50);
+ctx.quadraticCurveTo(0, 50, NaN, 50);
+ctx.quadraticCurveTo(0, 50, 0, Infinity);
+ctx.quadraticCurveTo(0, 50, 0, -Infinity);
+ctx.quadraticCurveTo(0, 50, 0, NaN);
+ctx.quadraticCurveTo(Infinity, Infinity, 0, 50);
+ctx.quadraticCurveTo(Infinity, Infinity, Infinity, 50);
+ctx.quadraticCurveTo(Infinity, Infinity, Infinity, Infinity);
+ctx.quadraticCurveTo(Infinity, Infinity, 0, Infinity);
+ctx.quadraticCurveTo(Infinity, 50, Infinity, 50);
+ctx.quadraticCurveTo(Infinity, 50, Infinity, Infinity);
+ctx.quadraticCurveTo(Infinity, 50, 0, Infinity);
+ctx.quadraticCurveTo(0, Infinity, Infinity, 50);
+ctx.quadraticCurveTo(0, Infinity, Infinity, Infinity);
+ctx.quadraticCurveTo(0, Infinity, 0, Infinity);
+ctx.quadraticCurveTo(0, 50, Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.html
new file mode 100644
index 0000000..9d1ec4f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.quadraticCurveTo.scaled</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.quadraticCurveTo.scaled</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(1000, 1000);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 0.055;
+ctx.beginPath();
+ctx.moveTo(-1, 1.05);
+ctx.quadraticCurveTo(0, -1, 1.2, 1.05);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.worker.js
new file mode 100644
index 0000000..2e4106ed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.scaled.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.quadraticCurveTo.scaled
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(1000, 1000);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 0.055;
+ctx.beginPath();
+ctx.moveTo(-1, 1.05);
+ctx.quadraticCurveTo(0, -1, 1.2, 1.05);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.html
new file mode 100644
index 0000000..40e454a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.quadraticCurveTo.shape</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.quadraticCurveTo.shape</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 55;
+ctx.beginPath();
+ctx.moveTo(-1000, 1050);
+ctx.quadraticCurveTo(0, -1000, 1200, 1050);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.worker.js
new file mode 100644
index 0000000..e8710f9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.quadraticCurveTo.shape.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.quadraticCurveTo.shape
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 55;
+ctx.beginPath();
+ctx.moveTo(-1000, 1050);
+ctx.quadraticCurveTo(0, -1000, 1200, 1050);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.basic.html
new file mode 100644
index 0000000..059668a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.basic.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.rect(0, 0, 100, 50);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.basic.worker.js
new file mode 100644
index 0000000..abcacad5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.basic.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.rect(0, 0, 100, 50);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.closed.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.closed.html
new file mode 100644
index 0000000..943d7c9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.closed.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.closed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.closed</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.rect(100, 50, 100, 100);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.closed.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.closed.worker.js
new file mode 100644
index 0000000..9a2b7e5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.closed.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.closed
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.rect(100, 50, 100, 100);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.1.html
new file mode 100644
index 0000000..b44c6a8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.end.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.end.1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.rect(200, 100, 400, 1000);
+ctx.lineTo(-2000, -1000);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.1.worker.js
new file mode 100644
index 0000000..72b2d8a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.end.1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.rect(200, 100, 400, 1000);
+ctx.lineTo(-2000, -1000);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.2.html
new file mode 100644
index 0000000..a48b27d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.2.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.end.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.end.2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 450;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'bevel';
+ctx.rect(150, 150, 2000, 2000);
+ctx.lineTo(160, 160);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.2.worker.js
new file mode 100644
index 0000000..a971874
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.end.2.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.end.2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 450;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'bevel';
+ctx.rect(150, 150, 2000, 2000);
+ctx.lineTo(160, 160);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.negative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.negative.html
new file mode 100644
index 0000000..55edbab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.negative.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.negative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.negative</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.fillStyle = '#0f0';
+ctx.rect(0, 0, 50, 25);
+ctx.rect(100, 0, -50, 25);
+ctx.rect(0, 50, 50, -25);
+ctx.rect(100, 50, -50, -25);
+ctx.fill();
+_assertPixel(offscreenCanvas, 25,12, 0,255,0,255, "25,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,12, 0,255,0,255, "75,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,37, 0,255,0,255, "25,37", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,37, 0,255,0,255, "75,37", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.negative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.negative.worker.js
new file mode 100644
index 0000000..4ee0b730
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.negative.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.negative
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.fillStyle = '#0f0';
+ctx.rect(0, 0, 50, 25);
+ctx.rect(100, 0, -50, 25);
+ctx.rect(0, 50, 50, -25);
+ctx.rect(100, 50, -50, -25);
+ctx.fill();
+_assertPixel(offscreenCanvas, 25,12, 0,255,0,255, "25,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,12, 0,255,0,255, "75,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,37, 0,255,0,255, "25,37", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,37, 0,255,0,255, "75,37", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.newsubpath.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.newsubpath.html
new file mode 100644
index 0000000..982e8b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.newsubpath.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.newsubpath</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.newsubpath</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.moveTo(-100, 25);
+ctx.lineTo(-50, 25);
+ctx.rect(200, 25, 1, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.newsubpath.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.newsubpath.worker.js
new file mode 100644
index 0000000..1bacdaa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.newsubpath.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.newsubpath
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.moveTo(-100, 25);
+ctx.lineTo(-50, 25);
+ctx.rect(200, 25, 1, 1);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.nonfinite.html
new file mode 100644
index 0000000..d3c62e5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.nonfinite.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.nonfinite</h1>
+<p class="desc">rect() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("rect() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.rect(Infinity, 50, 1, 1);
+ctx.rect(-Infinity, 50, 1, 1);
+ctx.rect(NaN, 50, 1, 1);
+ctx.rect(0, Infinity, 1, 1);
+ctx.rect(0, -Infinity, 1, 1);
+ctx.rect(0, NaN, 1, 1);
+ctx.rect(0, 50, Infinity, 1);
+ctx.rect(0, 50, -Infinity, 1);
+ctx.rect(0, 50, NaN, 1);
+ctx.rect(0, 50, 1, Infinity);
+ctx.rect(0, 50, 1, -Infinity);
+ctx.rect(0, 50, 1, NaN);
+ctx.rect(Infinity, Infinity, 1, 1);
+ctx.rect(Infinity, Infinity, Infinity, 1);
+ctx.rect(Infinity, Infinity, Infinity, Infinity);
+ctx.rect(Infinity, Infinity, 1, Infinity);
+ctx.rect(Infinity, 50, Infinity, 1);
+ctx.rect(Infinity, 50, Infinity, Infinity);
+ctx.rect(Infinity, 50, 1, Infinity);
+ctx.rect(0, Infinity, Infinity, 1);
+ctx.rect(0, Infinity, Infinity, Infinity);
+ctx.rect(0, Infinity, 1, Infinity);
+ctx.rect(0, 50, Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.nonfinite.worker.js
new file mode 100644
index 0000000..35582fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.nonfinite.worker.js
@@ -0,0 +1,50 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.nonfinite
+// Description:rect() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("rect() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.moveTo(0, 0);
+ctx.lineTo(100, 0);
+ctx.rect(Infinity, 50, 1, 1);
+ctx.rect(-Infinity, 50, 1, 1);
+ctx.rect(NaN, 50, 1, 1);
+ctx.rect(0, Infinity, 1, 1);
+ctx.rect(0, -Infinity, 1, 1);
+ctx.rect(0, NaN, 1, 1);
+ctx.rect(0, 50, Infinity, 1);
+ctx.rect(0, 50, -Infinity, 1);
+ctx.rect(0, 50, NaN, 1);
+ctx.rect(0, 50, 1, Infinity);
+ctx.rect(0, 50, 1, -Infinity);
+ctx.rect(0, 50, 1, NaN);
+ctx.rect(Infinity, Infinity, 1, 1);
+ctx.rect(Infinity, Infinity, Infinity, 1);
+ctx.rect(Infinity, Infinity, Infinity, Infinity);
+ctx.rect(Infinity, Infinity, 1, Infinity);
+ctx.rect(Infinity, 50, Infinity, 1);
+ctx.rect(Infinity, 50, Infinity, Infinity);
+ctx.rect(Infinity, 50, 1, Infinity);
+ctx.rect(0, Infinity, Infinity, 1);
+ctx.rect(0, Infinity, Infinity, Infinity);
+ctx.rect(0, Infinity, 1, Infinity);
+ctx.rect(0, 50, Infinity, Infinity);
+ctx.lineTo(100, 50);
+ctx.lineTo(0, 50);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 90,45, 0,255,0,255, "90,45", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.selfintersect.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.selfintersect.html
new file mode 100644
index 0000000..7ca1af5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.selfintersect.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.selfintersect</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.selfintersect</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 90;
+ctx.beginPath();
+ctx.rect(45, 20, 10, 10);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.selfintersect.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.selfintersect.worker.js
new file mode 100644
index 0000000..0c261b6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.selfintersect.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.selfintersect
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 90;
+ctx.beginPath();
+ctx.rect(45, 20, 10, 10);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.winding.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.winding.html
new file mode 100644
index 0000000..4532ddb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.winding.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.winding</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.winding</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.fillStyle = '#f00';
+ctx.rect(0, 0, 50, 50);
+ctx.rect(100, 50, -50, -50);
+ctx.rect(0, 25, 100, -25);
+ctx.rect(100, 25, -100, 25);
+ctx.fill();
+_assertPixel(offscreenCanvas, 25,12, 0,255,0,255, "25,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,12, 0,255,0,255, "75,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,37, 0,255,0,255, "25,37", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,37, 0,255,0,255, "75,37", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.winding.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.winding.worker.js
new file mode 100644
index 0000000..72f3e3a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.winding.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.winding
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.fillStyle = '#f00';
+ctx.rect(0, 0, 50, 50);
+ctx.rect(100, 50, -50, -50);
+ctx.rect(0, 25, 100, -25);
+ctx.rect(100, 25, -100, 25);
+ctx.fill();
+_assertPixel(offscreenCanvas, 25,12, 0,255,0,255, "25,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,12, 0,255,0,255, "75,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 25,37, 0,255,0,255, "25,37", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,37, 0,255,0,255, "75,37", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.1.html
new file mode 100644
index 0000000..2873a52
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.zero.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.zero.1</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.rect(0, 50, 100, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.1.worker.js
new file mode 100644
index 0000000..7ad6404b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.zero.1
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.rect(0, 50, 100, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.2.html
new file mode 100644
index 0000000..0bdead0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.2.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.zero.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.zero.2</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.rect(50, -100, 0, 250);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.2.worker.js
new file mode 100644
index 0000000..cd43701a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.2.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.zero.2
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.rect(50, -100, 0, 250);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.3.html
new file mode 100644
index 0000000..02a84e3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.3.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.zero.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.zero.3</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.rect(50, 25, 0, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.3.worker.js
new file mode 100644
index 0000000..19176838
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.3.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.zero.3
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.beginPath();
+ctx.rect(50, 25, 0, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.4.html
new file mode 100644
index 0000000..7c80780
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.4.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.zero.4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.zero.4</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.rect(100, 25, 0, 0);
+ctx.lineTo(0, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.4.worker.js
new file mode 100644
index 0000000..7c91236
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.4.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.zero.4
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 50;
+ctx.rect(100, 25, 0, 0);
+ctx.lineTo(0, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.5.html
new file mode 100644
index 0000000..3fc63457
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.5.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.zero.5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.zero.5</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.moveTo(0, 0);
+ctx.rect(100, 25, 0, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.5.worker.js
new file mode 100644
index 0000000..1e839016
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.5.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.zero.5
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.moveTo(0, 0);
+ctx.rect(100, 25, 0, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.6.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.6.html
new file mode 100644
index 0000000..450ef3c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.6.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.rect.zero.6</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.rect.zero.6</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineJoin = 'miter';
+ctx.miterLimit = 1.5;
+ctx.lineWidth = 200;
+ctx.beginPath();
+ctx.rect(100, 25, 1000, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.6.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.6.worker.js
new file mode 100644
index 0000000..44bda7e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.rect.zero.6.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.rect.zero.6
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineJoin = 'miter';
+ctx.miterLimit = 1.5;
+ctx.lineWidth = 200;
+ctx.beginPath();
+ctx.rect(100, 25, 1000, 0);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.empty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.empty.html
new file mode 100644
index 0000000..14e489a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.empty.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.empty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.empty</h1>
+<p class="desc">Empty subpaths are not stroked</p>
+
+
+<script>
+var t = async_test("Empty subpaths are not stroked");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(40, 25);
+ctx.moveTo(60, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.empty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.empty.worker.js
new file mode 100644
index 0000000..d6db2a01
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.empty.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.empty
+// Description:Empty subpaths are not stroked
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Empty subpaths are not stroked");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(40, 25);
+ctx.moveTo(60, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.overlap.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.overlap.html
new file mode 100644
index 0000000..c7277b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.overlap.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.overlap</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.overlap</h1>
+<p class="desc">Stroked subpaths are combined before being drawn</p>
+
+
+<script>
+var t = async_test("Stroked subpaths are combined before being drawn");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = 'rgba(0, 255, 0, 0.5)';
+ctx.lineWidth = 50;
+ctx.moveTo(0, 20);
+ctx.lineTo(100, 20);
+ctx.moveTo(0, 30);
+ctx.lineTo(100, 30);
+ctx.stroke();
+_assertPixelApprox(offscreenCanvas, 50,25, 0,127,0,255, "50,25", "0,127,0,255", 1);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.overlap.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.overlap.worker.js
new file mode 100644
index 0000000..5160847
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.overlap.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.overlap
+// Description:Stroked subpaths are combined before being drawn
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Stroked subpaths are combined before being drawn");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = 'rgba(0, 255, 0, 0.5)';
+ctx.lineWidth = 50;
+ctx.moveTo(0, 20);
+ctx.lineTo(100, 20);
+ctx.moveTo(0, 30);
+ctx.lineTo(100, 30);
+ctx.stroke();
+_assertPixelApprox(offscreenCanvas, 50,25, 0,127,0,255, "50,25", "0,127,0,255", 1);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc-expected.txt
new file mode 100644
index 0000000..cc89923
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Zero-length line segments from arcTo and arc are removed before stroking assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.html
new file mode 100644
index 0000000..065314e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.prune.arc</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.prune.arc</h1>
+<p class="desc">Zero-length line segments from arcTo and arc are removed before stroking</p>
+
+
+<script>
+var t = async_test("Zero-length line segments from arcTo and arc are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.arcTo(50, 25, 150, 25, 10);
+ctx.stroke();
+ctx.beginPath();
+ctx.moveTo(60, 25);
+ctx.arc(50, 25, 10, 0, 0, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.js
new file mode 100644
index 0000000..eba5233
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.arc.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.prune.arc
+// Description:Zero-length line segments from arcTo and arc are removed before stroking
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Zero-length line segments from arcTo and arc are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.arcTo(50, 25, 150, 25, 10);
+ctx.stroke();
+ctx.beginPath();
+ctx.moveTo(60, 25);
+ctx.arc(50, 25, 10, 0, 0, false);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed-expected.txt
new file mode 100644
index 0000000..4b3f6e06
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Zero-length line segments from closed paths are removed before stroking assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.html
new file mode 100644
index 0000000..7c8ffe1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.prune.closed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.prune.closed</h1>
+<p class="desc">Zero-length line segments from closed paths are removed before stroking</p>
+
+
+<script>
+var t = async_test("Zero-length line segments from closed paths are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.lineTo(50, 25);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.worker.js
new file mode 100644
index 0000000..8b2e920
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.closed.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.prune.closed
+// Description:Zero-length line segments from closed paths are removed before stroking
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Zero-length line segments from closed paths are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.lineTo(50, 25);
+ctx.closePath();
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.corner.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.corner.html
new file mode 100644
index 0000000..ef09196
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.corner.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.prune.corner</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.prune.corner</h1>
+<p class="desc">Zero-length line segments are removed before stroking with miters</p>
+
+
+<script>
+var t = async_test("Zero-length line segments are removed before stroking with miters");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 400;
+ctx.lineJoin = 'miter';
+ctx.miterLimit = 1.4;
+ctx.beginPath();
+ctx.moveTo(-1000, 200);
+ctx.lineTo(-100, 200);
+ctx.lineTo(-100, 200);
+ctx.lineTo(-100, 200);
+ctx.lineTo(-100, 1000);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.corner.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.corner.worker.js
new file mode 100644
index 0000000..e0b0ad55
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.corner.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.prune.corner
+// Description:Zero-length line segments are removed before stroking with miters
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Zero-length line segments are removed before stroking with miters");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 400;
+ctx.lineJoin = 'miter';
+ctx.miterLimit = 1.4;
+ctx.beginPath();
+ctx.moveTo(-1000, 200);
+ctx.lineTo(-100, 200);
+ctx.lineTo(-100, 200);
+ctx.lineTo(-100, 200);
+ctx.lineTo(-100, 1000);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve-expected.txt
new file mode 100644
index 0000000..caef0ae
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Zero-length line segments from quadraticCurveTo and bezierCurveTo are removed before stroking assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.html
new file mode 100644
index 0000000..2f0dd1e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.prune.curve</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.prune.curve</h1>
+<p class="desc">Zero-length line segments from quadraticCurveTo and bezierCurveTo are removed before stroking</p>
+
+
+<script>
+var t = async_test("Zero-length line segments from quadraticCurveTo and bezierCurveTo are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.quadraticCurveTo(50, 25, 50, 25);
+ctx.stroke();
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.bezierCurveTo(50, 25, 50, 25, 50, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.worker.js
new file mode 100644
index 0000000..54d6955c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.curve.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.prune.curve
+// Description:Zero-length line segments from quadraticCurveTo and bezierCurveTo are removed before stroking
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Zero-length line segments from quadraticCurveTo and bezierCurveTo are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.quadraticCurveTo(50, 25, 50, 25);
+ctx.stroke();
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.bezierCurveTo(50, 25, 50, 25, 50, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line-expected.txt
new file mode 100644
index 0000000..76746fa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Zero-length line segments from lineTo are removed before stroking assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line.html
new file mode 100644
index 0000000..2a659eab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.prune.line</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.prune.line</h1>
+<p class="desc">Zero-length line segments from lineTo are removed before stroking</p>
+
+
+<script>
+var t = async_test("Zero-length line segments from lineTo are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.lineTo(50, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line.worker.js
new file mode 100644
index 0000000..8229f34
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.line.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.prune.line
+// Description:Zero-length line segments from lineTo are removed before stroking
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Zero-length line segments from lineTo are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.moveTo(50, 25);
+ctx.lineTo(50, 25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect-expected.txt
new file mode 100644
index 0000000..6726b56
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Zero-length line segments from rect and strokeRect are removed before stroking assert_equals: Red channel of the pixel at (50, 25) expected 0 but got 255
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.html
new file mode 100644
index 0000000..b4b4aeb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.prune.rect</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.prune.rect</h1>
+<p class="desc">Zero-length line segments from rect and strokeRect are removed before stroking</p>
+
+
+<script>
+var t = async_test("Zero-length line segments from rect and strokeRect are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.rect(50, 25, 0, 0);
+ctx.stroke();
+ctx.strokeRect(50, 25, 0, 0);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.worker.js
new file mode 100644
index 0000000..e3b2ff8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.prune.rect.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.prune.rect
+// Description:Zero-length line segments from rect and strokeRect are removed before stroking
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Zero-length line segments from rect and strokeRect are removed before stroking");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 100;
+ctx.lineCap = 'round';
+ctx.lineJoin = 'round';
+ctx.beginPath();
+ctx.rect(50, 25, 0, 0);
+ctx.stroke();
+ctx.strokeRect(50, 25, 0, 0);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale1.html
new file mode 100644
index 0000000..61e9a7e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale1.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.scale1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.scale1</h1>
+<p class="desc">Stroke line widths are scaled by the current transformation matrix</p>
+
+
+<script>
+var t = async_test("Stroke line widths are scaled by the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(25, 12.5, 50, 25);
+ctx.save();
+ctx.scale(50, 25);
+ctx.strokeStyle = '#0f0';
+ctx.stroke();
+ctx.restore();
+ctx.beginPath();
+ctx.rect(-25, -12.5, 150, 75);
+ctx.save();
+ctx.scale(50, 25);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.restore();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale1.worker.js
new file mode 100644
index 0000000..e5fc8bc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale1.worker.js
@@ -0,0 +1,44 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.scale1
+// Description:Stroke line widths are scaled by the current transformation matrix
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Stroke line widths are scaled by the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(25, 12.5, 50, 25);
+ctx.save();
+ctx.scale(50, 25);
+ctx.strokeStyle = '#0f0';
+ctx.stroke();
+ctx.restore();
+ctx.beginPath();
+ctx.rect(-25, -12.5, 150, 75);
+ctx.save();
+ctx.scale(50, 25);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.restore();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale2.html
new file mode 100644
index 0000000..0bc4c26
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale2.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.scale2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.scale2</h1>
+<p class="desc">Stroke line widths are scaled by the current transformation matrix</p>
+
+
+<script>
+var t = async_test("Stroke line widths are scaled by the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(25, 12.5, 50, 25);
+ctx.save();
+ctx.rotate(Math.PI/2);
+ctx.scale(25, 50);
+ctx.strokeStyle = '#0f0';
+ctx.stroke();
+ctx.restore();
+ctx.beginPath();
+ctx.rect(-25, -12.5, 150, 75);
+ctx.save();
+ctx.rotate(Math.PI/2);
+ctx.scale(25, 50);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.restore();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale2.worker.js
new file mode 100644
index 0000000..b532fb7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.scale2.worker.js
@@ -0,0 +1,46 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.scale2
+// Description:Stroke line widths are scaled by the current transformation matrix
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Stroke line widths are scaled by the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.beginPath();
+ctx.rect(25, 12.5, 50, 25);
+ctx.save();
+ctx.rotate(Math.PI/2);
+ctx.scale(25, 50);
+ctx.strokeStyle = '#0f0';
+ctx.stroke();
+ctx.restore();
+ctx.beginPath();
+ctx.rect(-25, -12.5, 150, 75);
+ctx.save();
+ctx.rotate(Math.PI/2);
+ctx.scale(25, 50);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.restore();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.skew.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.skew.html
new file mode 100644
index 0000000..6220e7c5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.skew.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.skew</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.skew</h1>
+<p class="desc">Strokes lines are skewed by the current transformation matrix</p>
+
+
+<script>
+var t = async_test("Strokes lines are skewed by the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.beginPath();
+ctx.moveTo(49, -50);
+ctx.lineTo(201, -50);
+ctx.rotate(Math.PI/4);
+ctx.scale(1, 283);
+ctx.strokeStyle = '#0f0';
+ctx.stroke();
+ctx.restore();
+ctx.save();
+ctx.beginPath();
+ctx.translate(-150, 0);
+ctx.moveTo(49, -50);
+ctx.lineTo(199, -50);
+ctx.rotate(Math.PI/4);
+ctx.scale(1, 142);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.restore();
+ctx.save();
+ctx.beginPath();
+ctx.translate(-150, 0);
+ctx.moveTo(49, -50);
+ctx.lineTo(199, -50);
+ctx.rotate(Math.PI/4);
+ctx.scale(1, 142);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.restore();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.skew.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.skew.worker.js
new file mode 100644
index 0000000..125c70c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.skew.worker.js
@@ -0,0 +1,59 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.skew
+// Description:Strokes lines are skewed by the current transformation matrix
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Strokes lines are skewed by the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.beginPath();
+ctx.moveTo(49, -50);
+ctx.lineTo(201, -50);
+ctx.rotate(Math.PI/4);
+ctx.scale(1, 283);
+ctx.strokeStyle = '#0f0';
+ctx.stroke();
+ctx.restore();
+ctx.save();
+ctx.beginPath();
+ctx.translate(-150, 0);
+ctx.moveTo(49, -50);
+ctx.lineTo(199, -50);
+ctx.rotate(Math.PI/4);
+ctx.scale(1, 142);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.restore();
+ctx.save();
+ctx.beginPath();
+ctx.translate(-150, 0);
+ctx.moveTo(49, -50);
+ctx.lineTo(199, -50);
+ctx.rotate(Math.PI/4);
+ctx.scale(1, 142);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.restore();
+_assertPixel(offscreenCanvas, 0,0, 0,255,0,255, "0,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,0, 0,255,0,255, "50,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,0, 0,255,0,255, "99,0", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,25, 0,255,0,255, "0,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,25, 0,255,0,255, "99,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 0,49, 0,255,0,255, "0,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,49, 0,255,0,255, "50,49", "0,255,0,255");
+_assertPixel(offscreenCanvas, 99,49, 0,255,0,255, "99,49", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.unaffected.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.unaffected.html
new file mode 100644
index 0000000..fc2dff9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.unaffected.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.unaffected</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.unaffected</h1>
+<p class="desc">Stroking does not start a new path or subpath</p>
+
+
+<script>
+var t = async_test("Stroking does not start a new path or subpath");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.moveTo(-100, 25);
+ctx.lineTo(-100, -100);
+ctx.lineTo(200, -100);
+ctx.lineTo(200, 25);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.closePath();
+ctx.strokeStyle = '#0f0';
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.unaffected.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.unaffected.worker.js
new file mode 100644
index 0000000..6c3c165
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.unaffected.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.unaffected
+// Description:Stroking does not start a new path or subpath
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Stroking does not start a new path or subpath");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.lineWidth = 50;
+ctx.moveTo(-100, 25);
+ctx.lineTo(-100, -100);
+ctx.lineTo(200, -100);
+ctx.lineTo(200, 25);
+ctx.strokeStyle = '#f00';
+ctx.stroke();
+ctx.closePath();
+ctx.strokeStyle = '#0f0';
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.union.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.union.html
new file mode 100644
index 0000000..76884ca
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.union.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.stroke.union</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.stroke.union</h1>
+<p class="desc">Strokes in opposite directions are unioned, not subtracted</p>
+
+
+<script>
+var t = async_test("Strokes in opposite directions are unioned, not subtracted");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 40;
+ctx.moveTo(0, 10);
+ctx.lineTo(100, 10);
+ctx.moveTo(100, 40);
+ctx.lineTo(0, 40);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.union.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.union.worker.js
new file mode 100644
index 0000000..0594b28
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.stroke.union.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.stroke.union
+// Description:Strokes in opposite directions are unioned, not subtracted
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Strokes in opposite directions are unioned, not subtracted");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#0f0';
+ctx.lineWidth = 40;
+ctx.moveTo(0, 10);
+ctx.lineTo(100, 10);
+ctx.moveTo(100, 40);
+ctx.lineTo(0, 40);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.basic.html
new file mode 100644
index 0000000..e7cb8ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.basic.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.transformation.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.transformation.basic</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(-100, 0);
+ctx.rect(100, 0, 100, 50);
+ctx.translate(0, -100);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.basic.worker.js
new file mode 100644
index 0000000..ac9bc1b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.basic.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.transformation.basic
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(-100, 0);
+ctx.rect(100, 0, 100, 50);
+ctx.translate(0, -100);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.changing.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.changing.html
new file mode 100644
index 0000000..aba546b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.changing.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.transformation.changing</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.transformation.changing</h1>
+<p class="desc">Transformations are applied while building paths, not when drawing</p>
+
+
+<script>
+var t = async_test("Transformations are applied while building paths, not when drawing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.moveTo(0, 0);
+ctx.translate(100, 0);
+ctx.lineTo(0, 0);
+ctx.translate(0, 50);
+ctx.lineTo(0, 0);
+ctx.translate(-100, 0);
+ctx.lineTo(0, 0);
+ctx.translate(1000, 1000);
+ctx.rotate(Math.PI/2);
+ctx.scale(0.1, 0.1);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.changing.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.changing.worker.js
new file mode 100644
index 0000000..2f8418d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.changing.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.transformation.changing
+// Description:Transformations are applied while building paths, not when drawing
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Transformations are applied while building paths, not when drawing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.moveTo(0, 0);
+ctx.translate(100, 0);
+ctx.lineTo(0, 0);
+ctx.translate(0, 50);
+ctx.lineTo(0, 0);
+ctx.translate(-100, 0);
+ctx.lineTo(0, 0);
+ctx.translate(1000, 1000);
+ctx.rotate(Math.PI/2);
+ctx.scale(0.1, 0.1);
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.multiple.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.multiple.html
new file mode 100644
index 0000000..7f38dae
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.multiple.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.path.transformation.multiple</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.path.transformation.multiple</h1>
+<p class="desc">Transformations are applied while building paths, not when drawing</p>
+
+
+<script>
+var t = async_test("Transformations are applied while building paths, not when drawing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.translate(-100, 0);
+ctx.rect(0, 0, 100, 50);
+ctx.fill();
+ctx.translate(100, 0);
+ctx.fill();
+ctx.beginPath();
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.translate(0, -50);
+ctx.moveTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.stroke();
+ctx.translate(0, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.multiple.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.multiple.worker.js
new file mode 100644
index 0000000..62bde63
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/path-objects/2d.path.transformation.multiple.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.path.transformation.multiple
+// Description:Transformations are applied while building paths, not when drawing
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Transformations are applied while building paths, not when drawing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.translate(-100, 0);
+ctx.rect(0, 0, 100, 50);
+ctx.fill();
+ctx.translate(100, 0);
+ctx.fill();
+ctx.beginPath();
+ctx.strokeStyle = '#f00';
+ctx.lineWidth = 50;
+ctx.translate(0, -50);
+ctx.moveTo(0, 25);
+ctx.lineTo(100, 25);
+ctx.stroke();
+ctx.translate(0, 50);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.html
new file mode 100644
index 0000000..8152cfc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create1.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create1.basic</h1>
+<p class="desc">createImageData(imgdata) exists and returns something</p>
+
+
+<script>
+var t = async_test("createImageData(imgdata) exists and returns something");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertDifferent(ctx.createImageData(ctx.createImageData(1, 1)), null, "ctx.createImageData(ctx.createImageData(1, 1))", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.worker.js
new file mode 100644
index 0000000..250a161
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.basic.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create1.basic
+// Description:createImageData(imgdata) exists and returns something
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(imgdata) exists and returns something");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertDifferent(ctx.createImageData(ctx.createImageData(1, 1)), null, "ctx.createImageData(ctx.createImageData(1, 1))", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.html
new file mode 100644
index 0000000..a385d72
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create1.initial</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create1.initial</h1>
+<p class="desc">createImageData(imgdata) returns transparent black data of the right size</p>
+
+
+<script>
+var t = async_test("createImageData(imgdata) returns transparent black data of the right size");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata1 = ctx.getImageData(0, 0, 10, 20);
+var imgdata2 = ctx.createImageData(imgdata1);
+_assertSame(imgdata2.data.length, imgdata1.data.length, "imgdata2.data.length", "imgdata1.data.length");
+_assertSame(imgdata2.width, imgdata1.width, "imgdata2.width", "imgdata1.width");
+_assertSame(imgdata2.height, imgdata1.height, "imgdata2.height", "imgdata1.height");
+var isTransparentBlack = true;
+for (var i = 0; i < imgdata2.data.length; ++i)
+    if (imgdata2.data[i] !== 0)
+        isTransparentBlack = false;
+_assert(isTransparentBlack, "isTransparentBlack");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.worker.js
new file mode 100644
index 0000000..da0543c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.initial.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create1.initial
+// Description:createImageData(imgdata) returns transparent black data of the right size
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(imgdata) returns transparent black data of the right size");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata1 = ctx.getImageData(0, 0, 10, 20);
+var imgdata2 = ctx.createImageData(imgdata1);
+_assertSame(imgdata2.data.length, imgdata1.data.length, "imgdata2.data.length", "imgdata1.data.length");
+_assertSame(imgdata2.width, imgdata1.width, "imgdata2.width", "imgdata1.width");
+_assertSame(imgdata2.height, imgdata1.height, "imgdata2.height", "imgdata1.height");
+var isTransparentBlack = true;
+for (var i = 0; i < imgdata2.data.length; ++i)
+    if (imgdata2.data[i] !== 0)
+        isTransparentBlack = false;
+_assert(isTransparentBlack, "isTransparentBlack");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.html
new file mode 100644
index 0000000..bbcadad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create1.zero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create1.zero</h1>
+<p class="desc">createImageData(null) throws TypeError</p>
+
+
+<script>
+var t = async_test("createImageData(null) throws TypeError");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createImageData(null); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.worker.js
new file mode 100644
index 0000000..f3bed84
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create1.zero.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create1.zero
+// Description:createImageData(null) throws TypeError
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(null) throws TypeError");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createImageData(null); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.html
new file mode 100644
index 0000000..13cb5de4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create2.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create2.basic</h1>
+<p class="desc">createImageData(sw, sh) exists and returns something</p>
+
+
+<script>
+var t = async_test("createImageData(sw, sh) exists and returns something");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertDifferent(ctx.createImageData(1, 1), null, "ctx.createImageData(1, 1)", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.worker.js
new file mode 100644
index 0000000..82190d6cb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.basic.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create2.basic
+// Description:createImageData(sw, sh) exists and returns something
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(sw, sh) exists and returns something");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertDifferent(ctx.createImageData(1, 1), null, "ctx.createImageData(1, 1)", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.html
new file mode 100644
index 0000000..e7ced9d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create2.initial</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create2.initial</h1>
+<p class="desc">createImageData(sw, sh) returns transparent black data of the right size</p>
+
+
+<script>
+var t = async_test("createImageData(sw, sh) returns transparent black data of the right size");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.createImageData(10, 20);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+_assert(imgdata.width < imgdata.height, "imgdata.width < imgdata.height");
+_assert(imgdata.width > 0, "imgdata.width > 0");
+var isTransparentBlack = true;
+for (var i = 0; i < imgdata.data.length; ++i)
+    if (imgdata.data[i] !== 0)
+        isTransparentBlack = false;
+_assert(isTransparentBlack, "isTransparentBlack");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.worker.js
new file mode 100644
index 0000000..d3fea24d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.initial.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create2.initial
+// Description:createImageData(sw, sh) returns transparent black data of the right size
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(sw, sh) returns transparent black data of the right size");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.createImageData(10, 20);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+_assert(imgdata.width < imgdata.height, "imgdata.width < imgdata.height");
+_assert(imgdata.width > 0, "imgdata.width > 0");
+var isTransparentBlack = true;
+for (var i = 0; i < imgdata.data.length; ++i)
+    if (imgdata.data[i] !== 0)
+        isTransparentBlack = false;
+_assert(isTransparentBlack, "isTransparentBlack");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.html
new file mode 100644
index 0000000..25d4905
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create2.large</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create2.large</h1>
+<p class="desc">createImageData(sw, sh) works for sizes much larger than the canvas</p>
+
+
+<script>
+var t = async_test("createImageData(sw, sh) works for sizes much larger than the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.createImageData(1000, 2000);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+_assert(imgdata.width < imgdata.height, "imgdata.width < imgdata.height");
+_assert(imgdata.width > 0, "imgdata.width > 0");
+var isTransparentBlack = true;
+for (var i = 0; i < imgdata.data.length; i += 7813) // check ~1024 points (assuming normal scaling)
+    if (imgdata.data[i] !== 0)
+        isTransparentBlack = false;
+_assert(isTransparentBlack, "isTransparentBlack");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.worker.js
new file mode 100644
index 0000000..d8ae14c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.large.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create2.large
+// Description:createImageData(sw, sh) works for sizes much larger than the canvas
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(sw, sh) works for sizes much larger than the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.createImageData(1000, 2000);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+_assert(imgdata.width < imgdata.height, "imgdata.width < imgdata.height");
+_assert(imgdata.width > 0, "imgdata.width > 0");
+var isTransparentBlack = true;
+for (var i = 0; i < imgdata.data.length; i += 7813) // check ~1024 points (assuming normal scaling)
+    if (imgdata.data[i] !== 0)
+        isTransparentBlack = false;
+_assert(isTransparentBlack, "isTransparentBlack");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.html
new file mode 100644
index 0000000..d5c42ef
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create2.negative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create2.negative</h1>
+<p class="desc">createImageData(sw, sh) takes the absolute magnitude of the size arguments</p>
+
+
+<script>
+var t = async_test("createImageData(sw, sh) takes the absolute magnitude of the size arguments");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata1 = ctx.createImageData(10, 20);
+var imgdata2 = ctx.createImageData(-10, 20);
+var imgdata3 = ctx.createImageData(10, -20);
+var imgdata4 = ctx.createImageData(-10, -20);
+_assertSame(imgdata1.data.length, imgdata2.data.length, "imgdata1.data.length", "imgdata2.data.length");
+_assertSame(imgdata2.data.length, imgdata3.data.length, "imgdata2.data.length", "imgdata3.data.length");
+_assertSame(imgdata3.data.length, imgdata4.data.length, "imgdata3.data.length", "imgdata4.data.length");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.worker.js
new file mode 100644
index 0000000..11f1641a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.negative.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create2.negative
+// Description:createImageData(sw, sh) takes the absolute magnitude of the size arguments
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(sw, sh) takes the absolute magnitude of the size arguments");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata1 = ctx.createImageData(10, 20);
+var imgdata2 = ctx.createImageData(-10, 20);
+var imgdata3 = ctx.createImageData(10, -20);
+var imgdata4 = ctx.createImageData(-10, -20);
+_assertSame(imgdata1.data.length, imgdata2.data.length, "imgdata1.data.length", "imgdata2.data.length");
+_assertSame(imgdata2.data.length, imgdata3.data.length, "imgdata2.data.length", "imgdata3.data.length");
+_assertSame(imgdata3.data.length, imgdata4.data.length, "imgdata3.data.length", "imgdata4.data.length");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.html
new file mode 100644
index 0000000..ae36fc7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create2.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create2.nonfinite</h1>
+<p class="desc">createImageData() throws TypeError if arguments are not finite</p>
+
+
+<script>
+var t = async_test("createImageData() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createImageData(Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(-Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(NaN, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, NaN); });
+assert_throws(new TypeError(), function() { ctx.createImageData(Infinity, Infinity); });
+var posinfobj = { valueOf: function() { return Infinity; } },
+    neginfobj = { valueOf: function() { return -Infinity; } },
+    nanobj = { valueOf: function() { return -Infinity; } };
+assert_throws(new TypeError(), function() { ctx.createImageData(posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(neginfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(nanobj, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, neginfobj); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, nanobj); });
+assert_throws(new TypeError(), function() { ctx.createImageData(posinfobj, posinfobj); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.worker.js
new file mode 100644
index 0000000..0609d05
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.nonfinite.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create2.nonfinite
+// Description:createImageData() throws TypeError if arguments are not finite
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.createImageData(Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(-Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(NaN, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, NaN); });
+assert_throws(new TypeError(), function() { ctx.createImageData(Infinity, Infinity); });
+var posinfobj = { valueOf: function() { return Infinity; } },
+    neginfobj = { valueOf: function() { return -Infinity; } },
+    nanobj = { valueOf: function() { return -Infinity; } };
+assert_throws(new TypeError(), function() { ctx.createImageData(posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(neginfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(nanobj, 10); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, neginfobj); });
+assert_throws(new TypeError(), function() { ctx.createImageData(10, nanobj); });
+assert_throws(new TypeError(), function() { ctx.createImageData(posinfobj, posinfobj); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.html
new file mode 100644
index 0000000..2d59eff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create2.round</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create2.round</h1>
+<p class="desc">createImageData(w, h) is rounded the same as getImageData(0, 0, w, h)</p>
+
+
+<script>
+var t = async_test("createImageData(w, h) is rounded the same as getImageData(0, 0, w, h)");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata1 = ctx.createImageData(10.01, 10.99);
+var imgdata2 = ctx.getImageData(0, 0, 10.01, 10.99);
+_assertSame(imgdata1.width, imgdata2.width, "imgdata1.width", "imgdata2.width");
+_assertSame(imgdata1.height, imgdata2.height, "imgdata1.height", "imgdata2.height");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.worker.js
new file mode 100644
index 0000000..b0c4a03
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.round.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create2.round
+// Description:createImageData(w, h) is rounded the same as getImageData(0, 0, w, h)
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(w, h) is rounded the same as getImageData(0, 0, w, h)");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata1 = ctx.createImageData(10.01, 10.99);
+var imgdata2 = ctx.getImageData(0, 0, 10.01, 10.99);
+_assertSame(imgdata1.width, imgdata2.width, "imgdata1.width", "imgdata2.width");
+_assertSame(imgdata1.height, imgdata2.height, "imgdata1.height", "imgdata2.height");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.html
new file mode 100644
index 0000000..5f5f0ed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create2.tiny</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create2.tiny</h1>
+<p class="desc">createImageData(sw, sh) works for sizes smaller than one pixel</p>
+
+
+<script>
+var t = async_test("createImageData(sw, sh) works for sizes smaller than one pixel");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.createImageData(0.0001, 0.0001);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+_assertSame(imgdata.width, 1, "imgdata.width", "1");
+_assertSame(imgdata.height, 1, "imgdata.height", "1");
+var isTransparentBlack = true;
+for (var i = 0; i < imgdata.data.length; ++i)
+    if (imgdata.data[i] !== 0)
+        isTransparentBlack = false;
+_assert(isTransparentBlack, "isTransparentBlack");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.worker.js
new file mode 100644
index 0000000..c6c74d7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.tiny.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create2.tiny
+// Description:createImageData(sw, sh) works for sizes smaller than one pixel
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(sw, sh) works for sizes smaller than one pixel");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.createImageData(0.0001, 0.0001);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+_assertSame(imgdata.width, 1, "imgdata.width", "1");
+_assertSame(imgdata.height, 1, "imgdata.height", "1");
+var isTransparentBlack = true;
+for (var i = 0; i < imgdata.data.length; ++i)
+    if (imgdata.data[i] !== 0)
+        isTransparentBlack = false;
+_assert(isTransparentBlack, "isTransparentBlack");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.html
new file mode 100644
index 0000000..8c88cc9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.create2.zero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.create2.zero</h1>
+<p class="desc">createImageData(sw, sh) throws INDEX_SIZE_ERR if size is zero</p>
+
+
+<script>
+var t = async_test("createImageData(sw, sh) throws INDEX_SIZE_ERR if size is zero");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createImageData(10, 0); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createImageData(0, 10); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createImageData(0, 0); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.worker.js
new file mode 100644
index 0000000..cf54b3c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.create2.zero.worker.js
@@ -0,0 +1,22 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.create2.zero
+// Description:createImageData(sw, sh) throws INDEX_SIZE_ERR if size is zero
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("createImageData(sw, sh) throws INDEX_SIZE_ERR if size is zero");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createImageData(10, 0); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createImageData(0, 10); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.createImageData(0, 0); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.html
new file mode 100644
index 0000000..cfb5e3c2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.basic</h1>
+<p class="desc">getImageData() exists and returns something</p>
+
+
+<script>
+var t = async_test("getImageData() exists and returns something");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertDifferent(ctx.getImageData(0, 0, 100, 50), null, "ctx.getImageData(0, 0, 100, 50)", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.worker.js
new file mode 100644
index 0000000..6824945d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.basic.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.basic
+// Description:getImageData() exists and returns something
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() exists and returns something");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertDifferent(ctx.getImageData(0, 0, 100, 50), null, "ctx.getImageData(0, 0, 100, 50)", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.html
new file mode 100644
index 0000000..c5e189b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.clamp</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.clamp</h1>
+<p class="desc">getImageData() clamps colours to the range [0, 255]</p>
+
+
+<script>
+var t = async_test("getImageData() clamps colours to the range [0, 255]");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgb(-100, -200, -300)';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = 'rgb(256, 300, 400)';
+ctx.fillRect(20, 10, 60, 10);
+var imgdata1 = ctx.getImageData(10, 5, 1, 1);
+_assertSame(imgdata1.data[0], 0, "imgdata1.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata1.data[1], 0, "imgdata1.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata1.data[2], 0, "imgdata1.data[\""+(2)+"\"]", "0");
+var imgdata2 = ctx.getImageData(30, 15, 1, 1);
+_assertSame(imgdata2.data[0], 255, "imgdata2.data[\""+(0)+"\"]", "255");
+_assertSame(imgdata2.data[1], 255, "imgdata2.data[\""+(1)+"\"]", "255");
+_assertSame(imgdata2.data[2], 255, "imgdata2.data[\""+(2)+"\"]", "255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.worker.js
new file mode 100644
index 0000000..97a2a147
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.clamp.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.clamp
+// Description:getImageData() clamps colours to the range [0, 255]
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() clamps colours to the range [0, 255]");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgb(-100, -200, -300)';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = 'rgb(256, 300, 400)';
+ctx.fillRect(20, 10, 60, 10);
+var imgdata1 = ctx.getImageData(10, 5, 1, 1);
+_assertSame(imgdata1.data[0], 0, "imgdata1.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata1.data[1], 0, "imgdata1.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata1.data[2], 0, "imgdata1.data[\""+(2)+"\"]", "0");
+var imgdata2 = ctx.getImageData(30, 15, 1, 1);
+_assertSame(imgdata2.data[0], 255, "imgdata2.data[\""+(0)+"\"]", "255");
+_assertSame(imgdata2.data[1], 255, "imgdata2.data[\""+(1)+"\"]", "255");
+_assertSame(imgdata2.data[2], 255, "imgdata2.data[\""+(2)+"\"]", "255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.length.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.length.html
new file mode 100644
index 0000000..c9516d7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.length.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.length</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.length</h1>
+<p class="desc">getImageData() returns a correctly-sized Uint8ClampedArray</p>
+
+
+<script>
+var t = async_test("getImageData() returns a correctly-sized Uint8ClampedArray");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.length.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.length.worker.js
new file mode 100644
index 0000000..f8a08e2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.length.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.length
+// Description:getImageData() returns a correctly-sized Uint8ClampedArray
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns a correctly-sized Uint8ClampedArray");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.html
new file mode 100644
index 0000000..ab90a831
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.nonfinite</h1>
+<p class="desc">getImageData() throws TypeError if arguments are not finite</p>
+
+
+<script>
+var t = async_test("getImageData() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(-Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(NaN, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, -Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, NaN, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, -Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, NaN, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, NaN); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, Infinity, Infinity); });
+var posinfobj = { valueOf: function() { return Infinity; } },
+    neginfobj = { valueOf: function() { return -Infinity; } },
+    nanobj = { valueOf: function() { return -Infinity; } };
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(neginfobj, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(nanobj, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, posinfobj, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, neginfobj, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, nanobj, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, neginfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, nanobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, neginfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, nanobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, posinfobj, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, posinfobj, posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, posinfobj, posinfobj, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, posinfobj, 10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, 10, posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, 10, posinfobj, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, 10, 10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, posinfobj, posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, posinfobj, posinfobj, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, posinfobj, 10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, posinfobj, posinfobj); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.worker.js
new file mode 100644
index 0000000..bfd5fb0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonfinite.worker.js
@@ -0,0 +1,68 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.nonfinite
+// Description:getImageData() throws TypeError if arguments are not finite
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(-Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(NaN, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, -Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, NaN, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, -Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, NaN, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, NaN); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, Infinity, Infinity); });
+var posinfobj = { valueOf: function() { return Infinity; } },
+    neginfobj = { valueOf: function() { return -Infinity; } },
+    nanobj = { valueOf: function() { return -Infinity; } };
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(neginfobj, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(nanobj, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, posinfobj, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, neginfobj, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, nanobj, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, neginfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, nanobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, neginfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, 10, nanobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, posinfobj, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, posinfobj, posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, posinfobj, posinfobj, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, posinfobj, 10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, 10, posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, 10, posinfobj, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(posinfobj, 10, 10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, posinfobj, posinfobj, 10); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, posinfobj, posinfobj, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, posinfobj, 10, posinfobj); });
+assert_throws(new TypeError(), function() { ctx.getImageData(10, 10, posinfobj, posinfobj); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.html
new file mode 100644
index 0000000..473d6f6e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.nonpremul</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.nonpremul</h1>
+<p class="desc">getImageData() returns non-premultiplied colours</p>
+
+
+<script>
+var t = async_test("getImageData() returns non-premultiplied colours");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata = ctx.getImageData(10, 10, 10, 10);
+_assert(imgdata.data[0] > 200, "imgdata.data[\""+(0)+"\"] > 200");
+_assert(imgdata.data[1] > 200, "imgdata.data[\""+(1)+"\"] > 200");
+_assert(imgdata.data[2] > 200, "imgdata.data[\""+(2)+"\"] > 200");
+_assert(imgdata.data[3] > 100, "imgdata.data[\""+(3)+"\"] > 100");
+_assert(imgdata.data[3] < 200, "imgdata.data[\""+(3)+"\"] < 200");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.worker.js
new file mode 100644
index 0000000..6d85a5c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.nonpremul.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.nonpremul
+// Description:getImageData() returns non-premultiplied colours
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns non-premultiplied colours");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata = ctx.getImageData(10, 10, 10, 10);
+_assert(imgdata.data[0] > 200, "imgdata.data[\""+(0)+"\"] > 200");
+_assert(imgdata.data[1] > 200, "imgdata.data[\""+(1)+"\"] > 200");
+_assert(imgdata.data[2] > 200, "imgdata.data[\""+(2)+"\"] > 200");
+_assert(imgdata.data[3] > 100, "imgdata.data[\""+(3)+"\"] > 100");
+_assert(imgdata.data[3] < 200, "imgdata.data[\""+(3)+"\"] < 200");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.html
new file mode 100644
index 0000000..4bf30c08
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.order.alpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.order.alpha</h1>
+<p class="desc">getImageData() returns A in the fourth component</p>
+
+
+<script>
+var t = async_test("getImageData() returns A in the fourth component");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assert(imgdata.data[3] < 200, "imgdata.data[\""+(3)+"\"] < 200");
+_assert(imgdata.data[3] > 100, "imgdata.data[\""+(3)+"\"] > 100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.worker.js
new file mode 100644
index 0000000..611a9c7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.alpha.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.order.alpha
+// Description:getImageData() returns A in the fourth component
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns A in the fourth component");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assert(imgdata.data[3] < 200, "imgdata.data[\""+(3)+"\"] < 200");
+_assert(imgdata.data[3] > 100, "imgdata.data[\""+(3)+"\"] > 100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.html
new file mode 100644
index 0000000..d3abec38
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.order.cols</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.order.cols</h1>
+<p class="desc">getImageData() returns leftmost columns first</p>
+
+
+<script>
+var t = async_test("getImageData() returns leftmost columns first");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#fff';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 2, 50);
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata.data[Math.round(imgdata.width/2*4)], 255, "imgdata.data[Math.round(imgdata.width/2*4)]", "255");
+_assertSame(imgdata.data[Math.round((imgdata.height/2)*imgdata.width*4)], 0, "imgdata.data[Math.round((imgdata.height/2)*imgdata.width*4)]", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.worker.js
new file mode 100644
index 0000000..c3a7d2504
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.cols.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.order.cols
+// Description:getImageData() returns leftmost columns first
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns leftmost columns first");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#fff';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 2, 50);
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata.data[Math.round(imgdata.width/2*4)], 255, "imgdata.data[Math.round(imgdata.width/2*4)]", "255");
+_assertSame(imgdata.data[Math.round((imgdata.height/2)*imgdata.width*4)], 0, "imgdata.data[Math.round((imgdata.height/2)*imgdata.width*4)]", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.html
new file mode 100644
index 0000000..ce81521b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.order.rgb</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.order.rgb</h1>
+<p class="desc">getImageData() returns R then G then B</p>
+
+
+<script>
+var t = async_test("getImageData() returns R then G then B");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#48c';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(imgdata.data[0], 0x44, "imgdata.data[\""+(0)+"\"]", "0x44");
+_assertSame(imgdata.data[1], 0x88, "imgdata.data[\""+(1)+"\"]", "0x88");
+_assertSame(imgdata.data[2], 0xCC, "imgdata.data[\""+(2)+"\"]", "0xCC");
+_assertSame(imgdata.data[3], 255, "imgdata.data[\""+(3)+"\"]", "255");
+_assertSame(imgdata.data[4], 0x44, "imgdata.data[\""+(4)+"\"]", "0x44");
+_assertSame(imgdata.data[5], 0x88, "imgdata.data[\""+(5)+"\"]", "0x88");
+_assertSame(imgdata.data[6], 0xCC, "imgdata.data[\""+(6)+"\"]", "0xCC");
+_assertSame(imgdata.data[7], 255, "imgdata.data[\""+(7)+"\"]", "255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.worker.js
new file mode 100644
index 0000000..654ea19
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rgb.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.order.rgb
+// Description:getImageData() returns R then G then B
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns R then G then B");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#48c';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(imgdata.data[0], 0x44, "imgdata.data[\""+(0)+"\"]", "0x44");
+_assertSame(imgdata.data[1], 0x88, "imgdata.data[\""+(1)+"\"]", "0x88");
+_assertSame(imgdata.data[2], 0xCC, "imgdata.data[\""+(2)+"\"]", "0xCC");
+_assertSame(imgdata.data[3], 255, "imgdata.data[\""+(3)+"\"]", "255");
+_assertSame(imgdata.data[4], 0x44, "imgdata.data[\""+(4)+"\"]", "0x44");
+_assertSame(imgdata.data[5], 0x88, "imgdata.data[\""+(5)+"\"]", "0x88");
+_assertSame(imgdata.data[6], 0xCC, "imgdata.data[\""+(6)+"\"]", "0xCC");
+_assertSame(imgdata.data[7], 255, "imgdata.data[\""+(7)+"\"]", "255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.html
new file mode 100644
index 0000000..ba8a740c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.order.rows</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.order.rows</h1>
+<p class="desc">getImageData() returns topmost rows first</p>
+
+
+<script>
+var t = async_test("getImageData() returns topmost rows first");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#fff';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 2);
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata.data[Math.floor(imgdata.width/2*4)], 0, "imgdata.data[Math.floor(imgdata.width/2*4)]", "0");
+_assertSame(imgdata.data[(imgdata.height/2)*imgdata.width*4], 255, "imgdata.data[(imgdata.height/2)*imgdata.width*4]", "255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.worker.js
new file mode 100644
index 0000000..9fb23e6a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.order.rows.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.order.rows
+// Description:getImageData() returns topmost rows first
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns topmost rows first");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#fff';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 2);
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata.data[Math.floor(imgdata.width/2*4)], 0, "imgdata.data[Math.floor(imgdata.width/2*4)]", "0");
+_assertSame(imgdata.data[(imgdata.height/2)*imgdata.width*4], 255, "imgdata.data[(imgdata.height/2)*imgdata.width*4]", "255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.range.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.range.html
new file mode 100644
index 0000000..9a19b651
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.range.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.range</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.range</h1>
+<p class="desc">getImageData() returns values in the range [0, 255]</p>
+
+
+<script>
+var t = async_test("getImageData() returns values in the range [0, 255]");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#fff';
+ctx.fillRect(20, 10, 60, 10);
+var imgdata1 = ctx.getImageData(10, 5, 1, 1);
+_assertSame(imgdata1.data[0], 0, "imgdata1.data[\""+(0)+"\"]", "0");
+var imgdata2 = ctx.getImageData(30, 15, 1, 1);
+_assertSame(imgdata2.data[0], 255, "imgdata2.data[\""+(0)+"\"]", "255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.range.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.range.worker.js
new file mode 100644
index 0000000..5cac707
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.range.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.range
+// Description:getImageData() returns values in the range [0, 255]
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns values in the range [0, 255]");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#fff';
+ctx.fillRect(20, 10, 60, 10);
+var imgdata1 = ctx.getImageData(10, 5, 1, 1);
+_assertSame(imgdata1.data[0], 0, "imgdata1.data[\""+(0)+"\"]", "0");
+var imgdata2 = ctx.getImageData(30, 15, 1, 1);
+_assertSame(imgdata2.data[0], 255, "imgdata2.data[\""+(0)+"\"]", "255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.html
new file mode 100644
index 0000000..b6d47a22
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.source.negative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.source.negative</h1>
+<p class="desc">getImageData() works with negative width and height, and returns top-to-bottom left-to-right</p>
+
+
+<script>
+var t = async_test("getImageData() works with negative width and height, and returns top-to-bottom left-to-right");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#fff';
+ctx.fillRect(20, 10, 60, 10);
+var imgdata1 = ctx.getImageData(85, 25, -10, -10);
+_assertSame(imgdata1.data[0], 255, "imgdata1.data[\""+(0)+"\"]", "255");
+_assertSame(imgdata1.data[1], 255, "imgdata1.data[\""+(1)+"\"]", "255");
+_assertSame(imgdata1.data[2], 255, "imgdata1.data[\""+(2)+"\"]", "255");
+_assertSame(imgdata1.data[3], 255, "imgdata1.data[\""+(3)+"\"]", "255");
+_assertSame(imgdata1.data[imgdata1.data.length-4+0], 0, "imgdata1.data[imgdata1.data.length-4+0]", "0");
+_assertSame(imgdata1.data[imgdata1.data.length-4+1], 0, "imgdata1.data[imgdata1.data.length-4+1]", "0");
+_assertSame(imgdata1.data[imgdata1.data.length-4+2], 0, "imgdata1.data[imgdata1.data.length-4+2]", "0");
+_assertSame(imgdata1.data[imgdata1.data.length-4+3], 255, "imgdata1.data[imgdata1.data.length-4+3]", "255");
+var imgdata2 = ctx.getImageData(0, 0, -1, -1);
+_assertSame(imgdata2.data[0], 0, "imgdata2.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata2.data[1], 0, "imgdata2.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata2.data[2], 0, "imgdata2.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata2.data[3], 0, "imgdata2.data[\""+(3)+"\"]", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.worker.js
new file mode 100644
index 0000000..ed83ee57
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.negative.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.source.negative
+// Description:getImageData() works with negative width and height, and returns top-to-bottom left-to-right
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() works with negative width and height, and returns top-to-bottom left-to-right");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#000';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#fff';
+ctx.fillRect(20, 10, 60, 10);
+var imgdata1 = ctx.getImageData(85, 25, -10, -10);
+_assertSame(imgdata1.data[0], 255, "imgdata1.data[\""+(0)+"\"]", "255");
+_assertSame(imgdata1.data[1], 255, "imgdata1.data[\""+(1)+"\"]", "255");
+_assertSame(imgdata1.data[2], 255, "imgdata1.data[\""+(2)+"\"]", "255");
+_assertSame(imgdata1.data[3], 255, "imgdata1.data[\""+(3)+"\"]", "255");
+_assertSame(imgdata1.data[imgdata1.data.length-4+0], 0, "imgdata1.data[imgdata1.data.length-4+0]", "0");
+_assertSame(imgdata1.data[imgdata1.data.length-4+1], 0, "imgdata1.data[imgdata1.data.length-4+1]", "0");
+_assertSame(imgdata1.data[imgdata1.data.length-4+2], 0, "imgdata1.data[imgdata1.data.length-4+2]", "0");
+_assertSame(imgdata1.data[imgdata1.data.length-4+3], 255, "imgdata1.data[imgdata1.data.length-4+3]", "255");
+var imgdata2 = ctx.getImageData(0, 0, -1, -1);
+_assertSame(imgdata2.data[0], 0, "imgdata2.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata2.data[1], 0, "imgdata2.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata2.data[2], 0, "imgdata2.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata2.data[3], 0, "imgdata2.data[\""+(3)+"\"]", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.html
new file mode 100644
index 0000000..0190a1f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.source.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.source.outside</h1>
+<p class="desc">getImageData() returns transparent black outside the canvas</p>
+
+
+<script>
+var t = async_test("getImageData() returns transparent black outside the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#08f';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata1 = ctx.getImageData(-10, 5, 1, 1);
+_assertSame(imgdata1.data[0], 0, "imgdata1.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata1.data[1], 0, "imgdata1.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata1.data[2], 0, "imgdata1.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata1.data[3], 0, "imgdata1.data[\""+(3)+"\"]", "0");
+var imgdata2 = ctx.getImageData(10, -5, 1, 1);
+_assertSame(imgdata2.data[0], 0, "imgdata2.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata2.data[1], 0, "imgdata2.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata2.data[2], 0, "imgdata2.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata2.data[3], 0, "imgdata2.data[\""+(3)+"\"]", "0");
+var imgdata3 = ctx.getImageData(200, 5, 1, 1);
+_assertSame(imgdata3.data[0], 0, "imgdata3.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata3.data[1], 0, "imgdata3.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata3.data[2], 0, "imgdata3.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata3.data[3], 0, "imgdata3.data[\""+(3)+"\"]", "0");
+var imgdata4 = ctx.getImageData(10, 60, 1, 1);
+_assertSame(imgdata4.data[0], 0, "imgdata4.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata4.data[1], 0, "imgdata4.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata4.data[2], 0, "imgdata4.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata4.data[3], 0, "imgdata4.data[\""+(3)+"\"]", "0");
+var imgdata5 = ctx.getImageData(100, 10, 1, 1);
+_assertSame(imgdata5.data[0], 0, "imgdata5.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata5.data[1], 0, "imgdata5.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata5.data[2], 0, "imgdata5.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata5.data[3], 0, "imgdata5.data[\""+(3)+"\"]", "0");
+var imgdata6 = ctx.getImageData(0, 10, 1, 1);
+_assertSame(imgdata6.data[0], 0, "imgdata6.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata6.data[1], 136, "imgdata6.data[\""+(1)+"\"]", "136");
+_assertSame(imgdata6.data[2], 255, "imgdata6.data[\""+(2)+"\"]", "255");
+_assertSame(imgdata6.data[3], 255, "imgdata6.data[\""+(3)+"\"]", "255");
+var imgdata7 = ctx.getImageData(-10, 10, 20, 20);
+_assertSame(imgdata7.data[ 0*4+0], 0, "imgdata7.data[ 0*4+0]", "0");
+_assertSame(imgdata7.data[ 0*4+1], 0, "imgdata7.data[ 0*4+1]", "0");
+_assertSame(imgdata7.data[ 0*4+2], 0, "imgdata7.data[ 0*4+2]", "0");
+_assertSame(imgdata7.data[ 0*4+3], 0, "imgdata7.data[ 0*4+3]", "0");
+_assertSame(imgdata7.data[ 9*4+0], 0, "imgdata7.data[ 9*4+0]", "0");
+_assertSame(imgdata7.data[ 9*4+1], 0, "imgdata7.data[ 9*4+1]", "0");
+_assertSame(imgdata7.data[ 9*4+2], 0, "imgdata7.data[ 9*4+2]", "0");
+_assertSame(imgdata7.data[ 9*4+3], 0, "imgdata7.data[ 9*4+3]", "0");
+_assertSame(imgdata7.data[10*4+0], 0, "imgdata7.data[10*4+0]", "0");
+_assertSame(imgdata7.data[10*4+1], 136, "imgdata7.data[10*4+1]", "136");
+_assertSame(imgdata7.data[10*4+2], 255, "imgdata7.data[10*4+2]", "255");
+_assertSame(imgdata7.data[10*4+3], 255, "imgdata7.data[10*4+3]", "255");
+_assertSame(imgdata7.data[19*4+0], 0, "imgdata7.data[19*4+0]", "0");
+_assertSame(imgdata7.data[19*4+1], 136, "imgdata7.data[19*4+1]", "136");
+_assertSame(imgdata7.data[19*4+2], 255, "imgdata7.data[19*4+2]", "255");
+_assertSame(imgdata7.data[19*4+3], 255, "imgdata7.data[19*4+3]", "255");
+_assertSame(imgdata7.data[20*4+0], 0, "imgdata7.data[20*4+0]", "0");
+_assertSame(imgdata7.data[20*4+1], 0, "imgdata7.data[20*4+1]", "0");
+_assertSame(imgdata7.data[20*4+2], 0, "imgdata7.data[20*4+2]", "0");
+_assertSame(imgdata7.data[20*4+3], 0, "imgdata7.data[20*4+3]", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.worker.js
new file mode 100644
index 0000000..0cc5fd4a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.outside.worker.js
@@ -0,0 +1,72 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.source.outside
+// Description:getImageData() returns transparent black outside the canvas
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns transparent black outside the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#08f';
+ctx.fillRect(0, 0, 100, 50);
+var imgdata1 = ctx.getImageData(-10, 5, 1, 1);
+_assertSame(imgdata1.data[0], 0, "imgdata1.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata1.data[1], 0, "imgdata1.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata1.data[2], 0, "imgdata1.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata1.data[3], 0, "imgdata1.data[\""+(3)+"\"]", "0");
+var imgdata2 = ctx.getImageData(10, -5, 1, 1);
+_assertSame(imgdata2.data[0], 0, "imgdata2.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata2.data[1], 0, "imgdata2.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata2.data[2], 0, "imgdata2.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata2.data[3], 0, "imgdata2.data[\""+(3)+"\"]", "0");
+var imgdata3 = ctx.getImageData(200, 5, 1, 1);
+_assertSame(imgdata3.data[0], 0, "imgdata3.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata3.data[1], 0, "imgdata3.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata3.data[2], 0, "imgdata3.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata3.data[3], 0, "imgdata3.data[\""+(3)+"\"]", "0");
+var imgdata4 = ctx.getImageData(10, 60, 1, 1);
+_assertSame(imgdata4.data[0], 0, "imgdata4.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata4.data[1], 0, "imgdata4.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata4.data[2], 0, "imgdata4.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata4.data[3], 0, "imgdata4.data[\""+(3)+"\"]", "0");
+var imgdata5 = ctx.getImageData(100, 10, 1, 1);
+_assertSame(imgdata5.data[0], 0, "imgdata5.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata5.data[1], 0, "imgdata5.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata5.data[2], 0, "imgdata5.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata5.data[3], 0, "imgdata5.data[\""+(3)+"\"]", "0");
+var imgdata6 = ctx.getImageData(0, 10, 1, 1);
+_assertSame(imgdata6.data[0], 0, "imgdata6.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata6.data[1], 136, "imgdata6.data[\""+(1)+"\"]", "136");
+_assertSame(imgdata6.data[2], 255, "imgdata6.data[\""+(2)+"\"]", "255");
+_assertSame(imgdata6.data[3], 255, "imgdata6.data[\""+(3)+"\"]", "255");
+var imgdata7 = ctx.getImageData(-10, 10, 20, 20);
+_assertSame(imgdata7.data[ 0*4+0], 0, "imgdata7.data[ 0*4+0]", "0");
+_assertSame(imgdata7.data[ 0*4+1], 0, "imgdata7.data[ 0*4+1]", "0");
+_assertSame(imgdata7.data[ 0*4+2], 0, "imgdata7.data[ 0*4+2]", "0");
+_assertSame(imgdata7.data[ 0*4+3], 0, "imgdata7.data[ 0*4+3]", "0");
+_assertSame(imgdata7.data[ 9*4+0], 0, "imgdata7.data[ 9*4+0]", "0");
+_assertSame(imgdata7.data[ 9*4+1], 0, "imgdata7.data[ 9*4+1]", "0");
+_assertSame(imgdata7.data[ 9*4+2], 0, "imgdata7.data[ 9*4+2]", "0");
+_assertSame(imgdata7.data[ 9*4+3], 0, "imgdata7.data[ 9*4+3]", "0");
+_assertSame(imgdata7.data[10*4+0], 0, "imgdata7.data[10*4+0]", "0");
+_assertSame(imgdata7.data[10*4+1], 136, "imgdata7.data[10*4+1]", "136");
+_assertSame(imgdata7.data[10*4+2], 255, "imgdata7.data[10*4+2]", "255");
+_assertSame(imgdata7.data[10*4+3], 255, "imgdata7.data[10*4+3]", "255");
+_assertSame(imgdata7.data[19*4+0], 0, "imgdata7.data[19*4+0]", "0");
+_assertSame(imgdata7.data[19*4+1], 136, "imgdata7.data[19*4+1]", "136");
+_assertSame(imgdata7.data[19*4+2], 255, "imgdata7.data[19*4+2]", "255");
+_assertSame(imgdata7.data[19*4+3], 255, "imgdata7.data[19*4+3]", "255");
+_assertSame(imgdata7.data[20*4+0], 0, "imgdata7.data[20*4+0]", "0");
+_assertSame(imgdata7.data[20*4+1], 0, "imgdata7.data[20*4+1]", "0");
+_assertSame(imgdata7.data[20*4+2], 0, "imgdata7.data[20*4+2]", "0");
+_assertSame(imgdata7.data[20*4+3], 0, "imgdata7.data[20*4+3]", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.html
new file mode 100644
index 0000000..e95dd55
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.source.size</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.source.size</h1>
+<p class="desc">getImageData() returns bigger ImageData for bigger source rectangle</p>
+
+
+<script>
+var t = async_test("getImageData() returns bigger ImageData for bigger source rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata1 = ctx.getImageData(0, 0, 10, 10);
+var imgdata2 = ctx.getImageData(0, 0, 20, 20);
+_assert(imgdata2.width > imgdata1.width, "imgdata2.width > imgdata1.width");
+_assert(imgdata2.height > imgdata1.height, "imgdata2.height > imgdata1.height");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.worker.js
new file mode 100644
index 0000000..bb8c105a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.source.size.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.source.size
+// Description:getImageData() returns bigger ImageData for bigger source rectangle
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() returns bigger ImageData for bigger source rectangle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata1 = ctx.getImageData(0, 0, 10, 10);
+var imgdata2 = ctx.getImageData(0, 0, 20, 20);
+_assert(imgdata2.width > imgdata1.width, "imgdata2.width > imgdata1.width");
+_assert(imgdata2.height > imgdata1.height, "imgdata2.height > imgdata1.height");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.html
new file mode 100644
index 0000000..ac9563b5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.tiny</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.tiny</h1>
+<p class="desc">getImageData() works for sizes smaller than one pixel</p>
+
+
+<script>
+var t = async_test("getImageData() works for sizes smaller than one pixel");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 0.0001, 0.0001);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+_assertSame(imgdata.width, 1, "imgdata.width", "1");
+_assertSame(imgdata.height, 1, "imgdata.height", "1");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.worker.js
new file mode 100644
index 0000000..3167e465
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.tiny.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.tiny
+// Description:getImageData() works for sizes smaller than one pixel
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() works for sizes smaller than one pixel");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 0.0001, 0.0001);
+_assertSame(imgdata.data.length, imgdata.width*imgdata.height*4, "imgdata.data.length", "imgdata.width*imgdata.height*4");
+_assertSame(imgdata.width, 1, "imgdata.width", "1");
+_assertSame(imgdata.height, 1, "imgdata.height", "1");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.html
new file mode 100644
index 0000000..afd759b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.unaffected</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.unaffected</h1>
+<p class="desc">getImageData() is not affected by context state</p>
+
+
+<script>
+var t = async_test("getImageData() is not affected by context state");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50)
+ctx.save();
+ctx.translate(50, 0);
+ctx.globalAlpha = 0.1;
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#f00';
+ctx.rect(0, 0, 5, 5);
+ctx.clip();
+var imgdata = ctx.getImageData(0, 0, 50, 50);
+ctx.restore();
+ctx.putImageData(imgdata, 50, 0);
+_assertPixelApprox(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.worker.js
new file mode 100644
index 0000000..049042f5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.unaffected.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.unaffected
+// Description:getImageData() is not affected by context state
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() is not affected by context state");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50)
+ctx.save();
+ctx.translate(50, 0);
+ctx.globalAlpha = 0.1;
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#f00';
+ctx.rect(0, 0, 5, 5);
+ctx.clip();
+var imgdata = ctx.getImageData(0, 0, 50, 50);
+ctx.restore();
+ctx.putImageData(imgdata, 50, 0);
+_assertPixelApprox(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.html
new file mode 100644
index 0000000..42d71fc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.get.zero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.get.zero</h1>
+<p class="desc">getImageData() throws INDEX_SIZE_ERR if size is zero</p>
+
+
+<script>
+var t = async_test("getImageData() throws INDEX_SIZE_ERR if size is zero");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.getImageData(1, 1, 10, 0); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.getImageData(1, 1, 0, 10); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.getImageData(1, 1, 0, 0); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.worker.js
new file mode 100644
index 0000000..5886b88e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.get.zero.worker.js
@@ -0,0 +1,22 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.get.zero
+// Description:getImageData() throws INDEX_SIZE_ERR if size is zero
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getImageData() throws INDEX_SIZE_ERR if size is zero");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws("INDEX_SIZE_ERR", function() { ctx.getImageData(1, 1, 10, 0); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.getImageData(1, 1, 0, 10); });
+assert_throws("INDEX_SIZE_ERR", function() { ctx.getImageData(1, 1, 0, 0); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.html
new file mode 100644
index 0000000..b367821c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.object.clamp</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.object.clamp</h1>
+<p class="desc">ImageData.data clamps numbers to [0, 255]</p>
+
+
+<script>
+var t = async_test("ImageData.data clamps numbers to [0, 255]");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+imgdata.data[0] = 300;
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+imgdata.data[0] = 100;
+imgdata.data[0] = -100;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = 200+Math.pow(2, 32);
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+imgdata.data[0] = 100;
+imgdata.data[0] = -200-Math.pow(2, 32);
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = Math.pow(10, 39);
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+imgdata.data[0] = 100;
+imgdata.data[0] = -Math.pow(10, 39);
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = -Infinity;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = Infinity;
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.worker.js
new file mode 100644
index 0000000..00400bf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.clamp.worker.js
@@ -0,0 +1,44 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.object.clamp
+// Description:ImageData.data clamps numbers to [0, 255]
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("ImageData.data clamps numbers to [0, 255]");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+imgdata.data[0] = 300;
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+imgdata.data[0] = 100;
+imgdata.data[0] = -100;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = 200+Math.pow(2, 32);
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+imgdata.data[0] = 100;
+imgdata.data[0] = -200-Math.pow(2, 32);
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = Math.pow(10, 39);
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+imgdata.data[0] = 100;
+imgdata.data[0] = -Math.pow(10, 39);
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = -Infinity;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = Infinity;
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.html
new file mode 100644
index 0000000..31224ba
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.object.nan</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.object.nan</h1>
+<p class="desc">ImageData.data converts NaN to 0</p>
+
+
+<script>
+var t = async_test("ImageData.data converts NaN to 0");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+imgdata.data[0] = NaN;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = "cheese";
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.worker.js
new file mode 100644
index 0000000..ef665e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.nan.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.object.nan
+// Description:ImageData.data converts NaN to 0
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("ImageData.data converts NaN to 0");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+imgdata.data[0] = NaN;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 100;
+imgdata.data[0] = "cheese";
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.html
new file mode 100644
index 0000000..04b9b02ce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.object.properties</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.object.properties</h1>
+<p class="desc">ImageData objects have the right properties</p>
+
+
+<script>
+var t = async_test("ImageData objects have the right properties");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(typeof(imgdata.width), 'number', "typeof(imgdata.width)", "'number'");
+_assertSame(typeof(imgdata.height), 'number', "typeof(imgdata.height)", "'number'");
+_assertSame(typeof(imgdata.data), 'object', "typeof(imgdata.data)", "'object'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.worker.js
new file mode 100644
index 0000000..1094c660
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.properties.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.object.properties
+// Description:ImageData objects have the right properties
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("ImageData objects have the right properties");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+_assertSame(typeof(imgdata.width), 'number', "typeof(imgdata.width)", "'number'");
+_assertSame(typeof(imgdata.height), 'number', "typeof(imgdata.height)", "'number'");
+_assertSame(typeof(imgdata.data), 'object', "typeof(imgdata.data)", "'object'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.html
new file mode 100644
index 0000000..7ad3b6b1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.object.readonly</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.object.readonly</h1>
+<p class="desc">ImageData objects properties are read-only</p>
+
+
+<script>
+var t = async_test("ImageData objects properties are read-only");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+var w = imgdata.width;
+var h = imgdata.height;
+var d = imgdata.data;
+imgdata.width = 123;
+imgdata.height = 123;
+imgdata.data = [100,100,100,100];
+_assertSame(imgdata.width, w, "imgdata.width", "w");
+_assertSame(imgdata.height, h, "imgdata.height", "h");
+_assertSame(imgdata.data, d, "imgdata.data", "d");
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata.data[1], 0, "imgdata.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata.data[2], 0, "imgdata.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata.data[3], 0, "imgdata.data[\""+(3)+"\"]", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.worker.js
new file mode 100644
index 0000000..770df89
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.readonly.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.object.readonly
+// Description:ImageData objects properties are read-only
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("ImageData objects properties are read-only");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+var w = imgdata.width;
+var h = imgdata.height;
+var d = imgdata.data;
+imgdata.width = 123;
+imgdata.height = 123;
+imgdata.data = [100,100,100,100];
+_assertSame(imgdata.width, w, "imgdata.width", "w");
+_assertSame(imgdata.height, h, "imgdata.height", "h");
+_assertSame(imgdata.data, d, "imgdata.data", "d");
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+_assertSame(imgdata.data[1], 0, "imgdata.data[\""+(1)+"\"]", "0");
+_assertSame(imgdata.data[2], 0, "imgdata.data[\""+(2)+"\"]", "0");
+_assertSame(imgdata.data[3], 0, "imgdata.data[\""+(3)+"\"]", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.round.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.round.html
new file mode 100644
index 0000000..cbb7519
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.round.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.object.round</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.object.round</h1>
+<p class="desc">ImageData.data rounds numbers with round-to-zero</p>
+
+
+<script>
+var t = async_test("ImageData.data rounds numbers with round-to-zero");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 0.499;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 0.5;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 0.501;
+_assertSame(imgdata.data[0], 1, "imgdata.data[\""+(0)+"\"]", "1");
+imgdata.data[0] = 1.499;
+_assertSame(imgdata.data[0], 1, "imgdata.data[\""+(0)+"\"]", "1");
+imgdata.data[0] = 1.5;
+_assertSame(imgdata.data[0], 2, "imgdata.data[\""+(0)+"\"]", "2");
+imgdata.data[0] = 1.501;
+_assertSame(imgdata.data[0], 2, "imgdata.data[\""+(0)+"\"]", "2");
+imgdata.data[0] = 2.5;
+_assertSame(imgdata.data[0], 2, "imgdata.data[\""+(0)+"\"]", "2");
+imgdata.data[0] = 3.5;
+_assertSame(imgdata.data[0], 4, "imgdata.data[\""+(0)+"\"]", "4");
+imgdata.data[0] = 252.5;
+_assertSame(imgdata.data[0], 252, "imgdata.data[\""+(0)+"\"]", "252");
+imgdata.data[0] = 253.5;
+_assertSame(imgdata.data[0], 254, "imgdata.data[\""+(0)+"\"]", "254");
+imgdata.data[0] = 254.5;
+_assertSame(imgdata.data[0], 254, "imgdata.data[\""+(0)+"\"]", "254");
+imgdata.data[0] = 256.5;
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+imgdata.data[0] = -0.5;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = -1.5;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.round.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.round.worker.js
new file mode 100644
index 0000000..6924e6c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.round.worker.js
@@ -0,0 +1,48 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.object.round
+// Description:ImageData.data rounds numbers with round-to-zero
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("ImageData.data rounds numbers with round-to-zero");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 0.499;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 0.5;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = 0.501;
+_assertSame(imgdata.data[0], 1, "imgdata.data[\""+(0)+"\"]", "1");
+imgdata.data[0] = 1.499;
+_assertSame(imgdata.data[0], 1, "imgdata.data[\""+(0)+"\"]", "1");
+imgdata.data[0] = 1.5;
+_assertSame(imgdata.data[0], 2, "imgdata.data[\""+(0)+"\"]", "2");
+imgdata.data[0] = 1.501;
+_assertSame(imgdata.data[0], 2, "imgdata.data[\""+(0)+"\"]", "2");
+imgdata.data[0] = 2.5;
+_assertSame(imgdata.data[0], 2, "imgdata.data[\""+(0)+"\"]", "2");
+imgdata.data[0] = 3.5;
+_assertSame(imgdata.data[0], 4, "imgdata.data[\""+(0)+"\"]", "4");
+imgdata.data[0] = 252.5;
+_assertSame(imgdata.data[0], 252, "imgdata.data[\""+(0)+"\"]", "252");
+imgdata.data[0] = 253.5;
+_assertSame(imgdata.data[0], 254, "imgdata.data[\""+(0)+"\"]", "254");
+imgdata.data[0] = 254.5;
+_assertSame(imgdata.data[0], 254, "imgdata.data[\""+(0)+"\"]", "254");
+imgdata.data[0] = 256.5;
+_assertSame(imgdata.data[0], 255, "imgdata.data[\""+(0)+"\"]", "255");
+imgdata.data[0] = -0.5;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+imgdata.data[0] = -1.5;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.set.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.set.html
new file mode 100644
index 0000000..f39240e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.set.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.object.set</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.object.set</h1>
+<p class="desc">ImageData.data can be modified</p>
+
+
+<script>
+var t = async_test("ImageData.data can be modified");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+_assertSame(imgdata.data[0], 100, "imgdata.data[\""+(0)+"\"]", "100");
+imgdata.data[0] = 200;
+_assertSame(imgdata.data[0], 200, "imgdata.data[\""+(0)+"\"]", "200");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.set.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.set.worker.js
new file mode 100644
index 0000000..6ab6fe1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.set.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.object.set
+// Description:ImageData.data can be modified
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("ImageData.data can be modified");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+_assertSame(imgdata.data[0], 100, "imgdata.data[\""+(0)+"\"]", "100");
+imgdata.data[0] = 200;
+_assertSame(imgdata.data[0], 200, "imgdata.data[\""+(0)+"\"]", "200");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.string.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.string.html
new file mode 100644
index 0000000..7d944d00
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.string.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.object.string</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.object.string</h1>
+<p class="desc">ImageData.data converts strings to numbers with ToNumber</p>
+
+
+<script>
+var t = async_test("ImageData.data converts strings to numbers with ToNumber");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+imgdata.data[0] = "110";
+_assertSame(imgdata.data[0], 110, "imgdata.data[\""+(0)+"\"]", "110");
+imgdata.data[0] = 100;
+imgdata.data[0] = "0x78";
+_assertSame(imgdata.data[0], 120, "imgdata.data[\""+(0)+"\"]", "120");
+imgdata.data[0] = 100;
+imgdata.data[0] = " +130e0 ";
+_assertSame(imgdata.data[0], 130, "imgdata.data[\""+(0)+"\"]", "130");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.string.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.string.worker.js
new file mode 100644
index 0000000..41a38395
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.string.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.object.string
+// Description:ImageData.data converts strings to numbers with ToNumber
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("ImageData.data converts strings to numbers with ToNumber");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+imgdata.data[0] = "110";
+_assertSame(imgdata.data[0], 110, "imgdata.data[\""+(0)+"\"]", "110");
+imgdata.data[0] = 100;
+imgdata.data[0] = "0x78";
+_assertSame(imgdata.data[0], 120, "imgdata.data[\""+(0)+"\"]", "120");
+imgdata.data[0] = 100;
+imgdata.data[0] = " +130e0 ";
+_assertSame(imgdata.data[0], 130, "imgdata.data[\""+(0)+"\"]", "130");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.html
new file mode 100644
index 0000000..81c2959
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.object.undefined</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.object.undefined</h1>
+<p class="desc">ImageData.data converts undefined to 0</p>
+
+
+<script>
+var t = async_test("ImageData.data converts undefined to 0");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+imgdata.data[0] = undefined;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.worker.js
new file mode 100644
index 0000000..bcded33
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.object.undefined.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.object.undefined
+// Description:ImageData.data converts undefined to 0
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("ImageData.data converts undefined to 0");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+imgdata.data[0] = 100;
+imgdata.data[0] = undefined;
+_assertSame(imgdata.data[0], 0, "imgdata.data[\""+(0)+"\"]", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.html
new file mode 100644
index 0000000..5236717e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.alpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.alpha</h1>
+<p class="desc">putImageData() puts non-solid image data correctly</p>
+
+
+<script>
+var t = async_test("putImageData() puts non-solid image data correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(0, 255, 0, 0.25)';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,64, "50,25", "0,255,0,64", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.worker.js
new file mode 100644
index 0000000..a1020fd8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.alpha.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.alpha
+// Description:putImageData() puts non-solid image data correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() puts non-solid image data correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = 'rgba(0, 255, 0, 0.25)';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,64, "50,25", "0,255,0,64", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.html
new file mode 100644
index 0000000..9123460c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.basic</h1>
+<p class="desc">putImageData() puts image data from getImageData() onto the canvas</p>
+
+
+<script>
+var t = async_test("putImageData() puts image data from getImageData() onto the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.worker.js
new file mode 100644
index 0000000..3959348b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.basic.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.basic
+// Description:putImageData() puts image data from getImageData() onto the canvas
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() puts image data from getImageData() onto the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.html
new file mode 100644
index 0000000..3df65e00
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.clip</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.clip</h1>
+<p class="desc">putImageData() is not affected by clipping regions</p>
+
+
+<script>
+var t = async_test("putImageData() is not affected by clipping regions");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.beginPath();
+ctx.rect(0, 0, 50, 50);
+ctx.clip();
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.worker.js
new file mode 100644
index 0000000..e038e41
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.clip.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.clip
+// Description:putImageData() is not affected by clipping regions
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() is not affected by clipping regions");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.beginPath();
+ctx.rect(0, 0, 50, 50);
+ctx.clip();
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.created.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.created.html
new file mode 100644
index 0000000..7f55f175
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.created.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.created</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.created</h1>
+<p class="desc">putImageData() puts image data from createImageData() onto the canvas</p>
+
+
+<script>
+var t = async_test("putImageData() puts image data from createImageData() onto the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.createImageData(100, 50);
+for (var i = 0; i < imgdata.data.length; i += 4) {
+    imgdata.data[i] = 0;
+    imgdata.data[i+1] = 255;
+    imgdata.data[i+2] = 0;
+    imgdata.data[i+3] = 255;
+}
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.created.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.created.worker.js
new file mode 100644
index 0000000..aede851
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.created.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.created
+// Description:putImageData() puts image data from createImageData() onto the canvas
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() puts image data from createImageData() onto the canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.createImageData(100, 50);
+for (var i = 0; i < imgdata.data.length; i += 4) {
+    imgdata.data[i] = 0;
+    imgdata.data[i+1] = 255;
+    imgdata.data[i+2] = 0;
+    imgdata.data[i+3] = 255;
+}
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.html
new file mode 100644
index 0000000..a7af5f2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.cross</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.cross</h1>
+<p class="desc">putImageData() accepts image data got from a different canvas</p>
+
+
+<script>
+var t = async_test("putImageData() accepts image data got from a different canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 0, 100, 50)
+var imgdata = ctx2.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.worker.js
new file mode 100644
index 0000000..d811560
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.cross.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.cross
+// Description:putImageData() accepts image data got from a different canvas
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() accepts image data got from a different canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#0f0';
+ctx2.fillRect(0, 0, 100, 50)
+var imgdata = ctx2.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.html
new file mode 100644
index 0000000..3b5f437
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.dirty.negative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.dirty.negative</h1>
+<p class="desc">putImageData() handles negative-sized dirty rectangles correctly</p>
+
+
+<script>
+var t = async_test("putImageData() handles negative-sized dirty rectangles correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 20, 20)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(40, 20, 20, 20)
+ctx.putImageData(imgdata, 40, 20, 20, 20, -20, -20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,15, 0,255,0,255, "50,15", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,45, 0,255,0,255, "50,45", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.worker.js
new file mode 100644
index 0000000..460e7977
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.negative.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.dirty.negative
+// Description:putImageData() handles negative-sized dirty rectangles correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() handles negative-sized dirty rectangles correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 20, 20)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(40, 20, 20, 20)
+ctx.putImageData(imgdata, 40, 20, 20, 20, -20, -20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,15, 0,255,0,255, "50,15", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,45, 0,255,0,255, "50,45", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.html
new file mode 100644
index 0000000..1ada85b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.dirty.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.dirty.outside</h1>
+<p class="desc">putImageData() handles dirty rectangles outside the canvas correctly</p>
+
+
+<script>
+var t = async_test("putImageData() handles dirty rectangles outside the canvas correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 100, 20, 20, 20, -20, -20);
+ctx.putImageData(imgdata, 200, 200, 0, 0, 100, 50);
+ctx.putImageData(imgdata, 40, 20, -30, -20, 30, 20);
+ctx.putImageData(imgdata, -30, 20, 0, 0, 30, 20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 98,15, 0,255,0,255, "98,15", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 98,45, 0,255,0,255, "98,45", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 1,5, 0,255,0,255, "1,5", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 1,45, 0,255,0,255, "1,45", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.worker.js
new file mode 100644
index 0000000..7a194f9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.outside.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.dirty.outside
+// Description:putImageData() handles dirty rectangles outside the canvas correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() handles dirty rectangles outside the canvas correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 100, 20, 20, 20, -20, -20);
+ctx.putImageData(imgdata, 200, 200, 0, 0, 100, 50);
+ctx.putImageData(imgdata, 40, 20, -30, -20, 30, 20);
+ctx.putImageData(imgdata, -30, 20, 0, 0, 30, 20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 98,15, 0,255,0,255, "98,15", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 98,45, 0,255,0,255, "98,45", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 1,5, 0,255,0,255, "1,5", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 1,45, 0,255,0,255, "1,45", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.html
new file mode 100644
index 0000000..5e132d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.dirty.rect1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.dirty.rect1</h1>
+<p class="desc">putImageData() only modifies areas inside the dirty rectangle, using width and height</p>
+
+
+<script>
+var t = async_test("putImageData() only modifies areas inside the dirty rectangle, using width and height");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 20, 20)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(40, 20, 20, 20)
+ctx.putImageData(imgdata, 40, 20, 0, 0, 20, 20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,15, 0,255,0,255, "50,15", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,45, 0,255,0,255, "50,45", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.worker.js
new file mode 100644
index 0000000..7d9ca46
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect1.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.dirty.rect1
+// Description:putImageData() only modifies areas inside the dirty rectangle, using width and height
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() only modifies areas inside the dirty rectangle, using width and height");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 20, 20)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(40, 20, 20, 20)
+ctx.putImageData(imgdata, 40, 20, 0, 0, 20, 20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,15, 0,255,0,255, "50,15", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,45, 0,255,0,255, "50,45", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.html
new file mode 100644
index 0000000..96056d1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.dirty.rect2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.dirty.rect2</h1>
+<p class="desc">putImageData() only modifies areas inside the dirty rectangle, using x and y</p>
+
+
+<script>
+var t = async_test("putImageData() only modifies areas inside the dirty rectangle, using x and y");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#0f0';
+ctx.fillRect(60, 30, 20, 20)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(40, 20, 20, 20)
+ctx.putImageData(imgdata, -20, -10, 60, 30, 20, 20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,15, 0,255,0,255, "50,15", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,45, 0,255,0,255, "50,45", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.worker.js
new file mode 100644
index 0000000..524a6d7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.rect2.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.dirty.rect2
+// Description:putImageData() only modifies areas inside the dirty rectangle, using x and y
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() only modifies areas inside the dirty rectangle, using x and y");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#0f0';
+ctx.fillRect(60, 30, 20, 20)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(40, 20, 20, 20)
+ctx.putImageData(imgdata, -20, -10, 60, 30, 20, 20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 35,25, 0,255,0,255, "35,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 65,25, 0,255,0,255, "65,25", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,15, 0,255,0,255, "50,15", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,45, 0,255,0,255, "50,45", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.html
new file mode 100644
index 0000000..c17df92
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.dirty.zero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.dirty.zero</h1>
+<p class="desc">putImageData() with zero-sized dirty rectangle puts nothing</p>
+
+
+<script>
+var t = async_test("putImageData() with zero-sized dirty rectangle puts nothing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0, 0, 0, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.worker.js
new file mode 100644
index 0000000..e9bb4ac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.dirty.zero.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.dirty.zero
+// Description:putImageData() with zero-sized dirty rectangle puts nothing
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() with zero-sized dirty rectangle puts nothing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.putImageData(imgdata, 0, 0, 0, 0, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.html
new file mode 100644
index 0000000..ddfe634
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.modified</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.modified</h1>
+<p class="desc">putImageData() puts modified image data correctly</p>
+
+
+<script>
+var t = async_test("putImageData() puts modified image data correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(45, 20, 10, 10)
+var imgdata = ctx.getImageData(45, 20, 10, 10);
+for (var i = 0, len = imgdata.width*imgdata.height*4; i < len; i += 4)
+{
+    imgdata.data[i] = 0;
+    imgdata.data[i+1] = 255;
+}
+ctx.putImageData(imgdata, 45, 20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.worker.js
new file mode 100644
index 0000000..d22588dc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.modified.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.modified
+// Description:putImageData() puts modified image data correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() puts modified image data correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+ctx.fillStyle = '#f00';
+ctx.fillRect(45, 20, 10, 10)
+var imgdata = ctx.getImageData(45, 20, 10, 10);
+for (var i = 0, len = imgdata.width*imgdata.height*4; i < len; i += 4)
+{
+    imgdata.data[i] = 0;
+    imgdata.data[i+1] = 255;
+}
+ctx.putImageData(imgdata, 45, 20);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.html
new file mode 100644
index 0000000..d2f174af
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.nonfinite</h1>
+<p class="desc">putImageData() throws TypeError if arguments are not finite</p>
+
+
+<script>
+var t = async_test("putImageData() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, -Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, NaN, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, NaN); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, -Infinity, 10, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, NaN, 10, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, -Infinity, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, NaN, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, -Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, NaN, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, -Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, NaN, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, -Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, NaN, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, 10, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, 10, NaN); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, Infinity, Infinity); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.worker.js
new file mode 100644
index 0000000..5ba39d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.nonfinite.worker.js
@@ -0,0 +1,102 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.nonfinite
+// Description:putImageData() throws TypeError if arguments are not finite
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() throws TypeError if arguments are not finite");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = ctx.getImageData(0, 0, 10, 10);
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, -Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, NaN, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, NaN); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, -Infinity, 10, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, NaN, 10, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, -Infinity, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, NaN, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, -Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, NaN, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, -Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, NaN, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, -Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, NaN, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, 10, -Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, 10, NaN); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, Infinity, 10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, Infinity, 10, 10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, 10, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, Infinity, 10, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, Infinity, 10, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, 10, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, 10, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, Infinity, 10, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, Infinity, Infinity, 10); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, Infinity, Infinity, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, Infinity, 10, Infinity); });
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 10, 10, 10, 10, Infinity, Infinity); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.null.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.null.html
new file mode 100644
index 0000000..a0f7017
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.null.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.null</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.null</h1>
+<p class="desc">putImageData() with null imagedata throws TypeError</p>
+
+
+<script>
+var t = async_test("putImageData() with null imagedata throws TypeError");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.putImageData(null, 0, 0); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.null.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.null.worker.js
new file mode 100644
index 0000000..253508f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.null.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.null
+// Description:putImageData() with null imagedata throws TypeError
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() with null imagedata throws TypeError");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+assert_throws(new TypeError(), function() { ctx.putImageData(null, 0, 0); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.path.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.path.html
new file mode 100644
index 0000000..47ae20a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.path.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.path</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.path</h1>
+<p class="desc">putImageData() does not affect the current path</p>
+
+
+<script>
+var t = async_test("putImageData() does not affect the current path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.rect(0, 0, 100, 50);
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.putImageData(imgdata, 0, 0);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.path.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.path.worker.js
new file mode 100644
index 0000000..c2ef145
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.path.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.path
+// Description:putImageData() does not affect the current path
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() does not affect the current path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.rect(0, 0, 100, 50);
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.putImageData(imgdata, 0, 0);
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.html
new file mode 100644
index 0000000..3f80709
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.unaffected</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.unaffected</h1>
+<p class="desc">putImageData() is not affected by context state</p>
+
+
+<script>
+var t = async_test("putImageData() is not affected by context state");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.globalAlpha = 0.1;
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#f00';
+ctx.shadowBlur = 1;
+ctx.translate(100, 50);
+ctx.scale(0.1, 0.1);
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.worker.js
new file mode 100644
index 0000000..23e4cea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unaffected.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.unaffected
+// Description:putImageData() is not affected by context state
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() is not affected by context state");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50)
+var imgdata = ctx.getImageData(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50)
+ctx.globalAlpha = 0.1;
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#f00';
+ctx.shadowBlur = 1;
+ctx.translate(100, 50);
+ctx.scale(0.1, 0.1);
+ctx.putImageData(imgdata, 0, 0);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.html
new file mode 100644
index 0000000..72640bf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.unchanged</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.unchanged</h1>
+<p class="desc">putImageData(getImageData(...), ...) has no effect</p>
+
+
+<script>
+var t = async_test("putImageData(getImageData(...), ...) has no effect");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var i = 0;
+for (var y = 0; y < 16; ++y) {
+    for (var x = 0; x < 16; ++x, ++i) {
+        ctx.fillStyle = 'rgba(' + i + ',' + (Math.floor(i*1.5) % 256) + ',' + (Math.floor(i*23.3) % 256) + ',' + (i/256) + ')';
+        ctx.fillRect(x, y, 1, 1);
+    }
+}
+var imgdata1 = ctx.getImageData(0.1, 0.2, 15.8, 15.9);
+var olddata = [];
+for (var i = 0; i < imgdata1.data.length; ++i)
+    olddata[i] = imgdata1.data[i];
+ctx.putImageData(imgdata1, 0.1, 0.2);
+var imgdata2 = ctx.getImageData(0.1, 0.2, 15.8, 15.9);
+for (var i = 0; i < imgdata2.data.length; ++i) {
+    _assertSame(olddata[i], imgdata2.data[i], "olddata[\""+(i)+"\"]", "imgdata2.data[\""+(i)+"\"]");
+}
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.worker.js
new file mode 100644
index 0000000..418e46c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.unchanged.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.unchanged
+// Description:putImageData(getImageData(...), ...) has no effect
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData(getImageData(...), ...) has no effect");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var i = 0;
+for (var y = 0; y < 16; ++y) {
+    for (var x = 0; x < 16; ++x, ++i) {
+        ctx.fillStyle = 'rgba(' + i + ',' + (Math.floor(i*1.5) % 256) + ',' + (Math.floor(i*23.3) % 256) + ',' + (i/256) + ')';
+        ctx.fillRect(x, y, 1, 1);
+    }
+}
+var imgdata1 = ctx.getImageData(0.1, 0.2, 15.8, 15.9);
+var olddata = [];
+for (var i = 0; i < imgdata1.data.length; ++i)
+    olddata[i] = imgdata1.data[i];
+ctx.putImageData(imgdata1, 0.1, 0.2);
+var imgdata2 = ctx.getImageData(0.1, 0.2, 15.8, 15.9);
+for (var i = 0; i < imgdata2.data.length; ++i) {
+    _assertSame(olddata[i], imgdata2.data[i], "olddata[\""+(i)+"\"]", "imgdata2.data[\""+(i)+"\"]");
+}
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.html
new file mode 100644
index 0000000..1a31879
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.imageData.put.wrongtype</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.imageData.put.wrongtype</h1>
+<p class="desc">putImageData() does not accept non-ImageData objects</p>
+
+
+<script>
+var t = async_test("putImageData() does not accept non-ImageData objects");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = { width: 1, height: 1, data: [255, 0, 0, 255] };
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 0, 0); });
+assert_throws(new TypeError(), function() { ctx.putImageData("cheese", 0, 0); });
+assert_throws(new TypeError(), function() { ctx.putImageData(42, 0, 0); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.worker.js
new file mode 100644
index 0000000..18d737c7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/pixel-manipulation/2d.imageData.put.wrongtype.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.imageData.put.wrongtype
+// Description:putImageData() does not accept non-ImageData objects
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("putImageData() does not accept non-ImageData objects");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var imgdata = { width: 1, height: 1, data: [255, 0, 0, 255] };
+assert_throws(new TypeError(), function() { ctx.putImageData(imgdata, 0, 0); });
+assert_throws(new TypeError(), function() { ctx.putImageData("cheese", 0, 0); });
+assert_throws(new TypeError(), function() { ctx.putImageData(42, 0, 0); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.1.html
new file mode 100644
index 0000000..c223e25
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.1.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.alpha.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.alpha.1</h1>
+<p class="desc">Shadow colour alpha components are used</p>
+
+
+<script>
+var t = async_test("Shadow colour alpha components are used");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = 'rgba(255, 0, 0, 0.01)';
+ctx.shadowOffsetY = 50;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 4);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.1.worker.js
new file mode 100644
index 0000000..9852033
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.1.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.alpha.1
+// Description:Shadow colour alpha components are used
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadow colour alpha components are used");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = 'rgba(255, 0, 0, 0.01)';
+ctx.shadowOffsetY = 50;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 4);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.2.html
new file mode 100644
index 0000000..53dd015
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.2.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.alpha.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.alpha.2</h1>
+<p class="desc">Shadow colour alpha components are used</p>
+
+
+<script>
+var t = async_test("Shadow colour alpha components are used");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = 'rgba(0, 0, 255, 0.5)';
+ctx.shadowOffsetY = 50;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.2.worker.js
new file mode 100644
index 0000000..491397a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.2.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.alpha.2
+// Description:Shadow colour alpha components are used
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadow colour alpha components are used");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = 'rgba(0, 0, 255, 0.5)';
+ctx.shadowOffsetY = 50;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.3.html
new file mode 100644
index 0000000..5cac64d8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.3.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.alpha.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.alpha.3</h1>
+<p class="desc">Shadows are affected by globalAlpha</p>
+
+
+<script>
+var t = async_test("Shadows are affected by globalAlpha");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00'; // (work around broken Firefox globalAlpha caching)
+ctx.shadowColor = '#00f';
+ctx.shadowOffsetY = 50;
+ctx.globalAlpha = 0.5;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.3.worker.js
new file mode 100644
index 0000000..f30cba2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.3.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.alpha.3
+// Description:Shadows are affected by globalAlpha
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are affected by globalAlpha");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00'; // (work around broken Firefox globalAlpha caching)
+ctx.shadowColor = '#00f';
+ctx.shadowOffsetY = 50;
+ctx.globalAlpha = 0.5;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.4.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.4.html
new file mode 100644
index 0000000..e7aad4f3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.4.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.alpha.4</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.alpha.4</h1>
+<p class="desc">Shadows with alpha components are correctly affected by globalAlpha</p>
+
+
+<script>
+var t = async_test("Shadows with alpha components are correctly affected by globalAlpha");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00'; // (work around broken Firefox globalAlpha caching)
+ctx.shadowColor = 'rgba(0, 0, 255, 0.707)';
+ctx.shadowOffsetY = 50;
+ctx.globalAlpha = 0.707;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.4.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.4.worker.js
new file mode 100644
index 0000000..1c1b619
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.4.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.alpha.4
+// Description:Shadows with alpha components are correctly affected by globalAlpha
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows with alpha components are correctly affected by globalAlpha");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00'; // (work around broken Firefox globalAlpha caching)
+ctx.shadowColor = 'rgba(0, 0, 255, 0.707)';
+ctx.shadowOffsetY = 50;
+ctx.globalAlpha = 0.707;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.5.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.5.html
new file mode 100644
index 0000000..db31f71
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.5.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.alpha.5</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.alpha.5</h1>
+<p class="desc">Shadows of shapes with alpha components are drawn correctly</p>
+
+
+<script>
+var t = async_test("Shadows of shapes with alpha components are drawn correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = 'rgba(64, 0, 0, 0.5)';
+ctx.shadowColor = '#00f';
+ctx.shadowOffsetY = 50;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.5.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.5.worker.js
new file mode 100644
index 0000000..dd7699f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.alpha.5.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.alpha.5
+// Description:Shadows of shapes with alpha components are drawn correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows of shapes with alpha components are drawn correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = 'rgba(64, 0, 0, 0.5)';
+ctx.shadowColor = '#00f';
+ctx.shadowOffsetY = 50;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.html
new file mode 100644
index 0000000..290ffbb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowBlur.initial</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowBlur.initial</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.worker.js
new file mode 100644
index 0000000..0406e5f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.initial.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowBlur.initial
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.html
new file mode 100644
index 0000000..108c0d0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowBlur.invalid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowBlur.invalid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowBlur = 1;
+ctx.shadowBlur = -2;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+ctx.shadowBlur = 1;
+ctx.shadowBlur = Infinity;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+ctx.shadowBlur = 1;
+ctx.shadowBlur = -Infinity;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+ctx.shadowBlur = 1;
+ctx.shadowBlur = NaN;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js
new file mode 100644
index 0000000..d4e37a1c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.invalid.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowBlur.invalid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowBlur = 1;
+ctx.shadowBlur = -2;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+ctx.shadowBlur = 1;
+ctx.shadowBlur = Infinity;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+ctx.shadowBlur = 1;
+ctx.shadowBlur = -Infinity;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+ctx.shadowBlur = 1;
+ctx.shadowBlur = NaN;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.html
new file mode 100644
index 0000000..45a8395c8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowBlur.valid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowBlur.valid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowBlur = 1;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+ctx.shadowBlur = 0.5;
+_assertSame(ctx.shadowBlur, 0.5, "ctx.shadowBlur", "0.5");
+ctx.shadowBlur = 1e6;
+_assertSame(ctx.shadowBlur, 1e6, "ctx.shadowBlur", "1e6");
+ctx.shadowBlur = 0;
+_assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js
new file mode 100644
index 0000000..aada608
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowBlur.valid.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowBlur.valid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowBlur = 1;
+_assertSame(ctx.shadowBlur, 1, "ctx.shadowBlur", "1");
+ctx.shadowBlur = 0.5;
+_assertSame(ctx.shadowBlur, 0.5, "ctx.shadowBlur", "0.5");
+ctx.shadowBlur = 1e6;
+_assertSame(ctx.shadowBlur, 1e6, "ctx.shadowBlur", "1e6");
+ctx.shadowBlur = 0;
+_assertSame(ctx.shadowBlur, 0, "ctx.shadowBlur", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.html
new file mode 100644
index 0000000..83c7628d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowColor.initial</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowColor.initial</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.shadowColor, 'rgba(0, 0, 0, 0)', "ctx.shadowColor", "'rgba(0, 0, 0, 0)'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.worker.js
new file mode 100644
index 0000000..5e13b9b3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.initial.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowColor.initial
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.shadowColor, 'rgba(0, 0, 0, 0)', "ctx.shadowColor", "'rgba(0, 0, 0, 0)'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.html
new file mode 100644
index 0000000..b4d661df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowColor.invalid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowColor.invalid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowColor = '#00ff00';
+ctx.shadowColor = 'bogus';
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+ctx.shadowColor = '#00ff00';
+ctx.shadowColor = 'red bogus';
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+ctx.shadowColor = '#00ff00';
+ctx.shadowColor = ctx;
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+ctx.shadowColor = '#00ff00';
+ctx.shadowColor = undefined;
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js
new file mode 100644
index 0000000..aad23bd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.invalid.worker.js
@@ -0,0 +1,31 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowColor.invalid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowColor = '#00ff00';
+ctx.shadowColor = 'bogus';
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+ctx.shadowColor = '#00ff00';
+ctx.shadowColor = 'red bogus';
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+ctx.shadowColor = '#00ff00';
+ctx.shadowColor = ctx;
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+ctx.shadowColor = '#00ff00';
+ctx.shadowColor = undefined;
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.html
new file mode 100644
index 0000000..318a4ec
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowColor.valid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowColor.valid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowColor = 'lime';
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+ctx.shadowColor = 'RGBA(0,255, 0,0)';
+_assertSame(ctx.shadowColor, 'rgba(0, 255, 0, 0)', "ctx.shadowColor", "'rgba(0, 255, 0, 0)'");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.worker.js
new file mode 100644
index 0000000..b5a711fa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowColor.valid.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowColor.valid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowColor = 'lime';
+_assertSame(ctx.shadowColor, '#00ff00', "ctx.shadowColor", "'#00ff00'");
+ctx.shadowColor = 'RGBA(0,255, 0,0)';
+_assertSame(ctx.shadowColor, 'rgba(0, 255, 0, 0)', "ctx.shadowColor", "'rgba(0, 255, 0, 0)'");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.html
new file mode 100644
index 0000000..7efd45e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowOffset.initial</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowOffset.initial</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
+_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.worker.js
new file mode 100644
index 0000000..08e2bf4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.initial.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowOffset.initial
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
+_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.html
new file mode 100644
index 0000000..8db0cd5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowOffset.invalid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowOffset.invalid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowOffsetX = 1;
+ctx.shadowOffsetY = 2;
+ctx.shadowOffsetX = Infinity;
+ctx.shadowOffsetY = Infinity;
+_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+ctx.shadowOffsetX = 1;
+ctx.shadowOffsetY = 2;
+ctx.shadowOffsetX = -Infinity;
+ctx.shadowOffsetY = -Infinity;
+_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+ctx.shadowOffsetX = 1;
+ctx.shadowOffsetY = 2;
+ctx.shadowOffsetX = NaN;
+ctx.shadowOffsetY = NaN;
+_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js
new file mode 100644
index 0000000..2b02e946
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.invalid.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowOffset.invalid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowOffsetX = 1;
+ctx.shadowOffsetY = 2;
+ctx.shadowOffsetX = Infinity;
+ctx.shadowOffsetY = Infinity;
+_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+ctx.shadowOffsetX = 1;
+ctx.shadowOffsetY = 2;
+ctx.shadowOffsetX = -Infinity;
+ctx.shadowOffsetY = -Infinity;
+_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+ctx.shadowOffsetX = 1;
+ctx.shadowOffsetY = 2;
+ctx.shadowOffsetX = NaN;
+ctx.shadowOffsetY = NaN;
+_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.html
new file mode 100644
index 0000000..19fde85
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.attributes.shadowOffset.valid</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.attributes.shadowOffset.valid</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowOffsetX = 1;
+ctx.shadowOffsetY = 2;
+_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+ctx.shadowOffsetX = 0.5;
+ctx.shadowOffsetY = 0.25;
+_assertSame(ctx.shadowOffsetX, 0.5, "ctx.shadowOffsetX", "0.5");
+_assertSame(ctx.shadowOffsetY, 0.25, "ctx.shadowOffsetY", "0.25");
+ctx.shadowOffsetX = -0.5;
+ctx.shadowOffsetY = -0.25;
+_assertSame(ctx.shadowOffsetX, -0.5, "ctx.shadowOffsetX", "-0.5");
+_assertSame(ctx.shadowOffsetY, -0.25, "ctx.shadowOffsetY", "-0.25");
+ctx.shadowOffsetX = 0;
+ctx.shadowOffsetY = 0;
+_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
+_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
+ctx.shadowOffsetX = 1e6;
+ctx.shadowOffsetY = 1e6;
+_assertSame(ctx.shadowOffsetX, 1e6, "ctx.shadowOffsetX", "1e6");
+_assertSame(ctx.shadowOffsetY, 1e6, "ctx.shadowOffsetY", "1e6");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js
new file mode 100644
index 0000000..b6dacb4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.attributes.shadowOffset.valid.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.attributes.shadowOffset.valid
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowOffsetX = 1;
+ctx.shadowOffsetY = 2;
+_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
+_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
+ctx.shadowOffsetX = 0.5;
+ctx.shadowOffsetY = 0.25;
+_assertSame(ctx.shadowOffsetX, 0.5, "ctx.shadowOffsetX", "0.5");
+_assertSame(ctx.shadowOffsetY, 0.25, "ctx.shadowOffsetY", "0.25");
+ctx.shadowOffsetX = -0.5;
+ctx.shadowOffsetY = -0.25;
+_assertSame(ctx.shadowOffsetX, -0.5, "ctx.shadowOffsetX", "-0.5");
+_assertSame(ctx.shadowOffsetY, -0.25, "ctx.shadowOffsetY", "-0.25");
+ctx.shadowOffsetX = 0;
+ctx.shadowOffsetY = 0;
+_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
+_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
+ctx.shadowOffsetX = 1e6;
+ctx.shadowOffsetY = 1e6;
+_assertSame(ctx.shadowOffsetX, 1e6, "ctx.shadowOffsetX", "1e6");
+_assertSame(ctx.shadowOffsetY, 1e6, "ctx.shadowOffsetY", "1e6");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.alpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.alpha.html
new file mode 100644
index 0000000..9f6dafb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.alpha.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.canvas.alpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.canvas.alpha</h1>
+<p class="desc">Shadows are drawn correctly for partially-transparent canvases</p>
+
+
+<script>
+var t = async_test("Shadows are drawn correctly for partially-transparent canvases");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)';
+ctx2.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#00f';
+ctx.drawImage(offscreenCanvas2, 0, -50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.alpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.alpha.worker.js
new file mode 100644
index 0000000..a0b9eee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.alpha.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.canvas.alpha
+// Description:Shadows are drawn correctly for partially-transparent canvases
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn correctly for partially-transparent canvases");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = 'rgba(255, 0, 0, 0.5)';
+ctx2.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#00f';
+ctx.drawImage(offscreenCanvas2, 0, -50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.basic.html
new file mode 100644
index 0000000..c372ef4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.basic.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.canvas.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.canvas.basic</h1>
+<p class="desc">Shadows are drawn for canvases</p>
+
+
+<script>
+var t = async_test("Shadows are drawn for canvases");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+ctx.drawImage(offscreenCanvas2, 0, -50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.basic.worker.js
new file mode 100644
index 0000000..3d95499f3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.basic.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.canvas.basic
+// Description:Shadows are drawn for canvases
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn for canvases");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+ctx.drawImage(offscreenCanvas2, 0, -50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.html
new file mode 100644
index 0000000..4350516
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.canvas.transparent.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.canvas.transparent.1</h1>
+<p class="desc">Shadows are not drawn for transparent canvases</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for transparent canvases");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetY = 50;
+ctx.drawImage(offscreenCanvas2, 0, -50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.worker.js
new file mode 100644
index 0000000..7ba697b5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.canvas.transparent.1
+// Description:Shadows are not drawn for transparent canvases
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for transparent canvases");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetY = 50;
+ctx.drawImage(offscreenCanvas2, 0, -50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.html
new file mode 100644
index 0000000..ded18f7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.canvas.transparent.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.canvas.transparent.2</h1>
+<p class="desc">Shadows are not drawn for transparent parts of canvases</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for transparent parts of canvases");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+ctx.drawImage(offscreenCanvas2, 50, -50);
+ctx.shadowColor = '#f00';
+ctx.drawImage(offscreenCanvas2, -50, -50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.worker.js
new file mode 100644
index 0000000..d91fa16
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.canvas.transparent.2.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.canvas.transparent.2
+// Description:Shadows are not drawn for transparent parts of canvases
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for transparent parts of canvases");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx2.fillStyle = '#f00';
+ctx2.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+ctx.drawImage(offscreenCanvas2, 50, -50);
+ctx.shadowColor = '#f00';
+ctx.drawImage(offscreenCanvas2, -50, -50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.1.html
new file mode 100644
index 0000000..9d5e33a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.clip.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.clip.1</h1>
+<p class="desc">Shadows of clipped shapes are still drawn within the clipping region</p>
+
+
+<script>
+var t = async_test("Shadows of clipped shapes are still drawn within the clipping region");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50);
+ctx.save();
+ctx.beginPath();
+ctx.rect(50, 0, 50, 50);
+ctx.clip();
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 50;
+ctx.fillRect(0, 0, 50, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.1.worker.js
new file mode 100644
index 0000000..d6a444d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.1.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.clip.1
+// Description:Shadows of clipped shapes are still drawn within the clipping region
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows of clipped shapes are still drawn within the clipping region");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50);
+ctx.save();
+ctx.beginPath();
+ctx.rect(50, 0, 50, 50);
+ctx.clip();
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 50;
+ctx.fillRect(0, 0, 50, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.2.html
new file mode 100644
index 0000000..586fa9e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.clip.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.clip.2</h1>
+<p class="desc">Shadows are not drawn outside the clipping region</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn outside the clipping region");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, 0, 50, 50);
+ctx.save();
+ctx.beginPath();
+ctx.rect(0, 0, 50, 50);
+ctx.clip();
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetX = 50;
+ctx.fillRect(0, 0, 50, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.2.worker.js
new file mode 100644
index 0000000..eac6bc31
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.2.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.clip.2
+// Description:Shadows are not drawn outside the clipping region
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn outside the clipping region");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, 0, 50, 50);
+ctx.save();
+ctx.beginPath();
+ctx.rect(0, 0, 50, 50);
+ctx.clip();
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetX = 50;
+ctx.fillRect(0, 0, 50, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.3.html
new file mode 100644
index 0000000..77bb41c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.3.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.clip.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.clip.3</h1>
+<p class="desc">Shadows of clipped shapes are still drawn within the clipping region</p>
+
+
+<script>
+var t = async_test("Shadows of clipped shapes are still drawn within the clipping region");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, 0, 50, 50);
+ctx.save();
+ctx.beginPath();
+ctx.rect(0, 0, 50, 50);
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 50;
+ctx.fillRect(-50, 0, 50, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.3.worker.js
new file mode 100644
index 0000000..809ee0b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.clip.3.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.clip.3
+// Description:Shadows of clipped shapes are still drawn within the clipping region
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows of clipped shapes are still drawn within the clipping region");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, 0, 50, 50);
+ctx.save();
+ctx.beginPath();
+ctx.rect(0, 0, 50, 50);
+ctx.clip();
+ctx.fillStyle = '#f00';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 50;
+ctx.fillRect(-50, 0, 50, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.1.html
new file mode 100644
index 0000000..51c458c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.composite.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.composite.1</h1>
+<p class="desc">Shadows are drawn using globalCompositeOperation</p>
+
+
+<script>
+var t = async_test("Shadows are drawn using globalCompositeOperation");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.globalCompositeOperation = 'xor';
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetX = 100;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, 0, 200, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.1.worker.js
new file mode 100644
index 0000000..5c81a2c3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.1.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.composite.1
+// Description:Shadows are drawn using globalCompositeOperation
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn using globalCompositeOperation");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.globalCompositeOperation = 'xor';
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetX = 100;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, 0, 200, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.2.html
new file mode 100644
index 0000000..a0355c6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.2.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.composite.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.composite.2</h1>
+<p class="desc">Shadows are drawn using globalCompositeOperation</p>
+
+
+<script>
+var t = async_test("Shadows are drawn using globalCompositeOperation");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.globalCompositeOperation = 'xor';
+ctx.shadowColor = '#f00';
+ctx.shadowBlur = 1;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-10, -10, 120, 70);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.2.worker.js
new file mode 100644
index 0000000..2ab91b7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.2.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.composite.2
+// Description:Shadows are drawn using globalCompositeOperation
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn using globalCompositeOperation");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.globalCompositeOperation = 'xor';
+ctx.shadowColor = '#f00';
+ctx.shadowBlur = 1;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-10, -10, 120, 70);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.3.html
new file mode 100644
index 0000000..4cbf1902
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.3.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.composite.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.composite.3</h1>
+<p class="desc">Areas outside shadows are drawn correctly with destination-out</p>
+
+
+<script>
+var t = async_test("Areas outside shadows are drawn correctly with destination-out");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.globalCompositeOperation = 'destination-out';
+ctx.shadowColor = '#f00';
+ctx.shadowBlur = 10;
+ctx.fillStyle = '#f00';
+ctx.fillRect(200, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 5,5, 0,255,0,255, "5,5", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.3.worker.js
new file mode 100644
index 0000000..8573022
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.composite.3.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.composite.3
+// Description:Areas outside shadows are drawn correctly with destination-out
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Areas outside shadows are drawn correctly with destination-out");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.globalCompositeOperation = 'destination-out';
+ctx.shadowColor = '#f00';
+ctx.shadowBlur = 10;
+ctx.fillStyle = '#f00';
+ctx.fillRect(200, 0, 100, 50);
+_assertPixelApprox(offscreenCanvas, 5,5, 0,255,0,255, "5,5", "0,255,0,255", 2);
+_assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.blur.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.blur.html
new file mode 100644
index 0000000..e6ad2937
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.blur.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.enable.blur</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.enable.blur</h1>
+<p class="desc">Shadows are drawn if shadowBlur is set</p>
+
+
+<script>
+var t = async_test("Shadows are drawn if shadowBlur is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#0f0';
+ctx.shadowBlur = 0.1;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.blur.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.blur.worker.js
new file mode 100644
index 0000000..610a38b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.blur.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.enable.blur
+// Description:Shadows are drawn if shadowBlur is set
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn if shadowBlur is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#0f0';
+ctx.shadowBlur = 0.1;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.1.html
new file mode 100644
index 0000000..f8ecf85f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.1.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.enable.off.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.enable.off.1</h1>
+<p class="desc">Shadows are not drawn when only shadowColor is set</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn when only shadowColor is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowColor = '#f00';
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.1.worker.js
new file mode 100644
index 0000000..dad5c0e5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.1.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.enable.off.1
+// Description:Shadows are not drawn when only shadowColor is set
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn when only shadowColor is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.shadowColor = '#f00';
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.2.html
new file mode 100644
index 0000000..3a23c8b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.2.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.enable.off.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.enable.off.2</h1>
+<p class="desc">Shadows are not drawn when only shadowColor is set</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn when only shadowColor is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#f00';
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.2.worker.js
new file mode 100644
index 0000000..371f582
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.off.2.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.enable.off.2
+// Description:Shadows are not drawn when only shadowColor is set
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn when only shadowColor is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#f00';
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.x.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.x.html
new file mode 100644
index 0000000..b2f147b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.x.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.enable.x</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.enable.x</h1>
+<p class="desc">Shadows are drawn if shadowOffsetX is set</p>
+
+
+<script>
+var t = async_test("Shadows are drawn if shadowOffsetX is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 0.1;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.x.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.x.worker.js
new file mode 100644
index 0000000..1f70635
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.x.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.enable.x
+// Description:Shadows are drawn if shadowOffsetX is set
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn if shadowOffsetX is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 0.1;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.y.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.y.html
new file mode 100644
index 0000000..a01d61f2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.y.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.enable.y</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.enable.y</h1>
+<p class="desc">Shadows are drawn if shadowOffsetY is set</p>
+
+
+<script>
+var t = async_test("Shadows are drawn if shadowOffsetY is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 0.1;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.y.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.y.worker.js
new file mode 100644
index 0000000..f1d0f27
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.enable.y.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.enable.y
+// Description:Shadows are drawn if shadowOffsetY is set
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn if shadowOffsetY is set");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.globalCompositeOperation = 'destination-atop';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 0.1;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.alpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.alpha.html
new file mode 100644
index 0000000..50e7816
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.alpha.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.gradient.alpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.gradient.alpha</h1>
+<p class="desc">Shadows are drawn correctly for partially-transparent gradient fills</p>
+
+
+<script>
+var t = async_test("Shadows are drawn correctly for partially-transparent gradient fills");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var gradient = ctx.createLinearGradient(0, 0, 100, 0);
+gradient.addColorStop(0, 'rgba(255,0,0,0.5)');
+gradient.addColorStop(1, 'rgba(255,0,0,0.5)');
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#00f';
+ctx.fillStyle = gradient;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.alpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.alpha.worker.js
new file mode 100644
index 0000000..07c02cd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.alpha.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.gradient.alpha
+// Description:Shadows are drawn correctly for partially-transparent gradient fills
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn correctly for partially-transparent gradient fills");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var gradient = ctx.createLinearGradient(0, 0, 100, 0);
+gradient.addColorStop(0, 'rgba(255,0,0,0.5)');
+gradient.addColorStop(1, 'rgba(255,0,0,0.5)');
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#00f';
+ctx.fillStyle = gradient;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.basic.html
new file mode 100644
index 0000000..5ff7e66f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.basic.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.gradient.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.gradient.basic</h1>
+<p class="desc">Shadows are drawn for gradient fills</p>
+
+
+<script>
+var t = async_test("Shadows are drawn for gradient fills");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var gradient = ctx.createLinearGradient(0, 0, 100, 0);
+gradient.addColorStop(0, '#f00');
+gradient.addColorStop(1, '#f00');
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+ctx.fillStyle = gradient;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.basic.worker.js
new file mode 100644
index 0000000..90f24bd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.basic.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.gradient.basic
+// Description:Shadows are drawn for gradient fills
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn for gradient fills");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var gradient = ctx.createLinearGradient(0, 0, 100, 0);
+gradient.addColorStop(0, '#f00');
+gradient.addColorStop(1, '#f00');
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+ctx.fillStyle = gradient;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.html
new file mode 100644
index 0000000..80b59bac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.gradient.transparent.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.gradient.transparent.1</h1>
+<p class="desc">Shadows are not drawn for transparent gradient fills</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for transparent gradient fills");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var gradient = ctx.createLinearGradient(0, 0, 100, 0);
+gradient.addColorStop(0, 'rgba(0,0,0,0)');
+gradient.addColorStop(1, 'rgba(0,0,0,0)');
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetY = 50;
+ctx.fillStyle = gradient;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.worker.js
new file mode 100644
index 0000000..9e12ce83
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.1.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.gradient.transparent.1
+// Description:Shadows are not drawn for transparent gradient fills
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for transparent gradient fills");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var gradient = ctx.createLinearGradient(0, 0, 100, 0);
+gradient.addColorStop(0, 'rgba(0,0,0,0)');
+gradient.addColorStop(1, 'rgba(0,0,0,0)');
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetY = 50;
+ctx.fillStyle = gradient;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.html
new file mode 100644
index 0000000..7c1f5678
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.gradient.transparent.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.gradient.transparent.2</h1>
+<p class="desc">Shadows are not drawn for transparent parts of gradient fills</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for transparent parts of gradient fills");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var gradient = ctx.createLinearGradient(0, 0, 100, 0);
+gradient.addColorStop(0, '#f00');
+gradient.addColorStop(0.499, '#f00');
+gradient.addColorStop(0.5, 'rgba(0,0,0,0)');
+gradient.addColorStop(1, 'rgba(0,0,0,0)');
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, 0, 50, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+ctx.fillStyle = gradient;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.worker.js
new file mode 100644
index 0000000..08f46fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.gradient.transparent.2.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.gradient.transparent.2
+// Description:Shadows are not drawn for transparent parts of gradient fills
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for transparent parts of gradient fills");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var gradient = ctx.createLinearGradient(0, 0, 100, 0);
+gradient.addColorStop(0, '#f00');
+gradient.addColorStop(0.499, '#f00');
+gradient.addColorStop(0.5, 'rgba(0,0,0,0)');
+gradient.addColorStop(1, 'rgba(0,0,0,0)');
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, 0, 50, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+ctx.fillStyle = gradient;
+ctx.fillRect(0, -50, 100, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.alpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.alpha.html
new file mode 100644
index 0000000..86483e39
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.alpha.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.image.alpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.image.alpha</h1>
+<p class="desc">Shadows are drawn correctly for partially-transparent images</p>
+
+
+<script>
+var t = async_test("Shadows are drawn correctly for partially-transparent images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#00f';
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/transparent50.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 0, -50);
+    _assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.alpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.alpha.worker.js
new file mode 100644
index 0000000..a624be80
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.alpha.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.image.alpha
+// Description:Shadows are drawn correctly for partially-transparent images
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn correctly for partially-transparent images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#00f';
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/transparent50.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 0, -50);
+    _assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.basic.html
new file mode 100644
index 0000000..5ffd8c6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.basic.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.image.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.image.basic</h1>
+<p class="desc">Shadows are drawn for images</p>
+
+
+<script>
+var t = async_test("Shadows are drawn for images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 0, -50);
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.basic.worker.js
new file mode 100644
index 0000000..0685043
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.basic.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.image.basic
+// Description:Shadows are drawn for images
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn for images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 0, -50);
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.scale.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.scale.html
new file mode 100644
index 0000000..d438f3f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.scale.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.image.scale</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.image.scale</h1>
+<p class="desc">Shadows are drawn correctly for scaled images</p>
+
+
+<script>
+var t = async_test("Shadows are drawn correctly for scaled images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/redtransparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 0, 0, 100, 50, -10, -50, 240, 50);
+    _assertPixelApprox(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255", 2);
+    _assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+    _assertPixelApprox(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255", 2);
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.scale.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.scale.worker.js
new file mode 100644
index 0000000..6f084e9b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.scale.worker.js
@@ -0,0 +1,38 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.image.scale
+// Description:Shadows are drawn correctly for scaled images
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn correctly for scaled images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/redtransparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 0, 0, 100, 50, -10, -50, 240, 50);
+    _assertPixelApprox(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255", 2);
+    _assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+    _assertPixelApprox(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255", 2);
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.section.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.section.html
new file mode 100644
index 0000000..1f29760
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.section.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.image.section</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.image.section</h1>
+<p class="desc">Shadows are not drawn for areas outside image source rectangles</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for areas outside image source rectangles");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#f00';
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/redtransparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 50, 0, 50, 50, 0, -50, 50, 50);
+    _assertPixelApprox(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255", 2);
+    _assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+    _assertPixelApprox(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255", 2);
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.section.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.section.worker.js
new file mode 100644
index 0000000..ad923e0f0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.section.worker.js
@@ -0,0 +1,38 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.image.section
+// Description:Shadows are not drawn for areas outside image source rectangles
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for areas outside image source rectangles");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#f00';
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/redtransparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 50, 0, 50, 50, 0, -50, 50, 50);
+    _assertPixelApprox(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255", 2);
+    _assertPixelApprox(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 2);
+    _assertPixelApprox(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255", 2);
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.1.html
new file mode 100644
index 0000000..f2b2899
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.1.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.image.transparent.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.image.transparent.1</h1>
+<p class="desc">Shadows are not drawn for transparent images</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for transparent images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetY = 50;
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/transparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 0, -50);
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.1.worker.js
new file mode 100644
index 0000000..af2d869f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.1.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.image.transparent.1
+// Description:Shadows are not drawn for transparent images
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for transparent images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetY = 50;
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/transparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 0, -50);
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.2.html
new file mode 100644
index 0000000..5b23ddf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.2.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.image.transparent.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.image.transparent.2</h1>
+<p class="desc">Shadows are not drawn for transparent parts of images</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for transparent parts of images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/redtransparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 50, -50);
+    ctx.shadowColor = '#f00';
+    ctx.drawImage(response, -50, -50);
+    _assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.2.worker.js
new file mode 100644
index 0000000..0b99f362
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.image.transparent.2.worker.js
@@ -0,0 +1,42 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.image.transparent.2
+// Description:Shadows are not drawn for transparent parts of images
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for transparent parts of images");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(50, 0, 50, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/redtransparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    ctx.drawImage(response, 50, -50);
+    ctx.shadowColor = '#f00';
+    ctx.drawImage(response, -50, -50);
+    _assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeX.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeX.html
new file mode 100644
index 0000000..8f8fad7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeX.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.offset.negativeX</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.offset.negativeX</h1>
+<p class="desc">Shadows can be offset with negative x</p>
+
+
+<script>
+var t = async_test("Shadows can be offset with negative x");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = -50;
+ctx.fillRect(50, 0, 50, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeX.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeX.worker.js
new file mode 100644
index 0000000..9908123
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeX.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.offset.negativeX
+// Description:Shadows can be offset with negative x
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows can be offset with negative x");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = -50;
+ctx.fillRect(50, 0, 50, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeY.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeY.html
new file mode 100644
index 0000000..47c3910
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeY.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.offset.negativeY</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.offset.negativeY</h1>
+<p class="desc">Shadows can be offset with negative y</p>
+
+
+<script>
+var t = async_test("Shadows can be offset with negative y");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = -25;
+ctx.fillRect(0, 25, 100, 25);
+_assertPixel(offscreenCanvas, 50,12, 0,255,0,255, "50,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,37, 0,255,0,255, "50,37", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeY.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeY.worker.js
new file mode 100644
index 0000000..998e4ad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.negativeY.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.offset.negativeY
+// Description:Shadows can be offset with negative y
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows can be offset with negative y");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = -25;
+ctx.fillRect(0, 25, 100, 25);
+_assertPixel(offscreenCanvas, 50,12, 0,255,0,255, "50,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,37, 0,255,0,255, "50,37", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveX.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveX.html
new file mode 100644
index 0000000..d66414b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveX.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.offset.positiveX</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.offset.positiveX</h1>
+<p class="desc">Shadows can be offset with positive x</p>
+
+
+<script>
+var t = async_test("Shadows can be offset with positive x");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 50;
+ctx.fillRect(0, 0, 50, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveX.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveX.worker.js
new file mode 100644
index 0000000..e00379fb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveX.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.offset.positiveX
+// Description:Shadows can be offset with positive x
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows can be offset with positive x");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 50;
+ctx.fillRect(0, 0, 50, 50);
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveY.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveY.html
new file mode 100644
index 0000000..6914414
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveY.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.offset.positiveY</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.offset.positiveY</h1>
+<p class="desc">Shadows can be offset with positive y</p>
+
+
+<script>
+var t = async_test("Shadows can be offset with positive y");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 25;
+ctx.fillRect(0, 0, 100, 25);
+_assertPixel(offscreenCanvas, 50,12, 0,255,0,255, "50,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,37, 0,255,0,255, "50,37", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveY.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveY.worker.js
new file mode 100644
index 0000000..e7df6897
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.offset.positiveY.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.offset.positiveY
+// Description:Shadows can be offset with positive y
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows can be offset with positive y");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#0f0';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 25;
+ctx.fillRect(0, 0, 100, 25);
+_assertPixel(offscreenCanvas, 50,12, 0,255,0,255, "50,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,37, 0,255,0,255, "50,37", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.outside.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.outside.html
new file mode 100644
index 0000000..664e509
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.outside.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.outside</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.outside</h1>
+<p class="desc">Shadows of shapes outside the visible area can be offset onto the visible area</p>
+
+
+<script>
+var t = async_test("Shadows of shapes outside the visible area can be offset onto the visible area");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 100;
+ctx.fillRect(-100, 0, 25, 50);
+ctx.shadowOffsetX = -100;
+ctx.fillRect(175, 0, 25, 50);
+ctx.shadowOffsetX = 0;
+ctx.shadowOffsetY = 100;
+ctx.fillRect(25, -100, 50, 25);
+ctx.shadowOffsetY = -100;
+ctx.fillRect(25, 125, 50, 25);
+_assertPixel(offscreenCanvas, 12,25, 0,255,0,255, "12,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 87,25, 0,255,0,255, "87,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,12, 0,255,0,255, "50,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,37, 0,255,0,255, "50,37", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.outside.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.outside.worker.js
new file mode 100644
index 0000000..6d23c72c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.outside.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.outside
+// Description:Shadows of shapes outside the visible area can be offset onto the visible area
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows of shapes outside the visible area can be offset onto the visible area");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 100;
+ctx.fillRect(-100, 0, 25, 50);
+ctx.shadowOffsetX = -100;
+ctx.fillRect(175, 0, 25, 50);
+ctx.shadowOffsetX = 0;
+ctx.shadowOffsetY = 100;
+ctx.fillRect(25, -100, 50, 25);
+ctx.shadowOffsetY = -100;
+ctx.fillRect(25, 125, 50, 25);
+_assertPixel(offscreenCanvas, 12,25, 0,255,0,255, "12,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 87,25, 0,255,0,255, "87,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,12, 0,255,0,255, "50,12", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,37, 0,255,0,255, "50,37", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.alpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.alpha.html
new file mode 100644
index 0000000..371f32a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.alpha.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.pattern.alpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.pattern.alpha</h1>
+<p class="desc">Shadows are drawn correctly for partially-transparent fill patterns</p>
+
+
+<script>
+var t = async_test("Shadows are drawn correctly for partially-transparent fill patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/transparent50.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat');
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.shadowOffsetY = 50;
+    ctx.shadowColor = '#00f';
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.alpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.alpha.worker.js
new file mode 100644
index 0000000..636253a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.alpha.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.pattern.alpha
+// Description:Shadows are drawn correctly for partially-transparent fill patterns
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn correctly for partially-transparent fill patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/transparent50.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat');
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.shadowOffsetY = 50;
+    ctx.shadowColor = '#00f';
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.basic.html
new file mode 100644
index 0000000..cab7648
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.basic.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.pattern.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.pattern.basic</h1>
+<p class="desc">Shadows are drawn for fill patterns</p>
+
+
+<script>
+var t = async_test("Shadows are drawn for fill patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat');
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.shadowColor = '#0f0';
+    ctx.shadowOffsetY = 50;
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.basic.worker.js
new file mode 100644
index 0000000..e8b6033
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.basic.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.pattern.basic
+// Description:Shadows are drawn for fill patterns
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn for fill patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/red.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat');
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.shadowColor = '#0f0';
+    ctx.shadowOffsetY = 50;
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.html
new file mode 100644
index 0000000..315724a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.pattern.transparent.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.pattern.transparent.1</h1>
+<p class="desc">Shadows are not drawn for transparent fill patterns</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for transparent fill patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/transparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat');
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.shadowColor = '#f00';
+    ctx.shadowOffsetY = 50;
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.worker.js
new file mode 100644
index 0000000..3400279
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.1.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.pattern.transparent.1
+// Description:Shadows are not drawn for transparent fill patterns
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for transparent fill patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/transparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat');
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(0, 0, 100, 50);
+    ctx.shadowColor = '#f00';
+    ctx.shadowOffsetY = 50;
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.html
new file mode 100644
index 0000000..668e07f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.pattern.transparent.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.pattern.transparent.2</h1>
+<p class="desc">Shadows are not drawn for transparent parts of fill patterns</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for transparent parts of fill patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/redtransparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat');
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(0, 0, 50, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(50, 0, 50, 50);
+    ctx.shadowOffsetY = 50;
+    ctx.shadowColor = '#0f0';
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+    _assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.worker.js
new file mode 100644
index 0000000..157fbe2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.pattern.transparent.2.worker.js
@@ -0,0 +1,42 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.pattern.transparent.2
+// Description:Shadows are not drawn for transparent parts of fill patterns
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for transparent parts of fill patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var promise = new Promise(function(resolve, reject) {
+    var xhr = new XMLHttpRequest();
+    xhr.open("GET", '/images/redtransparent.png');
+    xhr.responseType = 'blob';
+    xhr.send();
+    xhr.onload = function() {
+        resolve(xhr.response);
+    };
+});
+promise.then(function(response) {
+    var pattern = ctx.createPattern(response, 'repeat');
+    ctx.fillStyle = '#f00';
+    ctx.fillRect(0, 0, 50, 50);
+    ctx.fillStyle = '#0f0';
+    ctx.fillRect(50, 0, 50, 50);
+    ctx.shadowOffsetY = 50;
+    ctx.shadowColor = '#0f0';
+    ctx.fillStyle = pattern;
+    ctx.fillRect(0, -50, 100, 50);
+    _assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+    _assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+});
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.basic.html
new file mode 100644
index 0000000..be66f3a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.basic.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.stroke.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.stroke.basic</h1>
+<p class="desc">Shadows are drawn for strokes</p>
+
+
+<script>
+var t = async_test("Shadows are drawn for strokes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+ctx.beginPath();
+ctx.lineWidth = 50;
+ctx.moveTo(0, -25);
+ctx.lineTo(100, -25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.basic.worker.js
new file mode 100644
index 0000000..e16536de
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.basic.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.stroke.basic
+// Description:Shadows are drawn for strokes
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn for strokes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+ctx.beginPath();
+ctx.lineWidth = 50;
+ctx.moveTo(0, -25);
+ctx.lineTo(100, -25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.1.html
new file mode 100644
index 0000000..2c460fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.1.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.stroke.cap.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.stroke.cap.1</h1>
+<p class="desc">Shadows are not drawn for areas outside stroke caps</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for areas outside stroke caps");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetY = 50;
+ctx.beginPath();
+ctx.lineWidth = 50;
+ctx.lineCap = 'butt';
+ctx.moveTo(-50, -25);
+ctx.lineTo(0, -25);
+ctx.moveTo(100, -25);
+ctx.lineTo(150, -25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.1.worker.js
new file mode 100644
index 0000000..4c6a1aa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.1.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.stroke.cap.1
+// Description:Shadows are not drawn for areas outside stroke caps
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for areas outside stroke caps");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetY = 50;
+ctx.beginPath();
+ctx.lineWidth = 50;
+ctx.lineCap = 'butt';
+ctx.moveTo(-50, -25);
+ctx.lineTo(0, -25);
+ctx.moveTo(100, -25);
+ctx.lineTo(150, -25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.2.html
new file mode 100644
index 0000000..0e78c1a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.stroke.cap.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.stroke.cap.2</h1>
+<p class="desc">Shadows are drawn for stroke caps</p>
+
+
+<script>
+var t = async_test("Shadows are drawn for stroke caps");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+ctx.beginPath();
+ctx.lineWidth = 50;
+ctx.lineCap = 'square';
+ctx.moveTo(25, -25);
+ctx.lineTo(75, -25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.2.worker.js
new file mode 100644
index 0000000..0c3cae10
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.cap.2.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.stroke.cap.2
+// Description:Shadows are drawn for stroke caps
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn for stroke caps");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetY = 50;
+ctx.beginPath();
+ctx.lineWidth = 50;
+ctx.lineCap = 'square';
+ctx.moveTo(25, -25);
+ctx.lineTo(75, -25);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,25, 0,255,0,255, "1,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,25, 0,255,0,255, "98,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.1.html
new file mode 100644
index 0000000..04a6245
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.1.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.stroke.join.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.stroke.join.1</h1>
+<p class="desc">Shadows are not drawn for areas outside stroke joins</p>
+
+
+<script>
+var t = async_test("Shadows are not drawn for areas outside stroke joins");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetX = 100;
+ctx.lineWidth = 200;
+ctx.lineJoin = 'bevel';
+ctx.beginPath();
+ctx.moveTo(-200, -50);
+ctx.lineTo(-150, -50);
+ctx.lineTo(-151, -100);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.1.worker.js
new file mode 100644
index 0000000..9583720
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.1.worker.js
@@ -0,0 +1,35 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.stroke.join.1
+// Description:Shadows are not drawn for areas outside stroke joins
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are not drawn for areas outside stroke joins");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetX = 100;
+ctx.lineWidth = 200;
+ctx.lineJoin = 'bevel';
+ctx.beginPath();
+ctx.moveTo(-200, -50);
+ctx.lineTo(-150, -50);
+ctx.lineTo(-151, -100);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.2.html
new file mode 100644
index 0000000..6629313b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.2.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.stroke.join.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.stroke.join.2</h1>
+<p class="desc">Shadows are drawn for stroke joins</p>
+
+
+<script>
+var t = async_test("Shadows are drawn for stroke joins");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, 0, 50, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 100;
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.beginPath();
+ctx.moveTo(-200, -50);
+ctx.lineTo(-150, -50);
+ctx.lineTo(-151, -100);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.2.worker.js
new file mode 100644
index 0000000..8b89d74
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.2.worker.js
@@ -0,0 +1,37 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.stroke.join.2
+// Description:Shadows are drawn for stroke joins
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn for stroke joins");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, 0, 50, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#0f0';
+ctx.shadowOffsetX = 100;
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.beginPath();
+ctx.moveTo(-200, -50);
+ctx.lineTo(-150, -50);
+ctx.lineTo(-151, -100);
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.3.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.3.html
new file mode 100644
index 0000000..2fe623b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.3.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.stroke.join.3</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.stroke.join.3</h1>
+<p class="desc">Shadows are drawn for stroke joins respecting miter limit</p>
+
+
+<script>
+var t = async_test("Shadows are drawn for stroke joins respecting miter limit");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetX = 100;
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.miterLimit = 0.1;
+ctx.beginPath();
+ctx.moveTo(-200, -50);
+ctx.lineTo(-150, -50);
+ctx.lineTo(-151, -100); // (not an exact right angle, to avoid some other bug in Firefox 3)
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.3.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.3.worker.js
new file mode 100644
index 0000000..a67d7706
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.stroke.join.3.worker.js
@@ -0,0 +1,36 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.stroke.join.3
+// Description:Shadows are drawn for stroke joins respecting miter limit
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows are drawn for stroke joins respecting miter limit");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.strokeStyle = '#f00';
+ctx.shadowColor = '#f00';
+ctx.shadowOffsetX = 100;
+ctx.lineWidth = 200;
+ctx.lineJoin = 'miter';
+ctx.miterLimit = 0.1;
+ctx.beginPath();
+ctx.moveTo(-200, -50);
+ctx.lineTo(-150, -50);
+ctx.lineTo(-151, -100); // (not an exact right angle, to avoid some other bug in Firefox 3)
+ctx.stroke();
+_assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
+_assertPixel(offscreenCanvas, 48,48, 0,255,0,255, "48,48", "0,255,0,255");
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.1.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.1.html
new file mode 100644
index 0000000..a879a3b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.1.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.transform.1</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.transform.1</h1>
+<p class="desc">Shadows take account of transformations</p>
+
+
+<script>
+var t = async_test("Shadows take account of transformations");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+ctx.translate(100, 100);
+ctx.fillRect(-100, -150, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.1.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.1.worker.js
new file mode 100644
index 0000000..1538935
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.1.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.transform.1
+// Description:Shadows take account of transformations
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadows take account of transformations");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+ctx.translate(100, 100);
+ctx.fillRect(-100, -150, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.2.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.2.html
new file mode 100644
index 0000000..d2452b4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.2.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.shadow.transform.2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.shadow.transform.2</h1>
+<p class="desc">Shadow offsets are not affected by transformations</p>
+
+
+<script>
+var t = async_test("Shadow offsets are not affected by transformations");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+ctx.rotate(Math.PI)
+ctx.fillRect(-100, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.2.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.2.worker.js
new file mode 100644
index 0000000..bc9c7c8d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/shadows/2d.shadow.transform.2.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.shadow.transform.2
+// Description:Shadow offsets are not affected by transformations
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Shadow offsets are not affected by transformations");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.shadowOffsetY = 50;
+ctx.shadowColor = '#0f0';
+ctx.rotate(Math.PI)
+ctx.fillRect(-100, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.html
new file mode 100644
index 0000000..a384e56
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.bitmap</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.bitmap</h1>
+<p class="desc">save()/restore() does not affect the current bitmap</p>
+
+
+<script>
+var t = async_test("save()/restore() does not affect the current bitmap");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.worker.js
new file mode 100644
index 0000000..be240a4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.bitmap.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.bitmap
+// Description:save()/restore() does not affect the current bitmap
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() does not affect the current bitmap");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.html
new file mode 100644
index 0000000..0b3a7ea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.clip</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.clip</h1>
+<p class="desc">save()/restore() affects the clipping path</p>
+
+
+<script>
+var t = async_test("save()/restore() affects the clipping path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.rect(0, 0, 1, 1);
+ctx.clip();
+ctx.restore();
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.worker.js
new file mode 100644
index 0000000..cee7df08
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.clip.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.clip
+// Description:save()/restore() affects the clipping path
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() affects the clipping path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.rect(0, 0, 1, 1);
+ctx.clip();
+ctx.restore();
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.html
new file mode 100644
index 0000000..861312d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.fillStyle</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.fillStyle</h1>
+<p class="desc">save()/restore() works for fillStyle</p>
+
+
+<script>
+var t = async_test("save()/restore() works for fillStyle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.fillStyle;
+ctx.save();
+ctx.fillStyle = "#ff0000";
+ctx.restore();
+_assertSame(ctx.fillStyle, old, "ctx.fillStyle", "old");
+
+// Also test that save() doesn't modify the values
+ctx.fillStyle = "#ff0000";
+old = ctx.fillStyle;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "#ff0000"
+ctx.save();
+_assertSame(ctx.fillStyle, old, "ctx.fillStyle", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.worker.js
new file mode 100644
index 0000000..a722dd0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.fillStyle.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.fillStyle
+// Description:save()/restore() works for fillStyle
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for fillStyle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.fillStyle;
+ctx.save();
+ctx.fillStyle = "#ff0000";
+ctx.restore();
+_assertSame(ctx.fillStyle, old, "ctx.fillStyle", "old");
+
+// Also test that save() doesn't modify the values
+ctx.fillStyle = "#ff0000";
+old = ctx.fillStyle;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "#ff0000"
+ctx.save();
+_assertSame(ctx.fillStyle, old, "ctx.fillStyle", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.html
new file mode 100644
index 0000000..a24c3d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.globalAlpha</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.globalAlpha</h1>
+<p class="desc">save()/restore() works for globalAlpha</p>
+
+
+<script>
+var t = async_test("save()/restore() works for globalAlpha");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.globalAlpha;
+ctx.save();
+ctx.globalAlpha = 0.5;
+ctx.restore();
+_assertSame(ctx.globalAlpha, old, "ctx.globalAlpha", "old");
+
+// Also test that save() doesn't modify the values
+ctx.globalAlpha = 0.5;
+old = ctx.globalAlpha;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 0.5
+ctx.save();
+_assertSame(ctx.globalAlpha, old, "ctx.globalAlpha", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.worker.js
new file mode 100644
index 0000000..6432783c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalAlpha.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.globalAlpha
+// Description:save()/restore() works for globalAlpha
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for globalAlpha");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.globalAlpha;
+ctx.save();
+ctx.globalAlpha = 0.5;
+ctx.restore();
+_assertSame(ctx.globalAlpha, old, "ctx.globalAlpha", "old");
+
+// Also test that save() doesn't modify the values
+ctx.globalAlpha = 0.5;
+old = ctx.globalAlpha;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 0.5
+ctx.save();
+_assertSame(ctx.globalAlpha, old, "ctx.globalAlpha", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html
new file mode 100644
index 0000000..5c512fb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.globalCompositeOperation</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.globalCompositeOperation</h1>
+<p class="desc">save()/restore() works for globalCompositeOperation</p>
+
+
+<script>
+var t = async_test("save()/restore() works for globalCompositeOperation");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.globalCompositeOperation;
+ctx.save();
+ctx.globalCompositeOperation = "copy";
+ctx.restore();
+_assertSame(ctx.globalCompositeOperation, old, "ctx.globalCompositeOperation", "old");
+
+// Also test that save() doesn't modify the values
+ctx.globalCompositeOperation = "copy";
+old = ctx.globalCompositeOperation;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "copy"
+ctx.save();
+_assertSame(ctx.globalCompositeOperation, old, "ctx.globalCompositeOperation", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.worker.js
new file mode 100644
index 0000000..e06c994
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.globalCompositeOperation.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.globalCompositeOperation
+// Description:save()/restore() works for globalCompositeOperation
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for globalCompositeOperation");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.globalCompositeOperation;
+ctx.save();
+ctx.globalCompositeOperation = "copy";
+ctx.restore();
+_assertSame(ctx.globalCompositeOperation, old, "ctx.globalCompositeOperation", "old");
+
+// Also test that save() doesn't modify the values
+ctx.globalCompositeOperation = "copy";
+old = ctx.globalCompositeOperation;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "copy"
+ctx.save();
+_assertSame(ctx.globalCompositeOperation, old, "ctx.globalCompositeOperation", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.html
new file mode 100644
index 0000000..a0e245743
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.lineCap</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.lineCap</h1>
+<p class="desc">save()/restore() works for lineCap</p>
+
+
+<script>
+var t = async_test("save()/restore() works for lineCap");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.lineCap;
+ctx.save();
+ctx.lineCap = "round";
+ctx.restore();
+_assertSame(ctx.lineCap, old, "ctx.lineCap", "old");
+
+// Also test that save() doesn't modify the values
+ctx.lineCap = "round";
+old = ctx.lineCap;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "round"
+ctx.save();
+_assertSame(ctx.lineCap, old, "ctx.lineCap", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.worker.js
new file mode 100644
index 0000000..fa96774
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineCap.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.lineCap
+// Description:save()/restore() works for lineCap
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for lineCap");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.lineCap;
+ctx.save();
+ctx.lineCap = "round";
+ctx.restore();
+_assertSame(ctx.lineCap, old, "ctx.lineCap", "old");
+
+// Also test that save() doesn't modify the values
+ctx.lineCap = "round";
+old = ctx.lineCap;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "round"
+ctx.save();
+_assertSame(ctx.lineCap, old, "ctx.lineCap", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.html
new file mode 100644
index 0000000..75c8a94
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.lineJoin</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.lineJoin</h1>
+<p class="desc">save()/restore() works for lineJoin</p>
+
+
+<script>
+var t = async_test("save()/restore() works for lineJoin");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.lineJoin;
+ctx.save();
+ctx.lineJoin = "round";
+ctx.restore();
+_assertSame(ctx.lineJoin, old, "ctx.lineJoin", "old");
+
+// Also test that save() doesn't modify the values
+ctx.lineJoin = "round";
+old = ctx.lineJoin;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "round"
+ctx.save();
+_assertSame(ctx.lineJoin, old, "ctx.lineJoin", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.worker.js
new file mode 100644
index 0000000..1a4a377
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineJoin.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.lineJoin
+// Description:save()/restore() works for lineJoin
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for lineJoin");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.lineJoin;
+ctx.save();
+ctx.lineJoin = "round";
+ctx.restore();
+_assertSame(ctx.lineJoin, old, "ctx.lineJoin", "old");
+
+// Also test that save() doesn't modify the values
+ctx.lineJoin = "round";
+old = ctx.lineJoin;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "round"
+ctx.save();
+_assertSame(ctx.lineJoin, old, "ctx.lineJoin", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.html
new file mode 100644
index 0000000..565fc63
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.lineWidth</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.lineWidth</h1>
+<p class="desc">save()/restore() works for lineWidth</p>
+
+
+<script>
+var t = async_test("save()/restore() works for lineWidth");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.lineWidth;
+ctx.save();
+ctx.lineWidth = 0.5;
+ctx.restore();
+_assertSame(ctx.lineWidth, old, "ctx.lineWidth", "old");
+
+// Also test that save() doesn't modify the values
+ctx.lineWidth = 0.5;
+old = ctx.lineWidth;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 0.5
+ctx.save();
+_assertSame(ctx.lineWidth, old, "ctx.lineWidth", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.worker.js
new file mode 100644
index 0000000..b04d4bb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.lineWidth.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.lineWidth
+// Description:save()/restore() works for lineWidth
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for lineWidth");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.lineWidth;
+ctx.save();
+ctx.lineWidth = 0.5;
+ctx.restore();
+_assertSame(ctx.lineWidth, old, "ctx.lineWidth", "old");
+
+// Also test that save() doesn't modify the values
+ctx.lineWidth = 0.5;
+old = ctx.lineWidth;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 0.5
+ctx.save();
+_assertSame(ctx.lineWidth, old, "ctx.lineWidth", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.html
new file mode 100644
index 0000000..2173325e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.miterLimit</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.miterLimit</h1>
+<p class="desc">save()/restore() works for miterLimit</p>
+
+
+<script>
+var t = async_test("save()/restore() works for miterLimit");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.miterLimit;
+ctx.save();
+ctx.miterLimit = 0.5;
+ctx.restore();
+_assertSame(ctx.miterLimit, old, "ctx.miterLimit", "old");
+
+// Also test that save() doesn't modify the values
+ctx.miterLimit = 0.5;
+old = ctx.miterLimit;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 0.5
+ctx.save();
+_assertSame(ctx.miterLimit, old, "ctx.miterLimit", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.worker.js
new file mode 100644
index 0000000..0591a7b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.miterLimit.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.miterLimit
+// Description:save()/restore() works for miterLimit
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for miterLimit");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.miterLimit;
+ctx.save();
+ctx.miterLimit = 0.5;
+ctx.restore();
+_assertSame(ctx.miterLimit, old, "ctx.miterLimit", "old");
+
+// Also test that save() doesn't modify the values
+ctx.miterLimit = 0.5;
+old = ctx.miterLimit;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 0.5
+ctx.save();
+_assertSame(ctx.miterLimit, old, "ctx.miterLimit", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.path.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.path.html
new file mode 100644
index 0000000..2c48b99
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.path.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.path</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.path</h1>
+<p class="desc">save()/restore() does not affect the current path</p>
+
+
+<script>
+var t = async_test("save()/restore() does not affect the current path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.rect(0, 0, 100, 50);
+ctx.restore();
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.path.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.path.worker.js
new file mode 100644
index 0000000..83833e5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.path.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.path
+// Description:save()/restore() does not affect the current path
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() does not affect the current path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.rect(0, 0, 100, 50);
+ctx.restore();
+ctx.fillStyle = '#0f0';
+ctx.fill();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.html
new file mode 100644
index 0000000..0f4fccc9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.shadowBlur</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.shadowBlur</h1>
+<p class="desc">save()/restore() works for shadowBlur</p>
+
+
+<script>
+var t = async_test("save()/restore() works for shadowBlur");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.shadowBlur;
+ctx.save();
+ctx.shadowBlur = 5;
+ctx.restore();
+_assertSame(ctx.shadowBlur, old, "ctx.shadowBlur", "old");
+
+// Also test that save() doesn't modify the values
+ctx.shadowBlur = 5;
+old = ctx.shadowBlur;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 5
+ctx.save();
+_assertSame(ctx.shadowBlur, old, "ctx.shadowBlur", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.worker.js
new file mode 100644
index 0000000..c24e643
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowBlur.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.shadowBlur
+// Description:save()/restore() works for shadowBlur
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for shadowBlur");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.shadowBlur;
+ctx.save();
+ctx.shadowBlur = 5;
+ctx.restore();
+_assertSame(ctx.shadowBlur, old, "ctx.shadowBlur", "old");
+
+// Also test that save() doesn't modify the values
+ctx.shadowBlur = 5;
+old = ctx.shadowBlur;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 5
+ctx.save();
+_assertSame(ctx.shadowBlur, old, "ctx.shadowBlur", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.html
new file mode 100644
index 0000000..086ba30
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.shadowColor</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.shadowColor</h1>
+<p class="desc">save()/restore() works for shadowColor</p>
+
+
+<script>
+var t = async_test("save()/restore() works for shadowColor");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.shadowColor;
+ctx.save();
+ctx.shadowColor = "#ff0000";
+ctx.restore();
+_assertSame(ctx.shadowColor, old, "ctx.shadowColor", "old");
+
+// Also test that save() doesn't modify the values
+ctx.shadowColor = "#ff0000";
+old = ctx.shadowColor;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "#ff0000"
+ctx.save();
+_assertSame(ctx.shadowColor, old, "ctx.shadowColor", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.worker.js
new file mode 100644
index 0000000..94e25bb9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowColor.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.shadowColor
+// Description:save()/restore() works for shadowColor
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for shadowColor");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.shadowColor;
+ctx.save();
+ctx.shadowColor = "#ff0000";
+ctx.restore();
+_assertSame(ctx.shadowColor, old, "ctx.shadowColor", "old");
+
+// Also test that save() doesn't modify the values
+ctx.shadowColor = "#ff0000";
+old = ctx.shadowColor;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "#ff0000"
+ctx.save();
+_assertSame(ctx.shadowColor, old, "ctx.shadowColor", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.html
new file mode 100644
index 0000000..f211a03
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.shadowOffsetX</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.shadowOffsetX</h1>
+<p class="desc">save()/restore() works for shadowOffsetX</p>
+
+
+<script>
+var t = async_test("save()/restore() works for shadowOffsetX");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.shadowOffsetX;
+ctx.save();
+ctx.shadowOffsetX = 5;
+ctx.restore();
+_assertSame(ctx.shadowOffsetX, old, "ctx.shadowOffsetX", "old");
+
+// Also test that save() doesn't modify the values
+ctx.shadowOffsetX = 5;
+old = ctx.shadowOffsetX;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 5
+ctx.save();
+_assertSame(ctx.shadowOffsetX, old, "ctx.shadowOffsetX", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.worker.js
new file mode 100644
index 0000000..373afa0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetX.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.shadowOffsetX
+// Description:save()/restore() works for shadowOffsetX
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for shadowOffsetX");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.shadowOffsetX;
+ctx.save();
+ctx.shadowOffsetX = 5;
+ctx.restore();
+_assertSame(ctx.shadowOffsetX, old, "ctx.shadowOffsetX", "old");
+
+// Also test that save() doesn't modify the values
+ctx.shadowOffsetX = 5;
+old = ctx.shadowOffsetX;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 5
+ctx.save();
+_assertSame(ctx.shadowOffsetX, old, "ctx.shadowOffsetX", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.html
new file mode 100644
index 0000000..1c1013b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.shadowOffsetY</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.shadowOffsetY</h1>
+<p class="desc">save()/restore() works for shadowOffsetY</p>
+
+
+<script>
+var t = async_test("save()/restore() works for shadowOffsetY");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.shadowOffsetY;
+ctx.save();
+ctx.shadowOffsetY = 5;
+ctx.restore();
+_assertSame(ctx.shadowOffsetY, old, "ctx.shadowOffsetY", "old");
+
+// Also test that save() doesn't modify the values
+ctx.shadowOffsetY = 5;
+old = ctx.shadowOffsetY;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 5
+ctx.save();
+_assertSame(ctx.shadowOffsetY, old, "ctx.shadowOffsetY", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.worker.js
new file mode 100644
index 0000000..f883a93
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.shadowOffsetY.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.shadowOffsetY
+// Description:save()/restore() works for shadowOffsetY
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for shadowOffsetY");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.shadowOffsetY;
+ctx.save();
+ctx.shadowOffsetY = 5;
+ctx.restore();
+_assertSame(ctx.shadowOffsetY, old, "ctx.shadowOffsetY", "old");
+
+// Also test that save() doesn't modify the values
+ctx.shadowOffsetY = 5;
+old = ctx.shadowOffsetY;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against 5
+ctx.save();
+_assertSame(ctx.shadowOffsetY, old, "ctx.shadowOffsetY", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.html
new file mode 100644
index 0000000..6e74825
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.stack</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.stack</h1>
+<p class="desc">save()/restore() can be nested as a stack</p>
+
+
+<script>
+var t = async_test("save()/restore() can be nested as a stack");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineWidth = 1;
+ctx.save();
+ctx.lineWidth = 2;
+ctx.save();
+ctx.lineWidth = 3;
+_assertSame(ctx.lineWidth, 3, "ctx.lineWidth", "3");
+ctx.restore();
+_assertSame(ctx.lineWidth, 2, "ctx.lineWidth", "2");
+ctx.restore();
+_assertSame(ctx.lineWidth, 1, "ctx.lineWidth", "1");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.worker.js
new file mode 100644
index 0000000..5a0f74b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stack.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.stack
+// Description:save()/restore() can be nested as a stack
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() can be nested as a stack");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.lineWidth = 1;
+ctx.save();
+ctx.lineWidth = 2;
+ctx.save();
+ctx.lineWidth = 3;
+_assertSame(ctx.lineWidth, 3, "ctx.lineWidth", "3");
+ctx.restore();
+_assertSame(ctx.lineWidth, 2, "ctx.lineWidth", "2");
+ctx.restore();
+_assertSame(ctx.lineWidth, 1, "ctx.lineWidth", "1");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.html
new file mode 100644
index 0000000..4097ae9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.stackdepth</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.stackdepth</h1>
+<p class="desc">save()/restore() stack depth is not unreasonably limited</p>
+
+
+<script>
+var t = async_test("save()/restore() stack depth is not unreasonably limited");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var limit = 512;
+for (var i = 1; i < limit; ++i)
+{
+    ctx.save();
+    ctx.lineWidth = i;
+}
+for (var i = limit-1; i > 0; --i)
+{
+    _assertSame(ctx.lineWidth, i, "ctx.lineWidth", "i");
+    ctx.restore();
+}
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.worker.js
new file mode 100644
index 0000000..58a28e0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.stackdepth.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.stackdepth
+// Description:save()/restore() stack depth is not unreasonably limited
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() stack depth is not unreasonably limited");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var limit = 512;
+for (var i = 1; i < limit; ++i)
+{
+    ctx.save();
+    ctx.lineWidth = i;
+}
+for (var i = limit-1; i > 0; --i)
+{
+    _assertSame(ctx.lineWidth, i, "ctx.lineWidth", "i");
+    ctx.restore();
+}
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.html
new file mode 100644
index 0000000..13c0c9f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.strokeStyle</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.strokeStyle</h1>
+<p class="desc">save()/restore() works for strokeStyle</p>
+
+
+<script>
+var t = async_test("save()/restore() works for strokeStyle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.strokeStyle;
+ctx.save();
+ctx.strokeStyle = "#ff0000";
+ctx.restore();
+_assertSame(ctx.strokeStyle, old, "ctx.strokeStyle", "old");
+
+// Also test that save() doesn't modify the values
+ctx.strokeStyle = "#ff0000";
+old = ctx.strokeStyle;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "#ff0000"
+ctx.save();
+_assertSame(ctx.strokeStyle, old, "ctx.strokeStyle", "old");
+ctx.restore();
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.worker.js
new file mode 100644
index 0000000..1f149ed9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.strokeStyle.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.strokeStyle
+// Description:save()/restore() works for strokeStyle
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() works for strokeStyle");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Test that restore() undoes any modifications
+var old = ctx.strokeStyle;
+ctx.save();
+ctx.strokeStyle = "#ff0000";
+ctx.restore();
+_assertSame(ctx.strokeStyle, old, "ctx.strokeStyle", "old");
+
+// Also test that save() doesn't modify the values
+ctx.strokeStyle = "#ff0000";
+old = ctx.strokeStyle;
+    // we're not interested in failures caused by get(set(x)) != x (e.g.
+    // from rounding), so compare against 'old' instead of against "#ff0000"
+ctx.save();
+_assertSame(ctx.strokeStyle, old, "ctx.strokeStyle", "old");
+ctx.restore();
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.html
new file mode 100644
index 0000000..785c128c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.transformation</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.transformation</h1>
+<p class="desc">save()/restore() affects the current transformation matrix</p>
+
+
+<script>
+var t = async_test("save()/restore() affects the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.translate(200, 0);
+ctx.restore();
+ctx.fillStyle = '#f00';
+ctx.fillRect(-200, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.worker.js
new file mode 100644
index 0000000..e5ce45e3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.transformation.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.transformation
+// Description:save()/restore() affects the current transformation matrix
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("save()/restore() affects the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.translate(200, 0);
+ctx.restore();
+ctx.fillStyle = '#f00';
+ctx.fillRect(-200, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.html
new file mode 100644
index 0000000..46aa29e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.state.saverestore.underflow</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.state.saverestore.underflow</h1>
+<p class="desc">restore() with an empty stack has no effect</p>
+
+
+<script>
+var t = async_test("restore() with an empty stack has no effect");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+for (var i = 0; i < 16; ++i)
+    ctx.restore();
+ctx.lineWidth = 0.5;
+ctx.restore();
+_assertSame(ctx.lineWidth, 0.5, "ctx.lineWidth", "0.5");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.worker.js
new file mode 100644
index 0000000..150a31c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-canvas-state/2d.state.saverestore.underflow.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.state.saverestore.underflow
+// Description:restore() with an empty stack has no effect
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("restore() with an empty stack has no effect");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+for (var i = 0; i < 16; ++i)
+    ctx.restore();
+ctx.lineWidth = 0.5;
+ctx.restore();
+_assertSame(ctx.lineWidth, 0.5, "ctx.lineWidth", "0.5");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly-expected.txt
new file mode 100644
index 0000000..0c4f7e4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL canvas is readonly assert_not_equals: offscreenCanvas !== d (got [object OffscreenCanvas][object], expected not [object OffscreenCanvas][object]) got disallowed value object "[object OffscreenCanvas]"
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.html
new file mode 100644
index 0000000..4545b5a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.canvas.readonly</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.canvas.readonly</h1>
+<p class="desc">canvas is readonly</p>
+
+
+<script>
+var t = async_test("canvas is readonly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var d = ctx.canvas;
+_assertDifferent(offscreenCanvas, d, "offscreenCanvas", "d");
+ctx.canvas = c;
+_assertSame(ctx.canvas, d, "ctx.canvas", "d");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.worker.js
new file mode 100644
index 0000000..f2d76f4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.readonly.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.canvas.readonly
+// Description:canvas is readonly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("canvas is readonly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var d = ctx.canvas;
+_assertDifferent(offscreenCanvas, d, "offscreenCanvas", "d");
+ctx.canvas = c;
+_assertSame(ctx.canvas, d, "ctx.canvas", "d");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.html
new file mode 100644
index 0000000..1db64094
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.canvas.reference</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.canvas.reference</h1>
+<p class="desc">canvas refers back to its canvas</p>
+
+
+<script>
+var t = async_test("canvas refers back to its canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.canvas, offscreenCanvas, "ctx.canvas", "offscreenCanvas");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.worker.js
new file mode 100644
index 0000000..ff2666b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.canvas.reference.worker.js
@@ -0,0 +1,20 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.canvas.reference
+// Description:canvas refers back to its canvas
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("canvas refers back to its canvas");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(ctx.canvas, offscreenCanvas, "ctx.canvas", "offscreenCanvas");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.html
new file mode 100644
index 0000000..6011f205
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.getcontext.exists</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.getcontext.exists</h1>
+<p class="desc">The 2D context is implemented</p>
+
+
+<script>
+var t = async_test("The 2D context is implemented");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertDifferent(offscreenCanvas2.getContext('2d'), null, "offscreenCanvas2.getContext('2d')", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.worker.js
new file mode 100644
index 0000000..bae8080
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.exists.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.getcontext.exists
+// Description:The 2D context is implemented
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("The 2D context is implemented");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertDifferent(offscreenCanvas2.getContext('2d'), null, "offscreenCanvas2.getContext('2d')", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs-expected.txt
new file mode 100644
index 0000000..7212cb8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL The 2D context ignores extra getContext arguments Failed to execute 'getContext' on 'OffscreenCanvas': parameter 2 ('attributes') is not an object.
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.html
new file mode 100644
index 0000000..24a68e4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.getcontext.extraargs</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.getcontext.extraargs</h1>
+<p class="desc">The 2D context ignores extra getContext arguments</p>
+
+
+<script>
+var t = async_test("The 2D context ignores extra getContext arguments");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertDifferent(offscreenCanvas2.getContext('2d', false, {}, [], 1, "2"), null, "offscreenCanvas2.getContext('2d', false, {}, [], 1, \"2\")", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.worker.js
new file mode 100644
index 0000000..933aa249
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.extraargs.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.getcontext.extraargs
+// Description:The 2D context ignores extra getContext arguments
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("The 2D context ignores extra getContext arguments");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertDifferent(offscreenCanvas2.getContext('2d', false, {}, [], 1, "2"), null, "offscreenCanvas2.getContext('2d', false, {}, [], 1, \"2\")", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared-expected.txt
new file mode 100644
index 0000000..76d9f47c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL getContext('2d') returns objects which share canvas state offscreenCanvas2 is not defined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.html
new file mode 100644
index 0000000..4f297fa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.getcontext.shared</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.getcontext.shared</h1>
+<p class="desc">getContext('2d') returns objects which share canvas state</p>
+
+
+<script>
+var t = async_test("getContext('2d') returns objects which share canvas state");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx.fillStyle = '#f00';
+ctx2.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.worker.js
new file mode 100644
index 0000000..ecddbde
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.shared.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.getcontext.shared
+// Description:getContext('2d') returns objects which share canvas state
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getContext('2d') returns objects which share canvas state");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var ctx2 = offscreenCanvas2.getContext('2d');
+ctx.fillStyle = '#f00';
+ctx2.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.html
new file mode 100644
index 0000000..8128c6e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.getcontext.unique</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.getcontext.unique</h1>
+<p class="desc">getContext('2d') returns the same object</p>
+
+
+<script>
+var t = async_test("getContext('2d') returns the same object");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext('2d'), offscreenCanvas2.getContext('2d'), "offscreenCanvas2.getContext('2d')", "offscreenCanvas2.getContext('2d')");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.worker.js
new file mode 100644
index 0000000..3e4d6c47
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/2d.getcontext.unique.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.getcontext.unique
+// Description:getContext('2d') returns the same object
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getContext('2d') returns the same object");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext('2d'), offscreenCanvas2.getContext('2d'), "offscreenCanvas2.getContext('2d')", "offscreenCanvas2.getContext('2d')");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.arguments.missing.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.arguments.missing.html
new file mode 100644
index 0000000..dfb7b303
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.arguments.missing.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: context.arguments.missing</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>context.arguments.missing</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+assert_throws(new TypeError(), function() { offscreenCanvas2.getContext(); });
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.arguments.missing.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.arguments.missing.worker.js
new file mode 100644
index 0000000..467b78b0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.arguments.missing.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:context.arguments.missing
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+assert_throws(new TypeError(), function() { offscreenCanvas2.getContext(); });
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive-expected.txt
new file mode 100644
index 0000000..7290637
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Context name "2D" is unrecognised; matching is case sensitive Failed to execute 'getContext' on 'OffscreenCanvas': The provided value '2D' is not a valid enum value of type OffscreenRenderingContextType.
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive.html
new file mode 100644
index 0000000..3b771ed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: context.casesensitive</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>context.casesensitive</h1>
+<p class="desc">Context name "2D" is unrecognised; matching is case sensitive</p>
+
+
+<script>
+var t = async_test("Context name \"2D\" is unrecognised; matching is case sensitive");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext('2D'), null, "offscreenCanvas2.getContext('2D')", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive.worker.js
new file mode 100644
index 0000000..276bf44
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.casesensitive.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:context.casesensitive
+// Description:Context name "2D" is unrecognised; matching is case sensitive
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Context name \"2D\" is unrecognised; matching is case sensitive");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext('2D'), null, "offscreenCanvas2.getContext('2D')", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring-expected.txt
new file mode 100644
index 0000000..2f2c477
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL getContext with empty string returns null Failed to execute 'getContext' on 'OffscreenCanvas': The provided value '' is not a valid enum value of type OffscreenRenderingContextType.
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring.html
new file mode 100644
index 0000000..6e17b6f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: context.emptystring</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>context.emptystring</h1>
+<p class="desc">getContext with empty string returns null</p>
+
+
+<script>
+var t = async_test("getContext with empty string returns null");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext(""), null, "offscreenCanvas2.getContext(\"\")", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring.worker.js
new file mode 100644
index 0000000..573f5f81
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.emptystring.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:context.emptystring
+// Description:getContext with empty string returns null
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getContext with empty string returns null");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext(""), null, "offscreenCanvas2.getContext(\"\")", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname-expected.txt
new file mode 100644
index 0000000..86e24b9f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL getContext with unrecognised context name returns null Failed to execute 'getContext' on 'OffscreenCanvas': The provided value 'This is not an implemented context in any real browser' is not a valid enum value of type OffscreenRenderingContextType.
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.html
new file mode 100644
index 0000000..3be2c00
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: context.unrecognised.badname</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>context.unrecognised.badname</h1>
+<p class="desc">getContext with unrecognised context name returns null</p>
+
+
+<script>
+var t = async_test("getContext with unrecognised context name returns null");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext('This is not an implemented context in any real browser'), null, "offscreenCanvas2.getContext('This is not an implemented context in any real browser')", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.worker.js
new file mode 100644
index 0000000..8205157
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badname.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:context.unrecognised.badname
+// Description:getContext with unrecognised context name returns null
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("getContext with unrecognised context name returns null");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext('This is not an implemented context in any real browser'), null, "offscreenCanvas2.getContext('This is not an implemented context in any real browser')", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix-expected.txt
new file mode 100644
index 0000000..c9d18ed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Context name "2d" plus a suffix is unrecognised Failed to execute 'getContext' on 'OffscreenCanvas': The provided value '2d#' is not a valid enum value of type OffscreenRenderingContextType.
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.html
new file mode 100644
index 0000000..d1e7afb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: context.unrecognised.badsuffix</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>context.unrecognised.badsuffix</h1>
+<p class="desc">Context name "2d" plus a suffix is unrecognised</p>
+
+
+<script>
+var t = async_test("Context name \"2d\" plus a suffix is unrecognised");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext("2d#"), null, "offscreenCanvas2.getContext(\"2d#\")", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.worker.js
new file mode 100644
index 0000000..ccbd61a7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.badsuffix.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:context.unrecognised.badsuffix
+// Description:Context name "2d" plus a suffix is unrecognised
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Context name \"2d\" plus a suffix is unrecognised");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext("2d#"), null, "offscreenCanvas2.getContext(\"2d#\")", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix-expected.txt
new file mode 100644
index 0000000..fed328d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Context name "2d" plus a "\0" suffix is unrecognised Failed to execute 'getContext' on 'OffscreenCanvas': The provided value '2d\0' is not a valid enum value of type OffscreenRenderingContextType.
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.html
new file mode 100644
index 0000000..182c288
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: context.unrecognised.nullsuffix</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>context.unrecognised.nullsuffix</h1>
+<p class="desc">Context name "2d" plus a "\0" suffix is unrecognised</p>
+
+
+<script>
+var t = async_test("Context name \"2d\" plus a \"\\0\" suffix is unrecognised");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext("2d\0"), null, "offscreenCanvas2.getContext(\"2d\\0\")", "null");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.worker.js
new file mode 100644
index 0000000..4364a652
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.nullsuffix.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:context.unrecognised.nullsuffix
+// Description:Context name "2d" plus a "\0" suffix is unrecognised
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Context name \"2d\" plus a \"\\0\" suffix is unrecognised");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext("2d\0"), null, "offscreenCanvas2.getContext(\"2d\\0\")", "null");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode-expected.txt
new file mode 100644
index 0000000..2061cc6f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Context name which kind of looks like "2d" is unrecognised Failed to execute 'getContext' on 'OffscreenCanvas': The provided value '2d' is not a valid enum value of type OffscreenRenderingContextType.
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.html
new file mode 100644
index 0000000..17dc8c2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: context.unrecognised.unicode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>context.unrecognised.unicode</h1>
+<p class="desc">Context name which kind of looks like "2d" is unrecognised</p>
+
+
+<script>
+var t = async_test("Context name which kind of looks like \"2d\" is unrecognised");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext("2\uFF44"), null, "offscreenCanvas2.getContext(\"2\\uFF44\")", "null"); // Fullwidth Latin Small Letter D
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.worker.js
new file mode 100644
index 0000000..4b78e8de
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/context.unrecognised.unicode.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:context.unrecognised.unicode
+// Description:Context name which kind of looks like "2d" is unrecognised
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Context name which kind of looks like \"2d\" is unrecognised");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var offscreenCanvas2 = new OffscreenCanvas(100, 50);
+_assertSame(offscreenCanvas2.getContext("2\uFF44"), null, "offscreenCanvas2.getContext(\"2\\uFF44\")", "null"); // Fullwidth Latin Small Letter D
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.colour.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.colour.html
new file mode 100644
index 0000000..f86f8db
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.colour.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.colour</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.colour</h1>
+<p class="desc">Initial state is transparent black</p>
+
+<p class="notes">Output should be transparent black (not transparent anything-else), but manual
+verification can only confirm that it's transparent - it's not possible to make
+the actual blackness visible.
+
+<script>
+var t = async_test("Initial state is transparent black");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertPixel(offscreenCanvas, 20,20, 0,0,0,0, "20,20", "0,0,0,0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.colour.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.colour.worker.js
new file mode 100644
index 0000000..045f0671
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.colour.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.colour
+// Description:Initial state is transparent black
+// Note:<p class="notes">Output should be transparent black (not transparent anything-else), but manual
+verification can only confirm that it's transparent - it's not possible to make
+the actual blackness visible.
+
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Initial state is transparent black");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertPixel(offscreenCanvas, 20,20, 0,0,0,0, "20,20", "0,0,0,0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.html
new file mode 100644
index 0000000..13ef0c1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.reset.2dstate</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.reset.2dstate</h1>
+<p class="desc">Resetting the canvas state resets 2D state variables</p>
+
+
+<script>
+var t = async_test("Resetting the canvas state resets 2D state variables");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 100;
+var default_val;
+
+default_val = ctx.strokeStyle;
+ctx.strokeStyle = "#ff0000";
+offscreenCanvas.width = 100;
+_assertSame(ctx.strokeStyle, default_val, "ctx.strokeStyle", "default_val");
+
+default_val = ctx.fillStyle;
+ctx.fillStyle = "#ff0000";
+offscreenCanvas.width = 100;
+_assertSame(ctx.fillStyle, default_val, "ctx.fillStyle", "default_val");
+
+default_val = ctx.globalAlpha;
+ctx.globalAlpha = 0.5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.globalAlpha, default_val, "ctx.globalAlpha", "default_val");
+
+default_val = ctx.lineWidth;
+ctx.lineWidth = 0.5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.lineWidth, default_val, "ctx.lineWidth", "default_val");
+
+default_val = ctx.lineCap;
+ctx.lineCap = "round";
+offscreenCanvas.width = 100;
+_assertSame(ctx.lineCap, default_val, "ctx.lineCap", "default_val");
+
+default_val = ctx.lineJoin;
+ctx.lineJoin = "round";
+offscreenCanvas.width = 100;
+_assertSame(ctx.lineJoin, default_val, "ctx.lineJoin", "default_val");
+
+default_val = ctx.miterLimit;
+ctx.miterLimit = 0.5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.miterLimit, default_val, "ctx.miterLimit", "default_val");
+
+default_val = ctx.shadowOffsetX;
+ctx.shadowOffsetX = 5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.shadowOffsetX, default_val, "ctx.shadowOffsetX", "default_val");
+
+default_val = ctx.shadowOffsetY;
+ctx.shadowOffsetY = 5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.shadowOffsetY, default_val, "ctx.shadowOffsetY", "default_val");
+
+default_val = ctx.shadowBlur;
+ctx.shadowBlur = 5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.shadowBlur, default_val, "ctx.shadowBlur", "default_val");
+
+default_val = ctx.shadowColor;
+ctx.shadowColor = "#ff0000";
+offscreenCanvas.width = 100;
+_assertSame(ctx.shadowColor, default_val, "ctx.shadowColor", "default_val");
+
+default_val = ctx.globalCompositeOperation;
+ctx.globalCompositeOperation = "copy";
+offscreenCanvas.width = 100;
+_assertSame(ctx.globalCompositeOperation, default_val, "ctx.globalCompositeOperation", "default_val");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.worker.js
new file mode 100644
index 0000000..7eab7fbb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.2dstate.worker.js
@@ -0,0 +1,81 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.reset.2dstate
+// Description:Resetting the canvas state resets 2D state variables
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Resetting the canvas state resets 2D state variables");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 100;
+var default_val;
+
+default_val = ctx.strokeStyle;
+ctx.strokeStyle = "#ff0000";
+offscreenCanvas.width = 100;
+_assertSame(ctx.strokeStyle, default_val, "ctx.strokeStyle", "default_val");
+
+default_val = ctx.fillStyle;
+ctx.fillStyle = "#ff0000";
+offscreenCanvas.width = 100;
+_assertSame(ctx.fillStyle, default_val, "ctx.fillStyle", "default_val");
+
+default_val = ctx.globalAlpha;
+ctx.globalAlpha = 0.5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.globalAlpha, default_val, "ctx.globalAlpha", "default_val");
+
+default_val = ctx.lineWidth;
+ctx.lineWidth = 0.5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.lineWidth, default_val, "ctx.lineWidth", "default_val");
+
+default_val = ctx.lineCap;
+ctx.lineCap = "round";
+offscreenCanvas.width = 100;
+_assertSame(ctx.lineCap, default_val, "ctx.lineCap", "default_val");
+
+default_val = ctx.lineJoin;
+ctx.lineJoin = "round";
+offscreenCanvas.width = 100;
+_assertSame(ctx.lineJoin, default_val, "ctx.lineJoin", "default_val");
+
+default_val = ctx.miterLimit;
+ctx.miterLimit = 0.5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.miterLimit, default_val, "ctx.miterLimit", "default_val");
+
+default_val = ctx.shadowOffsetX;
+ctx.shadowOffsetX = 5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.shadowOffsetX, default_val, "ctx.shadowOffsetX", "default_val");
+
+default_val = ctx.shadowOffsetY;
+ctx.shadowOffsetY = 5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.shadowOffsetY, default_val, "ctx.shadowOffsetY", "default_val");
+
+default_val = ctx.shadowBlur;
+ctx.shadowBlur = 5;
+offscreenCanvas.width = 100;
+_assertSame(ctx.shadowBlur, default_val, "ctx.shadowBlur", "default_val");
+
+default_val = ctx.shadowColor;
+ctx.shadowColor = "#ff0000";
+offscreenCanvas.width = 100;
+_assertSame(ctx.shadowColor, default_val, "ctx.shadowColor", "default_val");
+
+default_val = ctx.globalCompositeOperation;
+ctx.globalCompositeOperation = "copy";
+offscreenCanvas.width = 100;
+_assertSame(ctx.globalCompositeOperation, default_val, "ctx.globalCompositeOperation", "default_val");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip-expected.txt
new file mode 100644
index 0000000..cb478817
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Resetting the canvas state resets the current clip region offscreenCanvas2 is not defined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip.html
new file mode 100644
index 0000000..2442686
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.reset.clip</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.reset.clip</h1>
+<p class="desc">Resetting the canvas state resets the current clip region</p>
+
+
+<script>
+var t = async_test("Resetting the canvas state resets the current clip region");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas2.width = 100;
+ctx.rect(0, 0, 1, 1);
+ctx.clip();
+offscreenCanvas2.width = 100;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 20,20, 0,255,0,255, "20,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip.worker.js
new file mode 100644
index 0000000..9df3d6aa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.clip.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.reset.clip
+// Description:Resetting the canvas state resets the current clip region
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Resetting the canvas state resets the current clip region");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas2.width = 100;
+ctx.rect(0, 0, 1, 1);
+ctx.clip();
+offscreenCanvas2.width = 100;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 20,20, 0,255,0,255, "20,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.different.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.different.html
new file mode 100644
index 0000000..3b6ed01
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.different.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.reset.different</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.reset.different</h1>
+<p class="desc">Changing size resets canvas to transparent black</p>
+
+
+<script>
+var t = async_test("Changing size resets canvas to transparent black");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+_assertPixel(offscreenCanvas, 20,20, 255,0,0,255, "20,20", "255,0,0,255");
+offscreenCanvas.width = 50;
+_assertPixel(offscreenCanvas, 20,20, 0,0,0,0, "20,20", "0,0,0,0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.different.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.different.worker.js
new file mode 100644
index 0000000..8bf5784
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.different.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.reset.different
+// Description:Changing size resets canvas to transparent black
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Changing size resets canvas to transparent black");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+_assertPixel(offscreenCanvas, 20,20, 255,0,0,255, "20,20", "255,0,0,255");
+offscreenCanvas.width = 50;
+_assertPixel(offscreenCanvas, 20,20, 0,0,0,0, "20,20", "0,0,0,0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient-expected.txt
new file mode 100644
index 0000000..023321c1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Resetting the canvas state does not invalidate any existing gradients offscreenCanvas2 is not defined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.html
new file mode 100644
index 0000000..675c0e93
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.reset.gradient</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.reset.gradient</h1>
+<p class="desc">Resetting the canvas state does not invalidate any existing gradients</p>
+
+
+<script>
+var t = async_test("Resetting the canvas state does not invalidate any existing gradients");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas2.width = 50;
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#0f0');
+offscreenCanvas2.width = 100;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.worker.js
new file mode 100644
index 0000000..e1b144fe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.gradient.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.reset.gradient
+// Description:Resetting the canvas state does not invalidate any existing gradients
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Resetting the canvas state does not invalidate any existing gradients");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas2.width = 50;
+var g = ctx.createLinearGradient(0, 0, 100, 0);
+g.addColorStop(0, '#0f0');
+g.addColorStop(1, '#0f0');
+offscreenCanvas2.width = 100;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = g;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path-expected.txt
new file mode 100644
index 0000000..1134c68
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Resetting the canvas state resets the current path offscreenCanvas2 is not defined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path.html
new file mode 100644
index 0000000..262e8ce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.reset.path</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.reset.path</h1>
+<p class="desc">Resetting the canvas state resets the current path</p>
+
+
+<script>
+var t = async_test("Resetting the canvas state resets the current path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 100;
+ctx.rect(0, 0, 100, 50);
+offscreenCanvas2.width = 100;
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 20,20, 0,0,0,0, "20,20", "0,0,0,0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path.worker.js
new file mode 100644
index 0000000..e79437d7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.path.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.reset.path
+// Description:Resetting the canvas state resets the current path
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Resetting the canvas state resets the current path");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 100;
+ctx.rect(0, 0, 100, 50);
+offscreenCanvas2.width = 100;
+ctx.fillStyle = '#f00';
+ctx.fill();
+_assertPixel(offscreenCanvas, 20,20, 0,0,0,0, "20,20", "0,0,0,0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.html
new file mode 100644
index 0000000..646b399a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.reset.pattern</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.reset.pattern</h1>
+<p class="desc">Resetting the canvas state does not invalidate any existing patterns</p>
+
+
+<script>
+var t = async_test("Resetting the canvas state does not invalidate any existing patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 30;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 30, 50);
+var p = ctx.createPattern(offscreenCanvas, 'repeat-x');
+offscreenCanvas.width = 100;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = p;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.worker.js
new file mode 100644
index 0000000..51b1dea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.pattern.worker.js
@@ -0,0 +1,29 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.reset.pattern
+// Description:Resetting the canvas state does not invalidate any existing patterns
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Resetting the canvas state does not invalidate any existing patterns");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 30;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 30, 50);
+var p = ctx.createPattern(offscreenCanvas, 'repeat-x');
+offscreenCanvas.width = 100;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = p;
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.same.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.same.html
new file mode 100644
index 0000000..0a2edf4b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.same.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.reset.same</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.reset.same</h1>
+<p class="desc">Setting size (not changing the value) resets canvas to transparent black</p>
+
+
+<script>
+var t = async_test("Setting size (not changing the value) resets canvas to transparent black");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 100;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+_assertPixel(offscreenCanvas, 20,20, 255,0,0,255, "20,20", "255,0,0,255");
+offscreenCanvas.width = 100;
+_assertPixel(offscreenCanvas, 20,20, 0,0,0,0, "20,20", "0,0,0,0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.same.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.same.worker.js
new file mode 100644
index 0000000..dedbc55
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.same.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.reset.same
+// Description:Setting size (not changing the value) resets canvas to transparent black
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting size (not changing the value) resets canvas to transparent black");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 100;
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 50, 50);
+_assertPixel(offscreenCanvas, 20,20, 255,0,0,255, "20,20", "255,0,0,255");
+offscreenCanvas.width = 100;
+_assertPixel(offscreenCanvas, 20,20, 0,0,0,0, "20,20", "0,0,0,0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform-expected.txt
new file mode 100644
index 0000000..82784395
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Resetting the canvas state resets the current transformation matrix offscreenCanvas2 is not defined
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform.html
new file mode 100644
index 0000000..088713f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: initial.reset.transform</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>initial.reset.transform</h1>
+<p class="desc">Resetting the canvas state resets the current transformation matrix</p>
+
+
+<script>
+var t = async_test("Resetting the canvas state resets the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas2.width = 100;
+ctx.scale(0.1, 0.1);
+offscreenCanvas.width = 100;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 20,20, 0,255,0,255, "20,20", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform.worker.js
new file mode 100644
index 0000000..516adb6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/initial.reset.transform.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:initial.reset.transform
+// Description:Resetting the canvas state resets the current transformation matrix
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Resetting the canvas state resets the current transformation matrix");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas2.width = 100;
+ctx.scale(0.1, 0.1);
+offscreenCanvas.width = 100;
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 20,20, 0,255,0,255, "20,20", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.default.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.default.html
new file mode 100644
index 0000000..b5fa3c0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.default.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.default</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.default</h1>
+<p class="desc">Default width/height when attributes are missing</p>
+
+
+<script>
+var t = async_test("Default width/height when attributes are missing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 50, "offscreenCanvas.height", "50");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.default.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.default.worker.js
new file mode 100644
index 0000000..70bb3a2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.default.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.default
+// Description:Default width/height when attributes are missing
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Default width/height when attributes are missing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 50, "offscreenCanvas.height", "50");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl-expected.txt
new file mode 100644
index 0000000..ee4df65e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Getting/setting width/height IDL attributes Failed to set the 'width' property on 'OffscreenCanvas': Value is outside the 'unsigned long' value range.
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.html
new file mode 100644
index 0000000..ffe7628
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.idl</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.idl</h1>
+<p class="desc">Getting/setting width/height IDL attributes</p>
+
+
+<script>
+var t = async_test("Getting/setting width/height IDL attributes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = "100";
+offscreenCanvas.height = "100";
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+offscreenCanvas.width = "+1.5e2";
+offscreenCanvas.height = "0x96";
+_assertSame(offscreenCanvas.width, 150, "offscreenCanvas.width", "150");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+offscreenCanvas.width = 200 - Math.pow(2, 32);
+offscreenCanvas.height = 200 - Math.pow(2, 32);
+_assertSame(offscreenCanvas.width, 200, "offscreenCanvas.width", "200");
+_assertSame(offscreenCanvas.height, 200, "offscreenCanvas.height", "200");
+offscreenCanvas.width = 301.999;
+offscreenCanvas.height = 301.001;
+_assertSame(offscreenCanvas.width, 301, "offscreenCanvas.width", "301");
+_assertSame(offscreenCanvas.height, 301, "offscreenCanvas.height", "301");
+offscreenCanvas.width = "400x";
+offscreenCanvas.height = "foo";
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.html
new file mode 100644
index 0000000..34bcef3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.idl.set.zero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.idl.set.zero</h1>
+<p class="desc">Setting width/height IDL attributes to 0</p>
+
+
+<script>
+var t = async_test("Setting width/height IDL attributes to 0");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 0;
+offscreenCanvas.height = 0;
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.worker.js
new file mode 100644
index 0000000..d321095
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.set.zero.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.idl.set.zero
+// Description:Setting width/height IDL attributes to 0
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting width/height IDL attributes to 0");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 0;
+offscreenCanvas.height = 0;
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.worker.js
new file mode 100644
index 0000000..60d4132b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.idl.worker.js
@@ -0,0 +1,39 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.idl
+// Description:Getting/setting width/height IDL attributes
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Getting/setting width/height IDL attributes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = "100";
+offscreenCanvas.height = "100";
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+offscreenCanvas.width = "+1.5e2";
+offscreenCanvas.height = "0x96";
+_assertSame(offscreenCanvas.width, 150, "offscreenCanvas.width", "150");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+offscreenCanvas.width = 200 - Math.pow(2, 32);
+offscreenCanvas.height = 200 - Math.pow(2, 32);
+_assertSame(offscreenCanvas.width, 200, "offscreenCanvas.width", "200");
+_assertSame(offscreenCanvas.height, 200, "offscreenCanvas.height", "200");
+offscreenCanvas.width = 301.999;
+offscreenCanvas.height = 301.001;
+_assertSame(offscreenCanvas.width, 301, "offscreenCanvas.width", "301");
+_assertSame(offscreenCanvas.height, 301, "offscreenCanvas.height", "301");
+offscreenCanvas.width = "400x";
+offscreenCanvas.height = "foo";
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.html
new file mode 100644
index 0000000..cf3ba78
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.decimal</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.decimal</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.worker.js
new file mode 100644
index 0000000..0d1d6e9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.decimal.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.decimal
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.html
new file mode 100644
index 0000000..4338051
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.em</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.em</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.worker.js
new file mode 100644
index 0000000..9fa682f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.em.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.em
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty-expected.txt
new file mode 100644
index 0000000..d8955bd9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.width === 300 (got 100[number], expected 300[number]) expected 300 but got 100
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.html
new file mode 100644
index 0000000..0637d59
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.empty</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.empty</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 300, "offscreenCanvas.width", "300");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.worker.js
new file mode 100644
index 0000000..65919c5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.empty.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.empty
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 300, "offscreenCanvas.width", "300");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.html
new file mode 100644
index 0000000..f92f2ea
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.exp</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.exp</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.worker.js
new file mode 100644
index 0000000..77a2269
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.exp.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.exp
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex-expected.txt
new file mode 100644
index 0000000..cd557472
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.width === 0 (got 100[number], expected 0[number]) expected 0 but got 100
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.html
new file mode 100644
index 0000000..8ab0541
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.hex</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.hex</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.worker.js
new file mode 100644
index 0000000..1846733
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.hex.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.hex
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk-expected.txt
new file mode 100644
index 0000000..d8955bd9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.width === 300 (got 100[number], expected 300[number]) expected 300 but got 100
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.html
new file mode 100644
index 0000000..9e8ee7e3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.junk</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.junk</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 300, "offscreenCanvas.width", "300");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.worker.js
new file mode 100644
index 0000000..9bdd728
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.junk.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.junk
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 300, "offscreenCanvas.width", "300");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus-expected.txt
new file mode 100644
index 0000000..d8955bd9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.width === 300 (got 100[number], expected 300[number]) expected 300 but got 100
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.html
new file mode 100644
index 0000000..8469e25
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.minus</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.minus</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 300, "offscreenCanvas.width", "300");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.worker.js
new file mode 100644
index 0000000..7ddd39b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.minus.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.minus
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 300, "offscreenCanvas.width", "300");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.html
new file mode 100644
index 0000000..7beb1d2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.octal</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.octal</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.worker.js
new file mode 100644
index 0000000..c2453d7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.octal.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.octal
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace-expected.txt
new file mode 100644
index 0000000..d8955bd9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.width === 300 (got 100[number], expected 300[number]) expected 300 but got 100
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.html
new file mode 100644
index 0000000..8045862f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.onlyspace</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.onlyspace</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 300, "offscreenCanvas.width", "300");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.js
new file mode 100644
index 0000000..5f0e67e2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.onlyspace.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.onlyspace
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 300, "offscreenCanvas.width", "300");
+_assertSame(offscreenCanvas.height, 150, "offscreenCanvas.height", "150");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.html
new file mode 100644
index 0000000..316df77
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.percent</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.percent</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.worker.js
new file mode 100644
index 0000000..05062d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.percent.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.percent
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.html
new file mode 100644
index 0000000..73dcabc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.plus</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.plus</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.worker.js
new file mode 100644
index 0000000..73f7b94
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.plus.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.plus
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.html
new file mode 100644
index 0000000..3bbabf38
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.space</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.space</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.worker.js
new file mode 100644
index 0000000..328e49cb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.space.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.space
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.html
new file mode 100644
index 0000000..3e01b858
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.trailingjunk</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.trailingjunk</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.js
new file mode 100644
index 0000000..a670d77
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.trailingjunk.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.trailingjunk
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace-expected.txt
new file mode 100644
index 0000000..bc79c7a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.height === 100 (got 50[number], expected 100[number]) expected 100 but got 50
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.html
new file mode 100644
index 0000000..4b1f3e8b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.whitespace</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.whitespace</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.worker.js
new file mode 100644
index 0000000..ab803c84
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.whitespace.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.whitespace
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 100, "offscreenCanvas.width", "100");
+_assertSame(offscreenCanvas.height, 100, "offscreenCanvas.height", "100");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero-expected.txt b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero-expected.txt
new file mode 100644
index 0000000..cd557472
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero-expected.txt
@@ -0,0 +1,4 @@
+This is a testharness.js-based test.
+FAIL Parsing of non-negative integers assert_equals: offscreenCanvas.width === 0 (got 100[number], expected 0[number]) expected 0 but got 100
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.html
new file mode 100644
index 0000000..5188e3f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.parse.zero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.parse.zero</h1>
+<p class="desc">Parsing of non-negative integers</p>
+
+
+<script>
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.worker.js
new file mode 100644
index 0000000..a8fa2dd3b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.parse.zero.worker.js
@@ -0,0 +1,21 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.parse.zero
+// Description:Parsing of non-negative integers
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Parsing of non-negative integers");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.html
new file mode 100644
index 0000000..b1fc9b9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.reflect.setidl</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.reflect.setidl</h1>
+<p class="desc">Setting IDL attributes updates IDL and content attributes</p>
+
+
+<script>
+var t = async_test("Setting IDL attributes updates IDL and content attributes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 120;
+offscreenCanvas.height = 60;
+_assertSame(offscreenCanvas.width, 120, "offscreenCanvas.width", "120");
+_assertSame(offscreenCanvas.height, 60, "offscreenCanvas.height", "60");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.worker.js
new file mode 100644
index 0000000..eb2a428
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidl.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.reflect.setidl
+// Description:Setting IDL attributes updates IDL and content attributes
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting IDL attributes updates IDL and content attributes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 120;
+offscreenCanvas.height = 60;
+_assertSame(offscreenCanvas.width, 120, "offscreenCanvas.width", "120");
+_assertSame(offscreenCanvas.height, 60, "offscreenCanvas.height", "60");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.html
new file mode 100644
index 0000000..9ffdb67
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.attributes.reflect.setidlzero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.attributes.reflect.setidlzero</h1>
+<p class="desc">Setting IDL attributes to 0 updates IDL and content attributes</p>
+
+
+<script>
+var t = async_test("Setting IDL attributes to 0 updates IDL and content attributes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 0;
+offscreenCanvas.height = 0;
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.worker.js
new file mode 100644
index 0000000..873fc94
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.attributes.reflect.setidlzero.worker.js
@@ -0,0 +1,23 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.attributes.reflect.setidlzero
+// Description:Setting IDL attributes to 0 updates IDL and content attributes
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Setting IDL attributes to 0 updates IDL and content attributes");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+offscreenCanvas.width = 0;
+offscreenCanvas.height = 0;
+_assertSame(offscreenCanvas.width, 0, "offscreenCanvas.width", "0");
+_assertSame(offscreenCanvas.height, 0, "offscreenCanvas.height", "0");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.large.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.large.html
new file mode 100644
index 0000000..a22c17d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.large.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: size.large</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>size.large</h1>
+<p class="desc"></p>
+
+<p class="notes">Not sure how reasonable this is, but the spec doesn't say there's an upper limit on the size.
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var n = 2147483647; // 2^31 - 1, which should be supported by any sensible definition of "long"
+offscreenCanvas.width = n;
+offscreenCanvas.height = n;
+_assertSame(offscreenCanvas.width, n, "offscreenCanvas.width", "n");
+_assertSame(offscreenCanvas.height, n, "offscreenCanvas.height", "n");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.large.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.large.worker.js
new file mode 100644
index 0000000..797f4ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/the-offscreen-canvas/size.large.worker.js
@@ -0,0 +1,24 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:size.large
+// Description:
+// Note:<p class="notes">Not sure how reasonable this is, but the spec doesn't say there's an upper limit on the size.
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+var n = 2147483647; // 2^31 - 1, which should be supported by any sensible definition of "long"
+offscreenCanvas.width = n;
+offscreenCanvas.height = n;
+_assertSame(offscreenCanvas.width, n, "offscreenCanvas.width", "n");
+_assertSame(offscreenCanvas.height, n, "offscreenCanvas.height", "n");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.order.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.order.html
new file mode 100644
index 0000000..8d01b5aa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.order.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.order</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.order</h1>
+<p class="desc">Transformations are applied in the right order</p>
+
+
+<script>
+var t = async_test("Transformations are applied in the right order");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(2, 1);
+ctx.rotate(Math.PI / 2);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, -50, 50, 50);
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.order.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.order.worker.js
new file mode 100644
index 0000000..e6aa169
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.order.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.order
+// Description:Transformations are applied in the right order
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Transformations are applied in the right order");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(2, 1);
+ctx.rotate(Math.PI / 2);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, -50, 50, 50);
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.direction.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.direction.html
new file mode 100644
index 0000000..81dfdadf
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.direction.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.rotate.direction</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.rotate.direction</h1>
+<p class="desc">rotate() is clockwise</p>
+
+
+<script>
+var t = async_test("rotate() is clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(Math.PI / 2);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, -100, 50, 100);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.direction.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.direction.worker.js
new file mode 100644
index 0000000..328296fce
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.direction.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.rotate.direction
+// Description:rotate() is clockwise
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("rotate() is clockwise");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(Math.PI / 2);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, -100, 50, 100);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.html
new file mode 100644
index 0000000..fb6a73f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.rotate.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.rotate.nonfinite</h1>
+<p class="desc">rotate() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("rotate() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.rotate(Infinity);
+ctx.rotate(-Infinity);
+ctx.rotate(NaN);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.worker.js
new file mode 100644
index 0000000..dbfdfc7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.nonfinite.worker.js
@@ -0,0 +1,28 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.rotate.nonfinite
+// Description:rotate() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("rotate() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.rotate(Infinity);
+ctx.rotate(-Infinity);
+ctx.rotate(NaN);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.radians.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.radians.html
new file mode 100644
index 0000000..55bc293
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.radians.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.rotate.radians</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.rotate.radians</h1>
+<p class="desc">rotate() uses radians</p>
+
+
+<script>
+var t = async_test("rotate() uses radians");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(Math.PI); // should fail obviously if this is 3.1 degrees
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.radians.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.radians.worker.js
new file mode 100644
index 0000000..243ed5e4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.radians.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.rotate.radians
+// Description:rotate() uses radians
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("rotate() uses radians");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(Math.PI); // should fail obviously if this is 3.1 degrees
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrap.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrap.html
new file mode 100644
index 0000000..9c1333a3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrap.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.rotate.wrap</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.rotate.wrap</h1>
+<p class="desc">rotate() wraps large positive values correctly</p>
+
+
+<script>
+var t = async_test("rotate() wraps large positive values correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(Math.PI * (1 + 4096)); // == pi (mod 2*pi)
+// We need about pi +/- 0.001 in order to get correct-looking results
+// 32-bit floats can store pi*4097 with precision 2^-10, so that should
+// be safe enough on reasonable implementations
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,2, 0,255,0,255, "98,2", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,47, 0,255,0,255, "98,47", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrap.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrap.worker.js
new file mode 100644
index 0000000..5a7a413
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrap.worker.js
@@ -0,0 +1,30 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.rotate.wrap
+// Description:rotate() wraps large positive values correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("rotate() wraps large positive values correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(Math.PI * (1 + 4096)); // == pi (mod 2*pi)
+// We need about pi +/- 0.001 in order to get correct-looking results
+// 32-bit floats can store pi*4097 with precision 2^-10, so that should
+// be safe enough on reasonable implementations
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,2, 0,255,0,255, "98,2", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,47, 0,255,0,255, "98,47", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.html
new file mode 100644
index 0000000..108f6d8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.rotate.wrapnegative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.rotate.wrapnegative</h1>
+<p class="desc">rotate() wraps large negative values correctly</p>
+
+
+<script>
+var t = async_test("rotate() wraps large negative values correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(-Math.PI * (1 + 4096));
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,2, 0,255,0,255, "98,2", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,47, 0,255,0,255, "98,47", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.worker.js
new file mode 100644
index 0000000..5d13b32
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.wrapnegative.worker.js
@@ -0,0 +1,27 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.rotate.wrapnegative
+// Description:rotate() wraps large negative values correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("rotate() wraps large negative values correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(-Math.PI * (1 + 4096));
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -50, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,2, 0,255,0,255, "98,2", "0,255,0,255");
+_assertPixel(offscreenCanvas, 98,47, 0,255,0,255, "98,47", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.zero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.zero.html
new file mode 100644
index 0000000..1d0a3e4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.zero.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.rotate.zero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.rotate.zero</h1>
+<p class="desc">rotate() by 0 does nothing</p>
+
+
+<script>
+var t = async_test("rotate() by 0 does nothing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(0);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.zero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.zero.worker.js
new file mode 100644
index 0000000..4b664be
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.rotate.zero.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.rotate.zero
+// Description:rotate() by 0 does nothing
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("rotate() by 0 does nothing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.rotate(0);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.basic.html
new file mode 100644
index 0000000..1f760c1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.basic.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.scale.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.scale.basic</h1>
+<p class="desc">scale() works</p>
+
+
+<script>
+var t = async_test("scale() works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(2, 4);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 12.5);
+_assertPixel(offscreenCanvas, 90,40, 0,255,0,255, "90,40", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.basic.worker.js
new file mode 100644
index 0000000..d35a350
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.basic.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.scale.basic
+// Description:scale() works
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("scale() works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(2, 4);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 12.5);
+_assertPixel(offscreenCanvas, 90,40, 0,255,0,255, "90,40", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.large.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.large.html
new file mode 100644
index 0000000..5383b54
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.large.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.scale.large</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.scale.large</h1>
+<p class="desc">scale() with large scale factors works</p>
+
+<p class="notes">Not really that large at all, but it hits the limits in Firefox.
+<script>
+var t = async_test("scale() with large scale factors works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(1e5, 1e5);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 1, 1);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.large.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.large.worker.js
new file mode 100644
index 0000000..a922554
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.large.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.scale.large
+// Description:scale() with large scale factors works
+// Note:<p class="notes">Not really that large at all, but it hits the limits in Firefox.
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("scale() with large scale factors works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(1e5, 1e5);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 1, 1);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.multiple.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.multiple.html
new file mode 100644
index 0000000..cea7030
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.multiple.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.scale.multiple</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.scale.multiple</h1>
+<p class="desc">Multiple scale()s combine</p>
+
+
+<script>
+var t = async_test("Multiple scale()s combine");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(Math.sqrt(2), Math.sqrt(2));
+ctx.scale(Math.sqrt(2), Math.sqrt(2));
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 25);
+_assertPixel(offscreenCanvas, 90,40, 0,255,0,255, "90,40", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.multiple.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.multiple.worker.js
new file mode 100644
index 0000000..1341166
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.multiple.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.scale.multiple
+// Description:Multiple scale()s combine
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("Multiple scale()s combine");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.scale(Math.sqrt(2), Math.sqrt(2));
+ctx.scale(Math.sqrt(2), Math.sqrt(2));
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 25);
+_assertPixel(offscreenCanvas, 90,40, 0,255,0,255, "90,40", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.negative.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.negative.html
new file mode 100644
index 0000000..4881383f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.negative.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.scale.negative</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.scale.negative</h1>
+<p class="desc">scale() with negative scale factors works</p>
+
+
+<script>
+var t = async_test("scale() with negative scale factors works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.scale(-1, 1);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-50, 0, 50, 50);
+ctx.restore();
+ctx.save();
+ctx.scale(1, -1);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, -50, 50, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.negative.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.negative.worker.js
new file mode 100644
index 0000000..27d6de0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.negative.worker.js
@@ -0,0 +1,33 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.scale.negative
+// Description:scale() with negative scale factors works
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("scale() with negative scale factors works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.scale(-1, 1);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-50, 0, 50, 50);
+ctx.restore();
+ctx.save();
+ctx.scale(1, -1);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(50, -50, 50, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
+_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.nonfinite.html
new file mode 100644
index 0000000..7ffa302
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.nonfinite.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.scale.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.scale.nonfinite</h1>
+<p class="desc">scale() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("scale() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.scale(Infinity, 0.1);
+ctx.scale(-Infinity, 0.1);
+ctx.scale(NaN, 0.1);
+ctx.scale(0.1, Infinity);
+ctx.scale(0.1, -Infinity);
+ctx.scale(0.1, NaN);
+ctx.scale(Infinity, Infinity);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.nonfinite.worker.js
new file mode 100644
index 0000000..f89950f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.nonfinite.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.scale.nonfinite
+// Description:scale() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("scale() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.scale(Infinity, 0.1);
+ctx.scale(-Infinity, 0.1);
+ctx.scale(NaN, 0.1);
+ctx.scale(0.1, Infinity);
+ctx.scale(0.1, -Infinity);
+ctx.scale(0.1, NaN);
+ctx.scale(Infinity, Infinity);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.zero.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.zero.html
new file mode 100644
index 0000000..092ba86d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.zero.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.scale.zero</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.scale.zero</h1>
+<p class="desc">scale() with a scale factor of zero works</p>
+
+
+<script>
+var t = async_test("scale() with a scale factor of zero works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.translate(50, 0);
+ctx.scale(0, 1);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.restore();
+ctx.save();
+ctx.translate(0, 25);
+ctx.scale(1, 0);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.zero.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.zero.worker.js
new file mode 100644
index 0000000..2559357
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.scale.zero.worker.js
@@ -0,0 +1,34 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.scale.zero
+// Description:scale() with a scale factor of zero works
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("scale() with a scale factor of zero works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.save();
+ctx.translate(50, 0);
+ctx.scale(0, 1);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.restore();
+ctx.save();
+ctx.translate(0, 25);
+ctx.scale(1, 0);
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.restore();
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.multiple.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.multiple.html
new file mode 100644
index 0000000..666b4c5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.multiple.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.setTransform.multiple</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.setTransform.multiple</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.setTransform(1/2,0, 0,1/2, 0,0);
+ctx.setTransform(2,0, 0,2, 0,0);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 25);
+_assertPixel(offscreenCanvas, 75,35, 0,255,0,255, "75,35", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.multiple.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.multiple.worker.js
new file mode 100644
index 0000000..8353016
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.multiple.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.setTransform.multiple
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.setTransform(1/2,0, 0,1/2, 0,0);
+ctx.setTransform(2,0, 0,2, 0,0);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 50, 25);
+_assertPixel(offscreenCanvas, 75,35, 0,255,0,255, "75,35", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.html
new file mode 100644
index 0000000..fca5d5df
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.setTransform.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.setTransform.nonfinite</h1>
+<p class="desc">setTransform() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("setTransform() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.setTransform(Infinity, 0, 0, 0, 0, 0);
+ctx.setTransform(-Infinity, 0, 0, 0, 0, 0);
+ctx.setTransform(NaN, 0, 0, 0, 0, 0);
+ctx.setTransform(0, Infinity, 0, 0, 0, 0);
+ctx.setTransform(0, -Infinity, 0, 0, 0, 0);
+ctx.setTransform(0, NaN, 0, 0, 0, 0);
+ctx.setTransform(0, 0, Infinity, 0, 0, 0);
+ctx.setTransform(0, 0, -Infinity, 0, 0, 0);
+ctx.setTransform(0, 0, NaN, 0, 0, 0);
+ctx.setTransform(0, 0, 0, Infinity, 0, 0);
+ctx.setTransform(0, 0, 0, -Infinity, 0, 0);
+ctx.setTransform(0, 0, 0, NaN, 0, 0);
+ctx.setTransform(0, 0, 0, 0, Infinity, 0);
+ctx.setTransform(0, 0, 0, 0, -Infinity, 0);
+ctx.setTransform(0, 0, 0, 0, NaN, 0);
+ctx.setTransform(0, 0, 0, 0, 0, Infinity);
+ctx.setTransform(0, 0, 0, 0, 0, -Infinity);
+ctx.setTransform(0, 0, 0, 0, 0, NaN);
+ctx.setTransform(Infinity, Infinity, 0, 0, 0, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, 0, 0, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, Infinity, 0, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, Infinity, Infinity, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.setTransform(Infinity, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.setTransform(Infinity, Infinity, Infinity, 0, Infinity, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.setTransform(Infinity, Infinity, Infinity, 0, 0, Infinity);
+ctx.setTransform(Infinity, Infinity, 0, Infinity, 0, 0);
+ctx.setTransform(Infinity, Infinity, 0, Infinity, Infinity, 0);
+ctx.setTransform(Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.setTransform(Infinity, Infinity, 0, Infinity, 0, Infinity);
+ctx.setTransform(Infinity, Infinity, 0, 0, Infinity, 0);
+ctx.setTransform(Infinity, Infinity, 0, 0, Infinity, Infinity);
+ctx.setTransform(Infinity, Infinity, 0, 0, 0, Infinity);
+ctx.setTransform(Infinity, 0, Infinity, 0, 0, 0);
+ctx.setTransform(Infinity, 0, Infinity, Infinity, 0, 0);
+ctx.setTransform(Infinity, 0, Infinity, Infinity, Infinity, 0);
+ctx.setTransform(Infinity, 0, Infinity, Infinity, Infinity, Infinity);
+ctx.setTransform(Infinity, 0, Infinity, Infinity, 0, Infinity);
+ctx.setTransform(Infinity, 0, Infinity, 0, Infinity, 0);
+ctx.setTransform(Infinity, 0, Infinity, 0, Infinity, Infinity);
+ctx.setTransform(Infinity, 0, Infinity, 0, 0, Infinity);
+ctx.setTransform(Infinity, 0, 0, Infinity, 0, 0);
+ctx.setTransform(Infinity, 0, 0, Infinity, Infinity, 0);
+ctx.setTransform(Infinity, 0, 0, Infinity, Infinity, Infinity);
+ctx.setTransform(Infinity, 0, 0, Infinity, 0, Infinity);
+ctx.setTransform(Infinity, 0, 0, 0, Infinity, 0);
+ctx.setTransform(Infinity, 0, 0, 0, Infinity, Infinity);
+ctx.setTransform(Infinity, 0, 0, 0, 0, Infinity);
+ctx.setTransform(0, Infinity, Infinity, 0, 0, 0);
+ctx.setTransform(0, Infinity, Infinity, Infinity, 0, 0);
+ctx.setTransform(0, Infinity, Infinity, Infinity, Infinity, 0);
+ctx.setTransform(0, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.setTransform(0, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.setTransform(0, Infinity, Infinity, 0, Infinity, 0);
+ctx.setTransform(0, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.setTransform(0, Infinity, Infinity, 0, 0, Infinity);
+ctx.setTransform(0, Infinity, 0, Infinity, 0, 0);
+ctx.setTransform(0, Infinity, 0, Infinity, Infinity, 0);
+ctx.setTransform(0, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.setTransform(0, Infinity, 0, Infinity, 0, Infinity);
+ctx.setTransform(0, Infinity, 0, 0, Infinity, 0);
+ctx.setTransform(0, Infinity, 0, 0, Infinity, Infinity);
+ctx.setTransform(0, Infinity, 0, 0, 0, Infinity);
+ctx.setTransform(0, 0, Infinity, Infinity, 0, 0);
+ctx.setTransform(0, 0, Infinity, Infinity, Infinity, 0);
+ctx.setTransform(0, 0, Infinity, Infinity, Infinity, Infinity);
+ctx.setTransform(0, 0, Infinity, Infinity, 0, Infinity);
+ctx.setTransform(0, 0, Infinity, 0, Infinity, 0);
+ctx.setTransform(0, 0, Infinity, 0, Infinity, Infinity);
+ctx.setTransform(0, 0, Infinity, 0, 0, Infinity);
+ctx.setTransform(0, 0, 0, Infinity, Infinity, 0);
+ctx.setTransform(0, 0, 0, Infinity, Infinity, Infinity);
+ctx.setTransform(0, 0, 0, Infinity, 0, Infinity);
+ctx.setTransform(0, 0, 0, 0, Infinity, Infinity);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.worker.js
new file mode 100644
index 0000000..12cdbca9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.nonfinite.worker.js
@@ -0,0 +1,100 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.setTransform.nonfinite
+// Description:setTransform() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("setTransform() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.setTransform(Infinity, 0, 0, 0, 0, 0);
+ctx.setTransform(-Infinity, 0, 0, 0, 0, 0);
+ctx.setTransform(NaN, 0, 0, 0, 0, 0);
+ctx.setTransform(0, Infinity, 0, 0, 0, 0);
+ctx.setTransform(0, -Infinity, 0, 0, 0, 0);
+ctx.setTransform(0, NaN, 0, 0, 0, 0);
+ctx.setTransform(0, 0, Infinity, 0, 0, 0);
+ctx.setTransform(0, 0, -Infinity, 0, 0, 0);
+ctx.setTransform(0, 0, NaN, 0, 0, 0);
+ctx.setTransform(0, 0, 0, Infinity, 0, 0);
+ctx.setTransform(0, 0, 0, -Infinity, 0, 0);
+ctx.setTransform(0, 0, 0, NaN, 0, 0);
+ctx.setTransform(0, 0, 0, 0, Infinity, 0);
+ctx.setTransform(0, 0, 0, 0, -Infinity, 0);
+ctx.setTransform(0, 0, 0, 0, NaN, 0);
+ctx.setTransform(0, 0, 0, 0, 0, Infinity);
+ctx.setTransform(0, 0, 0, 0, 0, -Infinity);
+ctx.setTransform(0, 0, 0, 0, 0, NaN);
+ctx.setTransform(Infinity, Infinity, 0, 0, 0, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, 0, 0, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, Infinity, 0, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, Infinity, Infinity, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.setTransform(Infinity, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.setTransform(Infinity, Infinity, Infinity, 0, Infinity, 0);
+ctx.setTransform(Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.setTransform(Infinity, Infinity, Infinity, 0, 0, Infinity);
+ctx.setTransform(Infinity, Infinity, 0, Infinity, 0, 0);
+ctx.setTransform(Infinity, Infinity, 0, Infinity, Infinity, 0);
+ctx.setTransform(Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.setTransform(Infinity, Infinity, 0, Infinity, 0, Infinity);
+ctx.setTransform(Infinity, Infinity, 0, 0, Infinity, 0);
+ctx.setTransform(Infinity, Infinity, 0, 0, Infinity, Infinity);
+ctx.setTransform(Infinity, Infinity, 0, 0, 0, Infinity);
+ctx.setTransform(Infinity, 0, Infinity, 0, 0, 0);
+ctx.setTransform(Infinity, 0, Infinity, Infinity, 0, 0);
+ctx.setTransform(Infinity, 0, Infinity, Infinity, Infinity, 0);
+ctx.setTransform(Infinity, 0, Infinity, Infinity, Infinity, Infinity);
+ctx.setTransform(Infinity, 0, Infinity, Infinity, 0, Infinity);
+ctx.setTransform(Infinity, 0, Infinity, 0, Infinity, 0);
+ctx.setTransform(Infinity, 0, Infinity, 0, Infinity, Infinity);
+ctx.setTransform(Infinity, 0, Infinity, 0, 0, Infinity);
+ctx.setTransform(Infinity, 0, 0, Infinity, 0, 0);
+ctx.setTransform(Infinity, 0, 0, Infinity, Infinity, 0);
+ctx.setTransform(Infinity, 0, 0, Infinity, Infinity, Infinity);
+ctx.setTransform(Infinity, 0, 0, Infinity, 0, Infinity);
+ctx.setTransform(Infinity, 0, 0, 0, Infinity, 0);
+ctx.setTransform(Infinity, 0, 0, 0, Infinity, Infinity);
+ctx.setTransform(Infinity, 0, 0, 0, 0, Infinity);
+ctx.setTransform(0, Infinity, Infinity, 0, 0, 0);
+ctx.setTransform(0, Infinity, Infinity, Infinity, 0, 0);
+ctx.setTransform(0, Infinity, Infinity, Infinity, Infinity, 0);
+ctx.setTransform(0, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.setTransform(0, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.setTransform(0, Infinity, Infinity, 0, Infinity, 0);
+ctx.setTransform(0, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.setTransform(0, Infinity, Infinity, 0, 0, Infinity);
+ctx.setTransform(0, Infinity, 0, Infinity, 0, 0);
+ctx.setTransform(0, Infinity, 0, Infinity, Infinity, 0);
+ctx.setTransform(0, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.setTransform(0, Infinity, 0, Infinity, 0, Infinity);
+ctx.setTransform(0, Infinity, 0, 0, Infinity, 0);
+ctx.setTransform(0, Infinity, 0, 0, Infinity, Infinity);
+ctx.setTransform(0, Infinity, 0, 0, 0, Infinity);
+ctx.setTransform(0, 0, Infinity, Infinity, 0, 0);
+ctx.setTransform(0, 0, Infinity, Infinity, Infinity, 0);
+ctx.setTransform(0, 0, Infinity, Infinity, Infinity, Infinity);
+ctx.setTransform(0, 0, Infinity, Infinity, 0, Infinity);
+ctx.setTransform(0, 0, Infinity, 0, Infinity, 0);
+ctx.setTransform(0, 0, Infinity, 0, Infinity, Infinity);
+ctx.setTransform(0, 0, Infinity, 0, 0, Infinity);
+ctx.setTransform(0, 0, 0, Infinity, Infinity, 0);
+ctx.setTransform(0, 0, 0, Infinity, Infinity, Infinity);
+ctx.setTransform(0, 0, 0, Infinity, 0, Infinity);
+ctx.setTransform(0, 0, 0, 0, Infinity, Infinity);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.skewed.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.skewed.html
new file mode 100644
index 0000000..d36502d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.skewed.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.setTransform.skewed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.setTransform.skewed</h1>
+<p class="desc"></p>
+
+
+<script>
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Create green with a red square ring inside it
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(20, 10, 60, 30);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(40, 20, 20, 10);
+// Draw a skewed shape to fill that gap, to make sure it is aligned correctly
+ctx.setTransform(1,4, 2,3, 5,6);
+// Post-transform coordinates:
+//   [[20,10],[80,10],[80,40],[20,40],[20,10],[40,20],[40,30],[60,30],[60,20],[40,20],[20,10]];
+// Hence pre-transform coordinates:
+var pts=[[-7.4,11.2],[-43.4,59.2],[-31.4,53.2],[4.6,5.2],[-7.4,11.2],
+         [-15.4,25.2],[-11.4,23.2],[-23.4,39.2],[-27.4,41.2],[-15.4,25.2],
+         [-7.4,11.2]];
+ctx.beginPath();
+ctx.moveTo(pts[0][0], pts[0][1]);
+for (var i = 0; i < pts.length; ++i)
+    ctx.lineTo(pts[i][0], pts[i][1]);
+ctx.fill();
+_assertPixel(offscreenCanvas, 21,11, 0,255,0,255, "21,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,11, 0,255,0,255, "79,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,39, 0,255,0,255, "21,39", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,39, 0,255,0,255, "79,39", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,19, 0,255,0,255, "39,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 61,19, 0,255,0,255, "61,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,31, 0,255,0,255, "39,31", "0,255,0,255");
+_assertPixel(offscreenCanvas, 61,31, 0,255,0,255, "61,31", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.skewed.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.skewed.worker.js
new file mode 100644
index 0000000..6d728bff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.setTransform.skewed.worker.js
@@ -0,0 +1,47 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.setTransform.skewed
+// Description:
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Create green with a red square ring inside it
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(20, 10, 60, 30);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(40, 20, 20, 10);
+// Draw a skewed shape to fill that gap, to make sure it is aligned correctly
+ctx.setTransform(1,4, 2,3, 5,6);
+// Post-transform coordinates:
+//   [[20,10],[80,10],[80,40],[20,40],[20,10],[40,20],[40,30],[60,30],[60,20],[40,20],[20,10]];
+// Hence pre-transform coordinates:
+var pts=[[-7.4,11.2],[-43.4,59.2],[-31.4,53.2],[4.6,5.2],[-7.4,11.2],
+         [-15.4,25.2],[-11.4,23.2],[-23.4,39.2],[-27.4,41.2],[-15.4,25.2],
+         [-7.4,11.2]];
+ctx.beginPath();
+ctx.moveTo(pts[0][0], pts[0][1]);
+for (var i = 0; i < pts.length; ++i)
+    ctx.lineTo(pts[i][0], pts[i][1]);
+ctx.fill();
+_assertPixel(offscreenCanvas, 21,11, 0,255,0,255, "21,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,11, 0,255,0,255, "79,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,39, 0,255,0,255, "21,39", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,39, 0,255,0,255, "79,39", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,19, 0,255,0,255, "39,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 61,19, 0,255,0,255, "61,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,31, 0,255,0,255, "39,31", "0,255,0,255");
+_assertPixel(offscreenCanvas, 61,31, 0,255,0,255, "61,31", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.identity.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.identity.html
new file mode 100644
index 0000000..b5890c1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.identity.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.transform.identity</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.transform.identity</h1>
+<p class="desc">transform() with the identity matrix does nothing</p>
+
+
+<script>
+var t = async_test("transform() with the identity matrix does nothing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.transform(1,0, 0,1, 0,0);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.identity.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.identity.worker.js
new file mode 100644
index 0000000..166fc5b4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.identity.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.transform.identity
+// Description:transform() with the identity matrix does nothing
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("transform() with the identity matrix does nothing");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.transform(1,0, 0,1, 0,0);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.multiply.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.multiply.html
new file mode 100644
index 0000000..1c6d166
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.multiply.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.transform.multiply</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.transform.multiply</h1>
+<p class="desc">transform() multiplies the CTM</p>
+
+
+<script>
+var t = async_test("transform() multiplies the CTM");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.transform(1,2, 3,4, 5,6);
+ctx.transform(-2,1, 3/2,-1/2, 1,-2);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.multiply.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.multiply.worker.js
new file mode 100644
index 0000000..f01d3d99
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.multiply.worker.js
@@ -0,0 +1,26 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.transform.multiply
+// Description:transform() multiplies the CTM
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("transform() multiplies the CTM");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.transform(1,2, 3,4, 5,6);
+ctx.transform(-2,1, 3/2,-1/2, 1,-2);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.nonfinite.html
new file mode 100644
index 0000000..2071c73d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.nonfinite.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.transform.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.transform.nonfinite</h1>
+<p class="desc">transform() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("transform() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.transform(Infinity, 0, 0, 0, 0, 0);
+ctx.transform(-Infinity, 0, 0, 0, 0, 0);
+ctx.transform(NaN, 0, 0, 0, 0, 0);
+ctx.transform(0, Infinity, 0, 0, 0, 0);
+ctx.transform(0, -Infinity, 0, 0, 0, 0);
+ctx.transform(0, NaN, 0, 0, 0, 0);
+ctx.transform(0, 0, Infinity, 0, 0, 0);
+ctx.transform(0, 0, -Infinity, 0, 0, 0);
+ctx.transform(0, 0, NaN, 0, 0, 0);
+ctx.transform(0, 0, 0, Infinity, 0, 0);
+ctx.transform(0, 0, 0, -Infinity, 0, 0);
+ctx.transform(0, 0, 0, NaN, 0, 0);
+ctx.transform(0, 0, 0, 0, Infinity, 0);
+ctx.transform(0, 0, 0, 0, -Infinity, 0);
+ctx.transform(0, 0, 0, 0, NaN, 0);
+ctx.transform(0, 0, 0, 0, 0, Infinity);
+ctx.transform(0, 0, 0, 0, 0, -Infinity);
+ctx.transform(0, 0, 0, 0, 0, NaN);
+ctx.transform(Infinity, Infinity, 0, 0, 0, 0);
+ctx.transform(Infinity, Infinity, Infinity, 0, 0, 0);
+ctx.transform(Infinity, Infinity, Infinity, Infinity, 0, 0);
+ctx.transform(Infinity, Infinity, Infinity, Infinity, Infinity, 0);
+ctx.transform(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.transform(Infinity, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.transform(Infinity, Infinity, Infinity, 0, Infinity, 0);
+ctx.transform(Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.transform(Infinity, Infinity, Infinity, 0, 0, Infinity);
+ctx.transform(Infinity, Infinity, 0, Infinity, 0, 0);
+ctx.transform(Infinity, Infinity, 0, Infinity, Infinity, 0);
+ctx.transform(Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.transform(Infinity, Infinity, 0, Infinity, 0, Infinity);
+ctx.transform(Infinity, Infinity, 0, 0, Infinity, 0);
+ctx.transform(Infinity, Infinity, 0, 0, Infinity, Infinity);
+ctx.transform(Infinity, Infinity, 0, 0, 0, Infinity);
+ctx.transform(Infinity, 0, Infinity, 0, 0, 0);
+ctx.transform(Infinity, 0, Infinity, Infinity, 0, 0);
+ctx.transform(Infinity, 0, Infinity, Infinity, Infinity, 0);
+ctx.transform(Infinity, 0, Infinity, Infinity, Infinity, Infinity);
+ctx.transform(Infinity, 0, Infinity, Infinity, 0, Infinity);
+ctx.transform(Infinity, 0, Infinity, 0, Infinity, 0);
+ctx.transform(Infinity, 0, Infinity, 0, Infinity, Infinity);
+ctx.transform(Infinity, 0, Infinity, 0, 0, Infinity);
+ctx.transform(Infinity, 0, 0, Infinity, 0, 0);
+ctx.transform(Infinity, 0, 0, Infinity, Infinity, 0);
+ctx.transform(Infinity, 0, 0, Infinity, Infinity, Infinity);
+ctx.transform(Infinity, 0, 0, Infinity, 0, Infinity);
+ctx.transform(Infinity, 0, 0, 0, Infinity, 0);
+ctx.transform(Infinity, 0, 0, 0, Infinity, Infinity);
+ctx.transform(Infinity, 0, 0, 0, 0, Infinity);
+ctx.transform(0, Infinity, Infinity, 0, 0, 0);
+ctx.transform(0, Infinity, Infinity, Infinity, 0, 0);
+ctx.transform(0, Infinity, Infinity, Infinity, Infinity, 0);
+ctx.transform(0, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.transform(0, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.transform(0, Infinity, Infinity, 0, Infinity, 0);
+ctx.transform(0, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.transform(0, Infinity, Infinity, 0, 0, Infinity);
+ctx.transform(0, Infinity, 0, Infinity, 0, 0);
+ctx.transform(0, Infinity, 0, Infinity, Infinity, 0);
+ctx.transform(0, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.transform(0, Infinity, 0, Infinity, 0, Infinity);
+ctx.transform(0, Infinity, 0, 0, Infinity, 0);
+ctx.transform(0, Infinity, 0, 0, Infinity, Infinity);
+ctx.transform(0, Infinity, 0, 0, 0, Infinity);
+ctx.transform(0, 0, Infinity, Infinity, 0, 0);
+ctx.transform(0, 0, Infinity, Infinity, Infinity, 0);
+ctx.transform(0, 0, Infinity, Infinity, Infinity, Infinity);
+ctx.transform(0, 0, Infinity, Infinity, 0, Infinity);
+ctx.transform(0, 0, Infinity, 0, Infinity, 0);
+ctx.transform(0, 0, Infinity, 0, Infinity, Infinity);
+ctx.transform(0, 0, Infinity, 0, 0, Infinity);
+ctx.transform(0, 0, 0, Infinity, Infinity, 0);
+ctx.transform(0, 0, 0, Infinity, Infinity, Infinity);
+ctx.transform(0, 0, 0, Infinity, 0, Infinity);
+ctx.transform(0, 0, 0, 0, Infinity, Infinity);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.nonfinite.worker.js
new file mode 100644
index 0000000..1ee3659
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.nonfinite.worker.js
@@ -0,0 +1,100 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.transform.nonfinite
+// Description:transform() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("transform() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.transform(Infinity, 0, 0, 0, 0, 0);
+ctx.transform(-Infinity, 0, 0, 0, 0, 0);
+ctx.transform(NaN, 0, 0, 0, 0, 0);
+ctx.transform(0, Infinity, 0, 0, 0, 0);
+ctx.transform(0, -Infinity, 0, 0, 0, 0);
+ctx.transform(0, NaN, 0, 0, 0, 0);
+ctx.transform(0, 0, Infinity, 0, 0, 0);
+ctx.transform(0, 0, -Infinity, 0, 0, 0);
+ctx.transform(0, 0, NaN, 0, 0, 0);
+ctx.transform(0, 0, 0, Infinity, 0, 0);
+ctx.transform(0, 0, 0, -Infinity, 0, 0);
+ctx.transform(0, 0, 0, NaN, 0, 0);
+ctx.transform(0, 0, 0, 0, Infinity, 0);
+ctx.transform(0, 0, 0, 0, -Infinity, 0);
+ctx.transform(0, 0, 0, 0, NaN, 0);
+ctx.transform(0, 0, 0, 0, 0, Infinity);
+ctx.transform(0, 0, 0, 0, 0, -Infinity);
+ctx.transform(0, 0, 0, 0, 0, NaN);
+ctx.transform(Infinity, Infinity, 0, 0, 0, 0);
+ctx.transform(Infinity, Infinity, Infinity, 0, 0, 0);
+ctx.transform(Infinity, Infinity, Infinity, Infinity, 0, 0);
+ctx.transform(Infinity, Infinity, Infinity, Infinity, Infinity, 0);
+ctx.transform(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.transform(Infinity, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.transform(Infinity, Infinity, Infinity, 0, Infinity, 0);
+ctx.transform(Infinity, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.transform(Infinity, Infinity, Infinity, 0, 0, Infinity);
+ctx.transform(Infinity, Infinity, 0, Infinity, 0, 0);
+ctx.transform(Infinity, Infinity, 0, Infinity, Infinity, 0);
+ctx.transform(Infinity, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.transform(Infinity, Infinity, 0, Infinity, 0, Infinity);
+ctx.transform(Infinity, Infinity, 0, 0, Infinity, 0);
+ctx.transform(Infinity, Infinity, 0, 0, Infinity, Infinity);
+ctx.transform(Infinity, Infinity, 0, 0, 0, Infinity);
+ctx.transform(Infinity, 0, Infinity, 0, 0, 0);
+ctx.transform(Infinity, 0, Infinity, Infinity, 0, 0);
+ctx.transform(Infinity, 0, Infinity, Infinity, Infinity, 0);
+ctx.transform(Infinity, 0, Infinity, Infinity, Infinity, Infinity);
+ctx.transform(Infinity, 0, Infinity, Infinity, 0, Infinity);
+ctx.transform(Infinity, 0, Infinity, 0, Infinity, 0);
+ctx.transform(Infinity, 0, Infinity, 0, Infinity, Infinity);
+ctx.transform(Infinity, 0, Infinity, 0, 0, Infinity);
+ctx.transform(Infinity, 0, 0, Infinity, 0, 0);
+ctx.transform(Infinity, 0, 0, Infinity, Infinity, 0);
+ctx.transform(Infinity, 0, 0, Infinity, Infinity, Infinity);
+ctx.transform(Infinity, 0, 0, Infinity, 0, Infinity);
+ctx.transform(Infinity, 0, 0, 0, Infinity, 0);
+ctx.transform(Infinity, 0, 0, 0, Infinity, Infinity);
+ctx.transform(Infinity, 0, 0, 0, 0, Infinity);
+ctx.transform(0, Infinity, Infinity, 0, 0, 0);
+ctx.transform(0, Infinity, Infinity, Infinity, 0, 0);
+ctx.transform(0, Infinity, Infinity, Infinity, Infinity, 0);
+ctx.transform(0, Infinity, Infinity, Infinity, Infinity, Infinity);
+ctx.transform(0, Infinity, Infinity, Infinity, 0, Infinity);
+ctx.transform(0, Infinity, Infinity, 0, Infinity, 0);
+ctx.transform(0, Infinity, Infinity, 0, Infinity, Infinity);
+ctx.transform(0, Infinity, Infinity, 0, 0, Infinity);
+ctx.transform(0, Infinity, 0, Infinity, 0, 0);
+ctx.transform(0, Infinity, 0, Infinity, Infinity, 0);
+ctx.transform(0, Infinity, 0, Infinity, Infinity, Infinity);
+ctx.transform(0, Infinity, 0, Infinity, 0, Infinity);
+ctx.transform(0, Infinity, 0, 0, Infinity, 0);
+ctx.transform(0, Infinity, 0, 0, Infinity, Infinity);
+ctx.transform(0, Infinity, 0, 0, 0, Infinity);
+ctx.transform(0, 0, Infinity, Infinity, 0, 0);
+ctx.transform(0, 0, Infinity, Infinity, Infinity, 0);
+ctx.transform(0, 0, Infinity, Infinity, Infinity, Infinity);
+ctx.transform(0, 0, Infinity, Infinity, 0, Infinity);
+ctx.transform(0, 0, Infinity, 0, Infinity, 0);
+ctx.transform(0, 0, Infinity, 0, Infinity, Infinity);
+ctx.transform(0, 0, Infinity, 0, 0, Infinity);
+ctx.transform(0, 0, 0, Infinity, Infinity, 0);
+ctx.transform(0, 0, 0, Infinity, Infinity, Infinity);
+ctx.transform(0, 0, 0, Infinity, 0, Infinity);
+ctx.transform(0, 0, 0, 0, Infinity, Infinity);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.skewed.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.skewed.html
new file mode 100644
index 0000000..83769e0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.skewed.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.transform.skewed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.transform.skewed</h1>
+<p class="desc">transform() with skewy matrix transforms correctly</p>
+
+
+<script>
+var t = async_test("transform() with skewy matrix transforms correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Create green with a red square ring inside it
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(20, 10, 60, 30);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(40, 20, 20, 10);
+// Draw a skewed shape to fill that gap, to make sure it is aligned correctly
+ctx.transform(1,4, 2,3, 5,6);
+// Post-transform coordinates:
+//   [[20,10],[80,10],[80,40],[20,40],[20,10],[40,20],[40,30],[60,30],[60,20],[40,20],[20,10]];
+// Hence pre-transform coordinates:
+var pts=[[-7.4,11.2],[-43.4,59.2],[-31.4,53.2],[4.6,5.2],[-7.4,11.2],
+         [-15.4,25.2],[-11.4,23.2],[-23.4,39.2],[-27.4,41.2],[-15.4,25.2],
+         [-7.4,11.2]];
+ctx.beginPath();
+ctx.moveTo(pts[0][0], pts[0][1]);
+for (var i = 0; i < pts.length; ++i)
+    ctx.lineTo(pts[i][0], pts[i][1]);
+ctx.fill();
+_assertPixel(offscreenCanvas, 21,11, 0,255,0,255, "21,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,11, 0,255,0,255, "79,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,39, 0,255,0,255, "21,39", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,39, 0,255,0,255, "79,39", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,19, 0,255,0,255, "39,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 61,19, 0,255,0,255, "61,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,31, 0,255,0,255, "39,31", "0,255,0,255");
+_assertPixel(offscreenCanvas, 61,31, 0,255,0,255, "61,31", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.skewed.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.skewed.worker.js
new file mode 100644
index 0000000..b8ae83f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.transform.skewed.worker.js
@@ -0,0 +1,47 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.transform.skewed
+// Description:transform() with skewy matrix transforms correctly
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("transform() with skewy matrix transforms correctly");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+// Create green with a red square ring inside it
+ctx.fillStyle = '#0f0';
+ctx.fillRect(0, 0, 100, 50);
+ctx.fillStyle = '#f00';
+ctx.fillRect(20, 10, 60, 30);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(40, 20, 20, 10);
+// Draw a skewed shape to fill that gap, to make sure it is aligned correctly
+ctx.transform(1,4, 2,3, 5,6);
+// Post-transform coordinates:
+//   [[20,10],[80,10],[80,40],[20,40],[20,10],[40,20],[40,30],[60,30],[60,20],[40,20],[20,10]];
+// Hence pre-transform coordinates:
+var pts=[[-7.4,11.2],[-43.4,59.2],[-31.4,53.2],[4.6,5.2],[-7.4,11.2],
+         [-15.4,25.2],[-11.4,23.2],[-23.4,39.2],[-27.4,41.2],[-15.4,25.2],
+         [-7.4,11.2]];
+ctx.beginPath();
+ctx.moveTo(pts[0][0], pts[0][1]);
+for (var i = 0; i < pts.length; ++i)
+    ctx.lineTo(pts[i][0], pts[i][1]);
+ctx.fill();
+_assertPixel(offscreenCanvas, 21,11, 0,255,0,255, "21,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,11, 0,255,0,255, "79,11", "0,255,0,255");
+_assertPixel(offscreenCanvas, 21,39, 0,255,0,255, "21,39", "0,255,0,255");
+_assertPixel(offscreenCanvas, 79,39, 0,255,0,255, "79,39", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,19, 0,255,0,255, "39,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 61,19, 0,255,0,255, "61,19", "0,255,0,255");
+_assertPixel(offscreenCanvas, 39,31, 0,255,0,255, "39,31", "0,255,0,255");
+_assertPixel(offscreenCanvas, 61,31, 0,255,0,255, "61,31", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.basic.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.basic.html
new file mode 100644
index 0000000..2978be8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.basic.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.translate.basic</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.translate.basic</h1>
+<p class="desc">translate() works</p>
+
+
+<script>
+var t = async_test("translate() works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -50, 100, 50);
+_assertPixel(offscreenCanvas, 90,40, 0,255,0,255, "90,40", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.basic.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.basic.worker.js
new file mode 100644
index 0000000..e019abb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.basic.worker.js
@@ -0,0 +1,25 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.translate.basic
+// Description:translate() works
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("translate() works");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 50);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -50, 100, 50);
+_assertPixel(offscreenCanvas, 90,40, 0,255,0,255, "90,40", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.nonfinite.html b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.nonfinite.html
new file mode 100644
index 0000000..0a90f725
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.nonfinite.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
+<title>OffscreenCanvas test: 2d.transformation.translate.nonfinite</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/canvas-tests.js"></script>
+
+<h1>2d.transformation.translate.nonfinite</h1>
+<p class="desc">translate() with Infinity/NaN is ignored</p>
+
+
+<script>
+var t = async_test("translate() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.translate(Infinity, 0.1);
+ctx.translate(-Infinity, 0.1);
+ctx.translate(NaN, 0.1);
+ctx.translate(0.1, Infinity);
+ctx.translate(0.1, -Infinity);
+ctx.translate(0.1, NaN);
+ctx.translate(Infinity, Infinity);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+</script>
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.nonfinite.worker.js b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.nonfinite.worker.js
new file mode 100644
index 0000000..ea26178
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/imported/wpt/offscreen-canvas/transformations/2d.transformation.translate.nonfinite.worker.js
@@ -0,0 +1,32 @@
+// DO NOT EDIT! This test has been generated by tools/gentest.py.
+// OffscreenCanvas test in a worker:2d.transformation.translate.nonfinite
+// Description:translate() with Infinity/NaN is ignored
+// Note:
+
+importScripts("/resources/testharness.js");
+importScripts("/common/canvas-tests.js");
+
+var t = async_test("translate() with Infinity/NaN is ignored");
+t.step(function() {
+
+var offscreenCanvas = new OffscreenCanvas(100, 50);
+var ctx = offscreenCanvas.getContext('2d');
+
+ctx.fillStyle = '#f00';
+ctx.fillRect(0, 0, 100, 50);
+ctx.translate(100, 10);
+ctx.translate(Infinity, 0.1);
+ctx.translate(-Infinity, 0.1);
+ctx.translate(NaN, 0.1);
+ctx.translate(0.1, Infinity);
+ctx.translate(0.1, -Infinity);
+ctx.translate(0.1, NaN);
+ctx.translate(Infinity, Infinity);
+ctx.fillStyle = '#0f0';
+ctx.fillRect(-100, -10, 100, 50);
+_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
+
+t.done();
+
+});
+done();
diff --git a/tools/perf/benchmarks/system_health_smoke_test.py b/tools/perf/benchmarks/system_health_smoke_test.py
index 2f7d31f..a582c3a 100644
--- a/tools/perf/benchmarks/system_health_smoke_test.py
+++ b/tools/perf/benchmarks/system_health_smoke_test.py
@@ -32,6 +32,8 @@
 
 
 _DISABLED_TESTS = frozenset({
+  # crbug.com/671018
+  'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_mobile.load:news:cnn',  # pylint: disable=line-too-long
   # crbug.com/662003
   'benchmarks.system_health_smoke_test.SystemHealthBenchmarkSmokeTest.system_health.memory_desktop.browse:social:twitter',  # pylint: disable=line-too-long
   # crbug.com/662021