  void WebArrayBuffer::reset()
  {
      m_private.reset();
-diff --git a/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp b/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp
-index 4603ef0c4e18cd44ff90c80f52473deaae4fc779..09dbf996b365069055d50ed5efcbb063ffb69920 100644
---- a/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp
-+++ b/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp
-@@ -76,12 +76,12 @@ v8::Local<v8::Value> WebSerializedScriptValue::deserialize()
-     return m_private->deserialize();
- }
- 
--WebSerializedScriptValue::WebSerializedScriptValue(const PassRefPtr<SerializedScriptValue>& value)
-+WebSerializedScriptValue::WebSerializedScriptValue(PassRefPtr<SerializedScriptValue> value)
-     : m_private(value)
- {
- }
- 
--WebSerializedScriptValue& WebSerializedScriptValue::operator=(const PassRefPtr<SerializedScriptValue>& value)
-+WebSerializedScriptValue& WebSerializedScriptValue::operator=(PassRefPtr<SerializedScriptValue> value)
- {
-     m_private = value;
-     return *this;
-diff --git a/third_party/WebKit/Source/web/linux/WebFontRendering.cpp b/third_party/WebKit/Source/web/linux/WebFontRendering.cpp
-index 2132f01a56b915fd920383acf4b3e1c898ac9132..79f440c3d46da0ff7432ef34a064603cb24d9d80 100644
---- a/third_party/WebKit/Source/web/linux/WebFontRendering.cpp
-+++ b/third_party/WebKit/Source/web/linux/WebFontRendering.cpp
-@@ -44,7 +44,7 @@ namespace blink {
- void WebFontRendering::setSkiaFontManager(SkFontMgr* fontMgr)
- {
-     WTF::adopted(fontMgr);
--    FontCache::setFontManager(RefPtr<SkFontMgr>(fontMgr));
-+    FontCache::setFontManager(sk_ref_sp(fontMgr));
- }
- 
- // static
-diff --git a/third_party/WebKit/Source/web/win/WebFontRendering.cpp b/third_party/WebKit/Source/web/win/WebFontRendering.cpp
-index 6611727e3007af99ed1e26e9e4ba45539d94f866..1721ca15dc91527c4a8d36d36b1afc13e23d3600 100644
---- a/third_party/WebKit/Source/web/win/WebFontRendering.cpp
-+++ b/third_party/WebKit/Source/web/win/WebFontRendering.cpp
-@@ -12,7 +12,7 @@ namespace blink {
- void WebFontRendering::setSkiaFontManager(SkFontMgr* fontMgr)
- {
-     WTF::adopted(fontMgr);
--    FontCache::setFontManager(RefPtr<SkFontMgr>(fontMgr));
-+    FontCache::setFontManager(sk_ref_sp(fontMgr));
- }
- 
- // static
-diff --git a/third_party/WebKit/public/platform/WebCrypto.h b/third_party/WebKit/public/platform/WebCrypto.h
-index ba3d98fa80b84d97ef133c85792cba2943508fe8..27cba7ef3d1bbd929a426f8211329282fc606b9f 100644
---- a/third_party/WebKit/public/platform/WebCrypto.h
-+++ b/third_party/WebKit/public/platform/WebCrypto.h
-@@ -42,6 +42,7 @@
- 
- #if INSIDE_BLINK
- #include "platform/heap/Handle.h"
-+#include "wtf/PassRefPtr.h"
- #endif
- 
- namespace blink {
-@@ -97,7 +98,7 @@ public:
-     BLINK_PLATFORM_EXPORT bool cancelled() const;
- 
- #if INSIDE_BLINK
--    BLINK_PLATFORM_EXPORT WebCryptoResult(CryptoResult*, const PassRefPtr<CryptoResultCancel>&);
-+    BLINK_PLATFORM_EXPORT WebCryptoResult(CryptoResult*, PassRefPtr<CryptoResultCancel>);
- #endif
- 
- private:
-diff --git a/third_party/WebKit/public/platform/WebData.h b/third_party/WebKit/public/platform/WebData.h
-index e4d6b879c237732e7eb10c81d617fa4d76d2dda1..bc3ae37783bc1f64f5c969590de633717d0afbb5 100644
---- a/third_party/WebKit/public/platform/WebData.h
-+++ b/third_party/WebKit/public/platform/WebData.h
-@@ -34,6 +34,10 @@
- #include "WebCommon.h"
- #include "WebPrivatePtr.h"
- 
-+#if INSIDE_BLINK
-+#include "wtf/PassRefPtr.h"
-+#endif
-+
- namespace blink {
- 
- class SharedBuffer;
-@@ -78,8 +82,8 @@ public:
-     bool isNull() const { return m_private.isNull(); }
- 
- #if INSIDE_BLINK
--    WebData(const PassRefPtr<SharedBuffer>&);
--    WebData& operator=(const PassRefPtr<SharedBuffer>&);
-+    WebData(PassRefPtr<SharedBuffer>);
-+    WebData& operator=(PassRefPtr<SharedBuffer>);
-     operator PassRefPtr<SharedBuffer>() const;
- #else
-     template <class C>
-diff --git a/third_party/WebKit/public/platform/WebHTTPBody.h b/third_party/WebKit/public/platform/WebHTTPBody.h
-index e604707a0a9816a57577a6cf2c9a3b4c1d407749..22d6cacc8601cfc8fa7588b97d255a6a4f6e3f15 100644
---- a/third_party/WebKit/public/platform/WebHTTPBody.h
-+++ b/third_party/WebKit/public/platform/WebHTTPBody.h
-@@ -38,7 +38,7 @@
- #include "WebURL.h"
- 
- #if INSIDE_BLINK
--namespace WTF { template <typename T> class PassRefPtr; }
-+#include "wtf/PassRefPtr.h"
- #endif
- 
- namespace blink {
-@@ -101,8 +101,8 @@ public:
-     BLINK_PLATFORM_EXPORT void setContainsPasswordData(bool);
- 
- #if INSIDE_BLINK
--    BLINK_PLATFORM_EXPORT WebHTTPBody(const WTF::PassRefPtr<EncodedFormData>&);
--    BLINK_PLATFORM_EXPORT WebHTTPBody& operator=(const WTF::PassRefPtr<EncodedFormData>&);
-+    BLINK_PLATFORM_EXPORT WebHTTPBody(WTF::PassRefPtr<EncodedFormData>);
-+    BLINK_PLATFORM_EXPORT WebHTTPBody& operator=(WTF::PassRefPtr<EncodedFormData>);
-     BLINK_PLATFORM_EXPORT operator WTF::PassRefPtr<EncodedFormData>() const;
- #endif
- 
-diff --git a/third_party/WebKit/public/platform/WebImage.h b/third_party/WebKit/public/platform/WebImage.h
-index 15716beafb043a8ec3fdc447197c8fbb7f48b940..4fd01893171eeb2ba199a4f63859dc5fa854c909 100644
---- a/third_party/WebKit/public/platform/WebImage.h
-+++ b/third_party/WebKit/public/platform/WebImage.h
-@@ -37,7 +37,7 @@
- #include "third_party/skia/include/core/SkBitmap.h"
- 
- #if INSIDE_BLINK
--namespace WTF { template <typename T> class PassRefPtr; }
-+#include "wtf/PassRefPtr.h"
- #endif
- 
- namespace blink {
-@@ -80,7 +80,7 @@ public:
-     BLINK_PLATFORM_EXPORT WebSize size() const;
- 
- #if INSIDE_BLINK
--    BLINK_PLATFORM_EXPORT WebImage(const WTF::PassRefPtr<Image>&);
-+    BLINK_PLATFORM_EXPORT WebImage(WTF::PassRefPtr<Image>);
- #endif
- 
-     WebImage(const SkBitmap& bitmap) : m_bitmap(bitmap) { }
-diff --git a/third_party/WebKit/public/platform/WebPrivatePtr.h b/third_party/WebKit/public/platform/WebPrivatePtr.h
-index 0b6533d4a0129b9f13f1198a16618690a79a47e8..e46b01c37fdfe734868193f9b2db22f5c2016a29 100644
---- a/third_party/WebKit/public/platform/WebPrivatePtr.h
-+++ b/third_party/WebKit/public/platform/WebPrivatePtr.h
-@@ -217,7 +217,7 @@ private:
- //        // Methods that are used only by other Blink classes should only be
- //        // declared when INSIDE_BLINK is set.
- //    #if INSIDE_BLINK
--//        WebFoo(const WTF::PassRefPtr<Foo>&);
-+//        WebFoo(WTF::PassRefPtr<Foo>);
- //    #endif
- //
- //    private:
-diff --git a/third_party/WebKit/public/platform/WebSecurityOrigin.h b/third_party/WebKit/public/platform/WebSecurityOrigin.h
-index 528e473bbb6fbd0e4277a43ae20fbc4147229646..1c1a05e093469a133b6e949bf36fe37b71c8a167 100644
---- a/third_party/WebKit/public/platform/WebSecurityOrigin.h
-+++ b/third_party/WebKit/public/platform/WebSecurityOrigin.h
-@@ -109,8 +109,8 @@ public:
-     BLINK_PLATFORM_EXPORT void grantLoadLocalResources() const;
- 
- #if INSIDE_BLINK
--    BLINK_PLATFORM_EXPORT WebSecurityOrigin(const WTF::PassRefPtr<SecurityOrigin>&);
--    BLINK_PLATFORM_EXPORT WebSecurityOrigin& operator=(const WTF::PassRefPtr<SecurityOrigin>&);
-+    BLINK_PLATFORM_EXPORT WebSecurityOrigin(WTF::PassRefPtr<SecurityOrigin>);
-+    BLINK_PLATFORM_EXPORT WebSecurityOrigin& operator=(WTF::PassRefPtr<SecurityOrigin>);
-     BLINK_PLATFORM_EXPORT operator WTF::PassRefPtr<SecurityOrigin>() const;
-     BLINK_PLATFORM_EXPORT SecurityOrigin* get() const;
- #else
-diff --git a/third_party/WebKit/public/platform/WebThreadSafeData.h b/third_party/WebKit/public/platform/WebThreadSafeData.h
-index d741f3f46135498f8455cfe84cfde68903c5a904..8724c77b4ff142bb1f8ecbac81aaf2e00bf693a5 100644
---- a/third_party/WebKit/public/platform/WebThreadSafeData.h
-+++ b/third_party/WebKit/public/platform/WebThreadSafeData.h
-@@ -34,7 +34,9 @@
- #include "WebCommon.h"
- #include "WebPrivatePtr.h"
- 
--#if !INSIDE_BLINK
-+#if INSIDE_BLINK
-+#include "wtf/PassRefPtr.h"
-+#else
- #include <string>
- #endif
- 
-@@ -63,8 +65,8 @@ public:
-     BLINK_PLATFORM_EXPORT WebThreadSafeData& operator=(const WebThreadSafeData&);
- 
- #if INSIDE_BLINK
--    BLINK_PLATFORM_EXPORT WebThreadSafeData(const WTF::PassRefPtr<RawData>&);
--    BLINK_PLATFORM_EXPORT WebThreadSafeData& operator=(const WTF::PassRefPtr<RawData>&);
-+    BLINK_PLATFORM_EXPORT WebThreadSafeData(WTF::PassRefPtr<RawData>);
-+    BLINK_PLATFORM_EXPORT WebThreadSafeData& operator=(WTF::PassRefPtr<RawData>);
- #else
-     operator std::string() const
-     {
-diff --git a/third_party/WebKit/public/platform/WebURLLoadTiming.h b/third_party/WebKit/public/platform/WebURLLoadTiming.h
-index fc48965f7e31d6876237be23ecf55d9a0cb402fa..920744e909c501863eab5e2e1f05fc4faf58bb5c 100644
---- a/third_party/WebKit/public/platform/WebURLLoadTiming.h
-+++ b/third_party/WebKit/public/platform/WebURLLoadTiming.h
-@@ -34,6 +34,10 @@
- #include "WebCommon.h"
- #include "WebPrivatePtr.h"
- 
-+#if INSIDE_BLINK
-+#include "wtf/PassRefPtr.h"
-+#endif
-+
- namespace blink {
- 
- class ResourceLoadTiming;
-@@ -105,8 +109,8 @@ public:
-     BLINK_PLATFORM_EXPORT void setPushEnd(double);
- 
- #if INSIDE_BLINK
--    BLINK_PLATFORM_EXPORT WebURLLoadTiming(const WTF::PassRefPtr<ResourceLoadTiming>&);
--    BLINK_PLATFORM_EXPORT WebURLLoadTiming& operator=(const WTF::PassRefPtr<ResourceLoadTiming>&);
-+    BLINK_PLATFORM_EXPORT WebURLLoadTiming(WTF::PassRefPtr<ResourceLoadTiming>);
-+    BLINK_PLATFORM_EXPORT WebURLLoadTiming& operator=(WTF::PassRefPtr<ResourceLoadTiming>);
-     BLINK_PLATFORM_EXPORT operator WTF::PassRefPtr<ResourceLoadTiming>() const;
- #endif
- 
 diff --git a/third_party/WebKit/public/web/WebArrayBuffer.h b/third_party/WebKit/public/web/WebArrayBuffer.h
 index 668bbfdbe72ebe2607e67785d267d03a6434dda5..85a6c28349001aebd7538eae21213668022acd24 100644
 --- a/third_party/WebKit/public/web/WebArrayBuffer.h

   ]
 }
+}
diff --git a/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.pattern.image.string-expected.txt b/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.pattern.image.string-expected.txt
index 179897237ccc0d6c7f7f33b4b2640c1661d3af74..0b1ad080a18c9986729844703a6e7d1fbf94c27b 100644
--- a/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.pattern.image.string-expected.txt
+++ b/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.pattern.image.string-expected.txt
@@ -1 +1 @@
-Failed assertion: expected exception of type TYPE_MISMATCH_ERR, got: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'
+Failed assertion: expected exception of type TYPE_MISMATCH_ERR, got: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'
diff --git a/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.pattern.image.undefined-expected.txt b/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.pattern.image.undefined-expected.txt
index 179897237ccc0d6c7f7f33b4b2640c1661d3af74..0b1ad080a18c9986729844703a6e7d1fbf94c27b 100644
--- a/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.pattern.image.undefined-expected.txt
+++ b/third_party/WebKit/LayoutTests/canvas/philip/tests/2d.pattern.image.undefined-expected.txt
@@ -1 +1 @@
-Failed assertion: expected exception of type TYPE_MISMATCH_ERR, got: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'
+Failed assertion: expected exception of type TYPE_MISMATCH_ERR, got: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-drawImage-expected.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-drawImage-expected.html
index 89e26a06369ee074fca1a55544e1fa11cfb691e6..c09dbc71b4025e5e29b4e56caa43819a6503bbd6 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-drawImage-expected.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-drawImage-expected.html
@@ -13,6 +13,8 @@
 <canvas id="videoOutput" width="150" height="150"></canvas>
 <canvas id="imageOutput" width="150" height="150"></canvas>
 <canvas id="canvasOutput" width="150" height="150"></canvas>
+<canvas id="offscreenCanvas2DOutput" width="150" height="150"></canvas>
+<canvas id="offscreenCanvasWebGLOutput" width="150" height="150"></canvas>
 
 <script>
 function drawImageSourceToHTMLCanvas(imageSource, outputCanvas) { 
@@ -55,6 +57,17 @@ htmlCanvasCtx.fillStyle = "red";
 htmlCanvasCtx.fillRect(15, 0, 30, 30);
 drawImageSourceToHTMLCanvas(htmlCanvas, document.getElementById('canvasOutput'));
 
+// Assume html and offscreen canvases should yield identical results
+drawImageSourceToHTMLCanvas(htmlCanvas, document.getElementById('offscreenCanvas2DOutput'));
+
+// Image source as OffscreenCanvas with webGL context
+var glCanvas = document.createElement('canvas');
+glCanvas.width = glCanvas.height = 30;
+var gl = glCanvas.getContext("webgl");
+gl.clearColor(0.0, 0.0, 1.0, 1.0);
+gl.clear(gl.COLOR_BUFFER_BIT);
+drawImageSourceToHTMLCanvas(glCanvas, document.getElementById('offscreenCanvasWebGLOutput'));
+
 </script>
 </body>
 
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-drawImage.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-drawImage.html
index f4e1a1c045cc5a37ba8f76297e20a1b45be89635..f62058299c1f9552715021ea2ec66df53c758ad3 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-drawImage.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-drawImage.html
@@ -13,6 +13,8 @@
 <canvas id="videoOutput" width="150" height="150"></canvas>
 <canvas id="imageOutput" width="150" height="150"></canvas>
 <canvas id="canvasOutput" width="150" height="150"></canvas>
+<canvas id="offscreenCanvas2DOutput" width="150" height="150"></canvas>
+<canvas id="offscreenCanvasWebGLOutput" width="150" height="150"></canvas>
 
 <script>
 function drawImageSourceToOffscreenCanvas(imageSource, outputCanvas) {
@@ -59,6 +61,22 @@ htmlCanvasCtx.fillStyle = "red";
 htmlCanvasCtx.fillRect(15, 0, 30, 30);
 drawImageSourceToOffscreenCanvas(htmlCanvas, document.getElementById('canvasOutput'));
 
+// image source as OffscreenCanvas with 2D context
+var offscreenCanvas2D = new OffscreenCanvas(30, 30);
+var offscreenCanvas2DCtx = offscreenCanvas2D.getContext("2d");
+offscreenCanvas2DCtx.fillStyle = "blue";
+offscreenCanvas2DCtx.fillRect(0, 0, 15, 30);
+offscreenCanvas2DCtx.fillStyle = "red";
+offscreenCanvas2DCtx.fillRect(15, 0, 30, 30);
+drawImageSourceToOffscreenCanvas(offscreenCanvas2D, document.getElementById('offscreenCanvas2DOutput'));
+
+// Image source as OffscreenCanvas with webGL context
+var offscreenCanvasWebGL = new OffscreenCanvas(30, 30);
+var gl = offscreenCanvasWebGL.getContext("webgl");
+gl.clearColor(0.0, 0.0, 1.0, 1.0);
+gl.clear(gl.COLOR_BUFFER_BIT);
+drawImageSourceToOffscreenCanvas(offscreenCanvasWebGL, document.getElementById('offscreenCanvasWebGLOutput'));
+
 </script>
 </body>
 
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-pattern-in-worker.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-pattern-in-worker.html
index 4d43564d11c017d397ca852d1c08e9498d6a4194..8772383b48bdefde3839e92da78a66eedec1f86f 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-pattern-in-worker.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-2d-pattern-in-worker.html
@@ -4,10 +4,21 @@
 <canvas id='output' width='150' height='150'></canvas>
 <script id='myWorker' type='text/worker'>
 self.onmessage = function(e) {
+    var patternCanvas = new OffscreenCanvas(30, 30);
+    var patternCtx = patternCanvas.getContext('2d');        
+    patternCtx.fillStyle = '#f00';                                                     
+    patternCtx.fillRect(0, 0, 15, 15);                                              
+    patternCtx.fillStyle = '#0f0';                                                     
+    patternCtx.fillRect(15, 0, 15, 15);                                             
+    patternCtx.fillStyle = '#00f';
+    patternCtx.fillRect(0, 15, 15, 15);
+    patternCtx.fillStyle = "#ff0";
+    patternCtx.fillRect(15, 15, 15, 15);
+
     var aCanvas = new OffscreenCanvas(150, 150);
     var ctx = aCanvas.getContext('2d');
    
-    var myPattern = ctx.createPattern(e.data, 'repeat');
+    var myPattern = ctx.createPattern(patternCanvas, 'repeat');
     ctx.fillStyle = myPattern;
     ctx.fillRect(0, 0, aCanvas.width, aCanvas.height);
 
@@ -20,32 +31,16 @@ if (window.testRunner) {
   testRunner.waitUntilDone();
 }
 
-var patternCanvas = document.createElement('canvas');
-patternCanvas.width = 30;
-patternCanvas.height = 30;
-var patternCtx = patternCanvas.getContext('2d');        
-patternCtx.fillStyle = '#f00';                                                     
-patternCtx.fillRect(0, 0, 15, 15);                                              
-patternCtx.fillStyle = '#0f0';                                                     
-patternCtx.fillRect(15, 0, 15, 15);                                             
-patternCtx.fillStyle = '#00f';
-patternCtx.fillRect(0, 15, 15, 15);
-patternCtx.fillStyle = "#ff0";
-patternCtx.fillRect(15, 15, 15, 15);
-createImageBitmap(patternCanvas).then(consumeImageBitmap);
-
-function consumeImageBitmap(patternImage) {
-    var blob = new Blob([document.getElementById('myWorker').textContent]);
-    var worker = new Worker(URL.createObjectURL(blob));
-    worker.addEventListener('message', msg => {
-      var outputCtx = document.getElementById('output').getContext('bitmaprenderer');
-      outputCtx.transferFromImageBitmap(msg.data);
-      if (window.testRunner) {
-        testRunner.notifyDone();
-      }
-    });
-    worker.postMessage(patternImage, [patternImage]);
-}
+var blob = new Blob([document.getElementById('myWorker').textContent]);
+var worker = new Worker(URL.createObjectURL(blob));
+worker.addEventListener('message', msg => {
+  var outputCtx = document.getElementById('output').getContext('bitmaprenderer');
+  outputCtx.transferFromImageBitmap(msg.data);
+  if (window.testRunner) {
+    testRunner.notifyDone();
+  }
+});
+worker.postMessage("go");
 </script>
 </body>
 
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-transferable-exceptions-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-transferable-exceptions-expected.txt
index cc00da90ee792cbb071c17ea7ea2257779d0a0b2..80ad9481c1503fb9bedee1d69861745ceaba17e1 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-transferable-exceptions-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-transferable-exceptions-expected.txt
@@ -9,6 +9,7 @@ PASS worker.postMessage({data: offscreenCanvas1}, [offscreenCanvas1]) threw exce
 PASS offscreenCanvas2.transferToImageBitmap() threw exception InvalidStateError: Failed to execute 'transferToImageBitmap' on 'OffscreenCanvas': Cannot transfer an ImageBitmap from a detached OffscreenCanvas.
 PASS worker.postMessage({data: offscreenCanvas2}, [offscreenCanvas2]) threw exception DataCloneError: Failed to execute 'postMessage' on 'Worker': An OffscreenCanvas is detached and could not be cloned..
 PASS offscreenCanvas2.getContext('2d') threw exception InvalidStateError: Failed to execute 'getContext' on 'OffscreenCanvas': OffscreenCanvas object is detached.
+PASS ctx.drawImage(offscreenCanvas2, 0, 0) threw exception InvalidStateError: Failed to execute 'drawImage' on 'OffscreenCanvasRenderingContext2D': The image source is detached.
 PASS successfullyParsed is true
 
 TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-transferable-exceptions.html b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-transferable-exceptions.html
index 18dc0b0a6fc17fa6804a5b67de29b92a75fe1adc..97944a2caba6c0c0cb200f9df19fc7bcb9968acc 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-transferable-exceptions.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/OffscreenCanvas-transferable-exceptions.html
@@ -26,6 +26,9 @@ shouldThrow("offscreenCanvas2.transferToImageBitmap()");
 shouldThrow("worker.postMessage({data: offscreenCanvas2}, [offscreenCanvas2])");
 shouldThrow("offscreenCanvas2.getContext('2d')");
 
+// using a transferred OffscreenCanvas as a source image throws.
+shouldThrow("ctx.drawImage(offscreenCanvas2, 0, 0)");
+
 finishJSTest();
 </script>
 </body>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-pattern-behaviour-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-pattern-behaviour-expected.txt
index 5ed3b3144e0811e3ac33feafa355be9c21e0c97e..19ca0fc29354185166c7de720b7ebbda7c3eee50 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-pattern-behaviour-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-pattern-behaviour-expected.txt
@@ -12,10 +12,10 @@ PASS context.createPattern(green1x1, 'null') threw exception SyntaxError: Failed
 PASS context.createPattern(green1x1, undefined) threw exception SyntaxError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided type ('undefined') is not one of 'repeat', 'no-repeat', 'repeat-x', or 'repeat-y'..
 PASS context.createPattern(green1x1, 'undefined') threw exception SyntaxError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided type ('undefined') is not one of 'repeat', 'no-repeat', 'repeat-x', or 'repeat-y'..
 PASS context.createPattern(green1x1, {toString:function(){ return null;}}) threw exception SyntaxError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided type ('null') is not one of 'repeat', 'no-repeat', 'repeat-x', or 'repeat-y'..
-PASS context.createPattern(null, '') threw exception TypeError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
-PASS context.createPattern(undefined, '') threw exception TypeError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
-PASS context.createPattern({}, '') threw exception TypeError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
-PASS context.createPattern([], '') threw exception TypeError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
+PASS context.createPattern(null, '') threw exception TypeError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
+PASS context.createPattern(undefined, '') threw exception TypeError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
+PASS context.createPattern({}, '') threw exception TypeError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
+PASS context.createPattern([], '') threw exception TypeError: Failed to execute 'createPattern' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
 PASS context.createPattern(green1x1, '') did not throw an exception
 PASS getPixel(1,1) is [0,128,0,255]
 PASS getPixel(98,1) is [0,128,0,255]
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/drawImage-with-broken-image-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/drawImage-with-broken-image-expected.txt
index cdebf4db1cde25cfdd92512a03cbe7e7ba14bf83..d113cf592710b7e6cfe8eec1a68c0504365a61d2 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/drawImage-with-broken-image-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/drawImage-with-broken-image-expected.txt
@@ -3,12 +3,12 @@ This test checks behavior of Canvas::drawImage with a broken source image.
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS ctx.drawImage(null, 0, 0) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
-PASS ctx.drawImage(null, 0, 0, 20, 20) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
-PASS ctx.drawImage(null, 0, 0, 20, 20, 0, 0, 20, 20) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
-PASS ctx.drawImage(undefined, 0, 0) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
-PASS ctx.drawImage(undefined, 0, 0, 20, 20) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
-PASS ctx.drawImage(undefined, 0, 0, 20, 20, 0, 0, 20, 20) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap)'.
+PASS ctx.drawImage(null, 0, 0) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
+PASS ctx.drawImage(null, 0, 0, 20, 20) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
+PASS ctx.drawImage(null, 0, 0, 20, 20, 0, 0, 20, 20) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
+PASS ctx.drawImage(undefined, 0, 0) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
+PASS ctx.drawImage(undefined, 0, 0, 20, 20) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
+PASS ctx.drawImage(undefined, 0, 0, 20, 20, 0, 0, 20, 20) threw exception TypeError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The provided value is not of type '(HTMLImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas)'.
 PASS ctx.drawImage(invalidImage, 0, 0) threw exception InvalidStateError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The HTMLImageElement provided is in the 'broken' state..
 PASS ctx.drawImage(invalidImage, 0, 0, 20, 20) threw exception InvalidStateError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The HTMLImageElement provided is in the 'broken' state..
 PASS ctx.drawImage(invalidImage, 0, 0, 20, 20, 0, 0, 20, 20) threw exception InvalidStateError: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The HTMLImageElement provided is in the 'broken' state..
diff --git a/third_party/WebKit/Source/bindings/modules/v8/generated.gni b/third_party/WebKit/Source/bindings/modules/v8/generated.gni
index 7d2ba8db8aa8b886526a5ef1f98b7cb38e011abe..0dcfce93b172ea64ed543fbef6d09f7e41c83f28 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/generated.gni
+++ b/third_party/WebKit/Source/bindings/modules/v8/generated.gni
@@ -123,8 +123,8 @@ bindings_modules_generated_union_type_files = [
   "$bindings_modules_v8_output_dir/FormDataOrURLSearchParams.h",
   "$bindings_modules_v8_output_dir/HTMLCanvasElementOrOffscreenCanvas.cpp",
   "$bindings_modules_v8_output_dir/HTMLCanvasElementOrOffscreenCanvas.h",
-  "$bindings_modules_v8_output_dir/HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmap.cpp",
-  "$bindings_modules_v8_output_dir/HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmap.h",
+  "$bindings_modules_v8_output_dir/HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmapOrOffscreenCanvas.cpp",
+  "$bindings_modules_v8_output_dir/HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmapOrOffscreenCanvas.h",
   "$bindings_modules_v8_output_dir/LongOrConstrainLongRange.cpp",
   "$bindings_modules_v8_output_dir/LongOrConstrainLongRange.h",
   "$bindings_modules_v8_output_dir/OffscreenCanvasRenderingContext2DOrWebGLRenderingContextOrWebGL2RenderingContext.cpp",
diff --git a/third_party/WebKit/Source/core/animation/Keyframe.h b/third_party/WebKit/Source/core/animation/Keyframe.h
index cafa26f71da35b072c0b737d255c3f739c01a686..1d17bcc3063e35c1a47cbd6161c2e46e5db76eab 100644
--- a/third_party/WebKit/Source/core/animation/Keyframe.h
+++ b/third_party/WebKit/Source/core/animation/Keyframe.h
@@ -73,7 +73,7 @@ public:
 
         // FIXME: Remove this once CompositorAnimations no longer depends on AnimatableValues
         virtual bool populateAnimatableValue(CSSPropertyID, Element&, const ComputedStyle& baseStyle, const ComputedStyle* parentStyle) const { return false; }
-        virtual const PassRefPtr<AnimatableValue> getAnimatableValue() const = 0;
+        virtual PassRefPtr<AnimatableValue> getAnimatableValue() const = 0;
 
         virtual bool isAnimatableValuePropertySpecificKeyframe() const { return false; }
         virtual bool isCSSPropertySpecificKeyframe() const { return false; }
diff --git a/third_party/WebKit/Source/core/animation/StringKeyframe.h b/third_party/WebKit/Source/core/animation/StringKeyframe.h
index bf7beae52b59fee6a766b5901ff24b141b97b161..bcf41220321d038d9448a3f2aa90e93ea1275ffb 100644
--- a/third_party/WebKit/Source/core/animation/StringKeyframe.h
+++ b/third_party/WebKit/Source/core/animation/StringKeyframe.h
@@ -58,7 +58,7 @@ public:
         const CSSValue* value() const { return m_value.get(); }
 
         bool populateAnimatableValue(CSSPropertyID, Element&, const ComputedStyle& baseStyle, const ComputedStyle* parentStyle) const final;
-        const PassRefPtr<AnimatableValue> getAnimatableValue() const final { return m_animatableValueCache.get(); }
+        PassRefPtr<AnimatableValue> getAnimatableValue() const final { return m_animatableValueCache.get(); }
         void setAnimatableValue(PassRefPtr<AnimatableValue> value) { m_animatableValueCache = value; }
 
         bool isNeutral() const final { return !m_value; }
@@ -91,7 +91,7 @@ public:
 
         PassRefPtr<PropertySpecificKeyframe> cloneWithOffset(double offset) const final;
 
-        const PassRefPtr<AnimatableValue> getAnimatableValue() const final { return nullptr; }
+        PassRefPtr<AnimatableValue> getAnimatableValue() const final { return nullptr; }
 
         bool isNeutral() const final { return m_value.isNull(); }
         PassRefPtr<PropertySpecificKeyframe> neutralKeyframe(double offset, PassRefPtr<TimingFunction> easing) const final;
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatableValueKeyframe.h b/third_party/WebKit/Source/core/animation/animatable/AnimatableValueKeyframe.h
index bb3f5ea9506ae4a34be55e72effc1eb31a90c660..fb7d216e8c2446534a88598b8f61360cf1fd7063 100644
--- a/third_party/WebKit/Source/core/animation/animatable/AnimatableValueKeyframe.h
+++ b/third_party/WebKit/Source/core/animation/animatable/AnimatableValueKeyframe.h
@@ -38,7 +38,7 @@ public:
         }
 
         AnimatableValue* value() const { return m_value.get(); }
-        const PassRefPtr<AnimatableValue> getAnimatableValue() const final { return m_value; }
+        PassRefPtr<AnimatableValue> getAnimatableValue() const final { return m_value; }
 
         PassRefPtr<Keyframe::PropertySpecificKeyframe> neutralKeyframe(double offset, PassRefPtr<TimingFunction> easing) const final;
         PassRefPtr<Interpolation> createInterpolation(PropertyHandle, const Keyframe::PropertySpecificKeyframe& end) const final;
diff --git a/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp b/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp
index 4a66edeac4d9cb73e3837c8a9fe66e4194ef4987..629c39602568bb70eb7cb11519c32ef17b278f0c 100644
--- a/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp
+++ b/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp
@@ -17,7 +17,7 @@ class DummyFontFaceSource : public CSSFontFaceSource {
 public:
     PassRefPtr<SimpleFontData> createFontData(const FontDescription&) override
     {
-        return SimpleFontData::create(FontPlatformData(fromSkSp(SkTypeface::MakeDefault()), "", 0, false, false));
+        return SimpleFontData::create(FontPlatformData(SkTypeface::MakeDefault(), "", 0, false, false));
     }
 
     DummyFontFaceSource() { }
diff --git a/third_party/WebKit/Source/core/dom/DOMArrayBuffer.h b/third_party/WebKit/Source/core/dom/DOMArrayBuffer.h
index e436a079e835ad465a5262249f0a402d58e25f02..872df7f2c47de00abc32a95f7564172090b75527 100644
--- a/third_party/WebKit/Source/core/dom/DOMArrayBuffer.h

 
     BLINK_EXPORT void reset();
     BLINK_EXPORT void assign(const WebArrayBuffer&);
diff --git a/third_party/widevine/cdm/BUILD.gn b/third_party/widevine/cdm/BUILD.gn
index e5fdb29e858fec1137a2182c18db6304279b4c24..8a860a334c2204a890ba73de9eacc2ba8ae8bb91 100644
--- a/third_party/widevine/cdm/BUILD.gn
