summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Playfair Cal2020-04-17 11:27:53 +1000
committerDaniel Playfair Cal2020-04-17 11:27:53 +1000
commit6e1ddc6cbfee92bbe7eb99f0a60456e6137976a8 (patch)
tree3c29d7c6cb400e38810cbbe00dcf6592d1750c65
parent39bd27cb3bd7192c3167681aa9bcd7d7ccdb88cc (diff)
downloadaur-6e1ddc6cbfee92bbe7eb99f0a60456e6137976a8.tar.gz
83.0.4103.14-1
-rw-r--r--.SRCINFO28
-rw-r--r--0001-Revert-RTCInsertableStreams-Make-RTCEncodedAudioFram.patch515
-rw-r--r--0002-Revert-RTCInsertableStreams-Make-RTCEncodedVideoFram.patch595
-rw-r--r--0003-Add-missing-algorithm-header-in-crx_install_error.cc.patch (renamed from 0001-add-missing-algorithm-header.patch)11
-rw-r--r--0004-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch (renamed from 0002-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch)6
-rw-r--r--0005-Revert-Trace-ICU-object-creation-in-ICU.CreateInstan.patch199
-rw-r--r--0006-Revert-PM-Add-calculation-of-maximum-simultaneous-lo.patch244
-rw-r--r--0007-Add-missing-memory-header-in-trust_token_attribute_p.patch26
-rw-r--r--0008-Revert-FragmentItem-Two-fixes-for-outline.patch (renamed from 0003-Revert-FragmentItem-Two-fixes-for-outline.patch)8
-rw-r--r--PKGBUILD39
10 files changed, 1639 insertions, 32 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 4d6c5b94bcb2..d7643519620d 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = chromium-dev-ozone
pkgdesc = Chromium built with patches for wayland support via Ozone (dev channel)
- pkgver = 83.0.4100.3
+ pkgver = 83.0.4103.14
pkgrel = 1
url = https://www.chromium.org/Home
install = chromium.install
@@ -57,20 +57,30 @@ pkgbase = chromium-dev-ozone
conflicts = chromium
options = debug
options = !strip
- source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-83.0.4100.3.tar.xz
+ source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-83.0.4103.14.tar.xz
source = chromium-launcher-6.tar.gz::https://github.com/foutrelis/chromium-launcher/archive/v6.tar.gz
source = chromium-widevine.patch
source = chromium-skia-harmony.patch
- source = 0001-add-missing-algorithm-header.patch
- source = 0002-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
- source = 0003-Revert-FragmentItem-Two-fixes-for-outline.patch
- sha256sums = de935646f509f31110c0c80353fb82178a8f6ff4fa39e07449f20bb3abdccde7
+ source = 0001-Revert-RTCInsertableStreams-Make-RTCEncodedAudioFram.patch
+ source = 0002-Revert-RTCInsertableStreams-Make-RTCEncodedVideoFram.patch
+ source = 0003-Add-missing-algorithm-header-in-crx_install_error.cc.patch
+ source = 0004-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
+ source = 0005-Revert-Trace-ICU-object-creation-in-ICU.CreateInstan.patch
+ source = 0006-Revert-PM-Add-calculation-of-maximum-simultaneous-lo.patch
+ source = 0007-Add-missing-memory-header-in-trust_token_attribute_p.patch
+ source = 0008-Revert-FragmentItem-Two-fixes-for-outline.patch
+ sha256sums = 6e3d4853dcbd3c2375a1462a764102f6893c3b0505037e28c04bf90002e526e8
sha256sums = 04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1
sha256sums = 709e2fddba3c1f2ed4deb3a239fc0479bfa50c46e054e7f32db4fb1365fed070
sha256sums = 771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1
- sha256sums = 09f847e4abaa91f9bf92e084ec45f331dbb79936e742fb3ec9ed7a916503ef12
- sha256sums = ad336230b964644ed8db148c497091a001d8601a220b5dd7307b91d13b5473d4
- sha256sums = b65b6cf6e0239ddb6c44b8b2fdc87f711b9e936e8fa6cdd2bdd0f4988b3d759f
+ sha256sums = c53edc13ca335652608607e628284a79d91f5524d9b5e72a8f2d29b4d7618c75
+ sha256sums = cf27aa2a98bc71686e3e0f482b720d7d25017158ab2c7d93b548b3578c4b53e2
+ sha256sums = 9f2211edf347d54b8167a3b9d773e38aeabce5f98fb1932e7db1aeec845579f6
+ sha256sums = 5db92d614aba64e9eb684f35e06f36786b74d5a1456308d4d40a65f12e32f62b
+ sha256sums = 52b0129ac7db760078087a2839e257183f10df8e9f831ec07e6cfc8f5ba455eb
+ sha256sums = 2b594ff5bc731897274027ddb79a77d247a52ef0990d574ec815b36082ac093a
+ sha256sums = 91cc1ac6cd6568de8c45a3fb3c6b57fa9ea6e6ae6f2a05f1ff82677d0cdbdedb
+ sha256sums = 771b862e16ff42e0d43d6f0f5fd49d65210732bb0ae19cc4ea18c2220b4cb041
pkgname = chromium-dev-ozone
diff --git a/0001-Revert-RTCInsertableStreams-Make-RTCEncodedAudioFram.patch b/0001-Revert-RTCInsertableStreams-Make-RTCEncodedAudioFram.patch
new file mode 100644
index 000000000000..4f94b9cabbe8
--- /dev/null
+++ b/0001-Revert-RTCInsertableStreams-Make-RTCEncodedAudioFram.patch
@@ -0,0 +1,515 @@
+From 806760e32fbde130c2ddbdd81a1838e02f2e9d59 Mon Sep 17 00:00:00 2001
+From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
+Date: Fri, 17 Apr 2020 00:37:18 +1000
+Subject: [PATCH 1/8] Revert "[RTCInsertableStreams] Make RTCEncodedAudioFrame
+ serializable"
+
+This reverts commit 7415e4fb52b66c115395e0b08eb79c7d10326130.
+---
+ .../core/v8/serialization/serialization_tag.h | 1 -
+ ...8_script_value_deserializer_for_modules.cc | 28 --------
+ ...v8_script_value_deserializer_for_modules.h | 2 -
+ .../v8_script_value_serializer_for_modules.cc | 28 --------
+ .../v8_script_value_serializer_for_modules.h | 2 -
+ .../renderer/modules/peerconnection/BUILD.gn | 2 -
+ .../peerconnection/rtc_encoded_audio_frame.cc | 51 +++++--------
+ .../peerconnection/rtc_encoded_audio_frame.h | 16 ++---
+ .../rtc_encoded_audio_frame_delegate.cc | 68 ------------------
+ .../rtc_encoded_audio_frame_delegate.h | 72 -------------------
+ .../rtc_encoded_audio_underlying_sink.cc | 3 +-
+ 11 files changed, 24 insertions(+), 249 deletions(-)
+ delete mode 100644 third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.cc
+ delete mode 100644 third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h
+
+diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h b/third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h
+index a0eaa09214de..cce273938fc2 100644
+--- a/third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h
++++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h
+@@ -102,7 +102,6 @@ enum SerializationTag {
+ // namedCurve:uint32_t
+ kRTCCertificateTag = 'k', // length:uint32_t, pemPrivateKey:WebCoreString,
+ // pemCertificate:WebCoreString
+- kRTCEncodedAudioFrameTag = 'A', // uint32_t -> transferred audio frame ID
+ kRTCEncodedVideoFrameTag = 'V', // uint32_t -> transferred video frame ID
+
+ // The following tags were used by the Shape Detection API implementation
+diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.cc b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.cc
+index 7b07f6283073..684d40f0cee8 100644
+--- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.cc
++++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.cc
+@@ -18,8 +18,6 @@
+ #include "third_party/blink/renderer/modules/native_file_system/native_file_system_file_handle.h"
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_certificate.h"
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h"
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h"
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h"
+
+@@ -69,8 +67,6 @@ ScriptWrappable* V8ScriptValueDeserializerForModules::ReadDOMObject(
+ return nullptr;
+ return MakeGarbageCollected<RTCCertificate>(std::move(certificate));
+ }
+- case kRTCEncodedAudioFrameTag:
+- return ReadRTCEncodedAudioFrame();
+ case kRTCEncodedVideoFrameTag:
+ return ReadRTCEncodedVideoFrame();
+ default:
+@@ -377,30 +373,6 @@ V8ScriptValueDeserializerForModules::ReadNativeFileSystemHandle(
+ }
+ }
+
+-RTCEncodedAudioFrame*
+-V8ScriptValueDeserializerForModules::ReadRTCEncodedAudioFrame() {
+- if (!RuntimeEnabledFeatures::RTCInsertableStreamsEnabled(
+- ExecutionContext::From(GetScriptState()))) {
+- return nullptr;
+- }
+-
+- uint32_t index;
+- if (!ReadUint32(&index))
+- return nullptr;
+-
+- const auto* attachment =
+- GetSerializedScriptValue()
+- ->GetAttachmentIfExists<RTCEncodedAudioFramesAttachment>();
+- if (!attachment)
+- return nullptr;
+-
+- const auto& frames = attachment->EncodedAudioFrames();
+- if (index >= frames.size())
+- return nullptr;
+-
+- return MakeGarbageCollected<RTCEncodedAudioFrame>(frames[index]);
+-}
+-
+ RTCEncodedVideoFrame*
+ V8ScriptValueDeserializerForModules::ReadRTCEncodedVideoFrame() {
+ if (!RuntimeEnabledFeatures::RTCInsertableStreamsEnabled(
+diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h
+index fd08855f9bea..410fe5098096 100644
+--- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h
++++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h
+@@ -12,7 +12,6 @@ namespace blink {
+
+ class CryptoKey;
+ class NativeFileSystemHandle;
+-class RTCEncodedAudioFrame;
+ class RTCEncodedVideoFrame;
+
+ // Extends V8ScriptValueSerializer with support for modules/ types.
+@@ -46,7 +45,6 @@ class MODULES_EXPORT V8ScriptValueDeserializerForModules final
+ }
+ CryptoKey* ReadCryptoKey();
+ NativeFileSystemHandle* ReadNativeFileSystemHandle(SerializationTag tag);
+- RTCEncodedAudioFrame* ReadRTCEncodedAudioFrame();
+ RTCEncodedVideoFrame* ReadRTCEncodedVideoFrame();
+ };
+
+diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.cc b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.cc
+index 2e88d05de51c..6811770537b9 100644
+--- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.cc
++++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.cc
+@@ -18,10 +18,7 @@
+ #include "third_party/blink/renderer/bindings/modules/v8/v8_landmark.h"
+ #include "third_party/blink/renderer/bindings/modules/v8/v8_point_2d.h"
+ #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_certificate.h"
+-#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_encoded_audio_frame.h"
+ #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_encoded_video_frame.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h"
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h"
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h"
+ #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+@@ -80,17 +77,6 @@ bool V8ScriptValueSerializerForModules::WriteDOMObject(
+ WriteUTF8String(pem.certificate().c_str());
+ return true;
+ }
+- if (wrapper_type_info == V8RTCEncodedAudioFrame::GetWrapperTypeInfo() &&
+- RuntimeEnabledFeatures::RTCInsertableStreamsEnabled(
+- ExecutionContext::From(GetScriptState()))) {
+- if (IsForStorage()) {
+- exception_state.ThrowDOMException(DOMExceptionCode::kDataCloneError,
+- "An RTCEncodedAudioFrame cannot be "
+- "serialized for storage.");
+- return false;
+- }
+- return WriteRTCEncodedAudioFrame(wrappable->ToImpl<RTCEncodedAudioFrame>());
+- }
+ if (wrapper_type_info == V8RTCEncodedVideoFrame::GetWrapperTypeInfo() &&
+ RuntimeEnabledFeatures::RTCInsertableStreamsEnabled(
+ ExecutionContext::From(GetScriptState()))) {
+@@ -300,20 +286,6 @@ bool V8ScriptValueSerializerForModules::WriteNativeFileSystemHandle(
+ return true;
+ }
+
+-bool V8ScriptValueSerializerForModules::WriteRTCEncodedAudioFrame(
+- RTCEncodedAudioFrame* audio_frame) {
+- auto* attachment =
+- GetSerializedScriptValue()
+- ->GetOrCreateAttachment<RTCEncodedAudioFramesAttachment>();
+- auto& frames = attachment->EncodedAudioFrames();
+- frames.push_back(audio_frame->Delegate());
+- const uint32_t index = static_cast<uint32_t>(frames.size() - 1);
+-
+- WriteTag(kRTCEncodedAudioFrameTag);
+- WriteUint32(index);
+- return true;
+-}
+-
+ bool V8ScriptValueSerializerForModules::WriteRTCEncodedVideoFrame(
+ RTCEncodedVideoFrame* video_frame) {
+ auto* attachment =
+diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.h b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.h
+index eda1434b359f..10ac32ca4f69 100644
+--- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.h
++++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.h
+@@ -12,7 +12,6 @@
+ namespace blink {
+
+ class NativeFileSystemHandle;
+-class RTCEncodedAudioFrame;
+ class RTCEncodedVideoFrame;
+ class WebCryptoKey;
+
+@@ -34,7 +33,6 @@ class MODULES_EXPORT V8ScriptValueSerializerForModules final
+ bool WriteNativeFileSystemHandle(
+ SerializationTag tag,
+ NativeFileSystemHandle* native_file_system_handle);
+- bool WriteRTCEncodedAudioFrame(RTCEncodedAudioFrame*);
+ bool WriteRTCEncodedVideoFrame(RTCEncodedVideoFrame*);
+ };
+
+diff --git a/third_party/blink/renderer/modules/peerconnection/BUILD.gn b/third_party/blink/renderer/modules/peerconnection/BUILD.gn
+index 27fe410a7319..4f9144ed30e0 100644
+--- a/third_party/blink/renderer/modules/peerconnection/BUILD.gn
++++ b/third_party/blink/renderer/modules/peerconnection/BUILD.gn
+@@ -78,8 +78,6 @@ blink_modules_sources("peerconnection") {
+ "rtc_dtmf_tone_change_event.h",
+ "rtc_encoded_audio_frame.cc",
+ "rtc_encoded_audio_frame.h",
+- "rtc_encoded_audio_frame_delegate.cc",
+- "rtc_encoded_audio_frame_delegate.h",
+ "rtc_encoded_audio_underlying_sink.cc",
+ "rtc_encoded_audio_underlying_sink.h",
+ "rtc_encoded_audio_underlying_source.cc",
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.cc
+index 6dbaa7fedf78..208b4bff2eb2 100644
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.cc
++++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.cc
+@@ -4,10 +4,7 @@
+
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h"
+
+-#include <utility>
+-
+ #include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h"
+ #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
+ #include "third_party/webrtc/api/frame_transformer_interface.h"
+
+@@ -15,37 +12,30 @@ namespace blink {
+
+ RTCEncodedAudioFrame::RTCEncodedAudioFrame(
+ std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame)
+- : delegate_(base::MakeRefCounted<RTCEncodedAudioFrameDelegate>(
+- std::move(webrtc_frame),
+- Vector<uint32_t>())) {}
++ : webrtc_frame_(std::move(webrtc_frame)) {}
+
+ RTCEncodedAudioFrame::RTCEncodedAudioFrame(
+ std::unique_ptr<webrtc::TransformableAudioFrameInterface>
+ webrtc_audio_frame) {
+- Vector<uint32_t> contributing_sources;
+ if (webrtc_audio_frame) {
+ wtf_size_t num_csrcs = webrtc_audio_frame->GetHeader().numCSRCs;
+- contributing_sources.ReserveInitialCapacity(num_csrcs);
++ contributing_sources_.ReserveInitialCapacity(num_csrcs);
+ for (wtf_size_t i = 0; i < num_csrcs; i++) {
+- contributing_sources.push_back(
++ contributing_sources_.push_back(
+ webrtc_audio_frame->GetHeader().arrOfCSRCs[i]);
+ }
+ }
+- delegate_ = base::MakeRefCounted<RTCEncodedAudioFrameDelegate>(
+- std::move(webrtc_audio_frame), std::move(contributing_sources));
++ webrtc_frame_ = std::move(webrtc_audio_frame);
+ }
+
+-RTCEncodedAudioFrame::RTCEncodedAudioFrame(
+- scoped_refptr<RTCEncodedAudioFrameDelegate> delegate)
+- : delegate_(std::move(delegate)) {}
+-
+ uint64_t RTCEncodedAudioFrame::timestamp() const {
+- return delegate_->Timestamp();
++ return webrtc_frame_ ? webrtc_frame_->GetTimestamp() : 0;
+ }
+
+ DOMArrayBuffer* RTCEncodedAudioFrame::data() const {
+- if (!frame_data_) {
+- frame_data_ = delegate_->CreateDataBuffer();
++ if (webrtc_frame_ && !frame_data_) {
++ frame_data_ = DOMArrayBuffer::Create(webrtc_frame_->GetData().data(),
++ webrtc_frame_->GetData().size());
+ }
+ return frame_data_;
+ }
+@@ -59,11 +49,11 @@ void RTCEncodedAudioFrame::setData(DOMArrayBuffer* data) {
+ }
+
+ uint32_t RTCEncodedAudioFrame::synchronizationSource() const {
+- return delegate_->Ssrc();
++ return webrtc_frame_ ? webrtc_frame_->GetSsrc() : 0;
+ }
+
+ Vector<uint32_t> RTCEncodedAudioFrame::contributingSources() const {
+- return delegate_->ContributingSources();
++ return webrtc_frame_ ? contributing_sources_ : Vector<uint32_t>();
+ }
+
+ String RTCEncodedAudioFrame::toString() const {
+@@ -76,20 +66,15 @@ String RTCEncodedAudioFrame::toString() const {
+ return sb.ToString();
+ }
+
+-void RTCEncodedAudioFrame::SyncDelegate() const {
+- delegate_->SetData(frame_data_);
+-}
+-
+-scoped_refptr<RTCEncodedAudioFrameDelegate> RTCEncodedAudioFrame::Delegate()
+- const {
+- SyncDelegate();
+- return delegate_;
+-}
+-
+ std::unique_ptr<webrtc::TransformableFrameInterface>
+-RTCEncodedAudioFrame::PassWebRtcFrame() {
+- SyncDelegate();
+- return delegate_->PassWebRtcFrame();
++RTCEncodedAudioFrame::PassDelegate() {
++ // Sync the delegate data with |frame_data_| if necessary.
++ if (webrtc_frame_ && frame_data_) {
++ webrtc_frame_->SetData(rtc::ArrayView<const uint8_t>(
++ static_cast<const uint8_t*>(frame_data_->Data()),
++ frame_data_->ByteLengthAsSizeT()));
++ }
++ return std::move(webrtc_frame_);
+ }
+
+ void RTCEncodedAudioFrame::Trace(Visitor* visitor) {
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h
+index 1e11e9ed04ee..7565e4b1ebc8 100644
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h
++++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame.h
+@@ -20,7 +20,6 @@ class TransformableFrameInterface;
+ namespace blink {
+
+ class DOMArrayBuffer;
+-class RTCEncodedAudioFrameDelegate;
+
+ class MODULES_EXPORT RTCEncodedAudioFrame final : public ScriptWrappable {
+ DEFINE_WRAPPERTYPEINFO();
+@@ -30,8 +29,6 @@ class MODULES_EXPORT RTCEncodedAudioFrame final : public ScriptWrappable {
+ std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame);
+ explicit RTCEncodedAudioFrame(
+ std::unique_ptr<webrtc::TransformableAudioFrameInterface> webrtc_frame);
+- explicit RTCEncodedAudioFrame(
+- scoped_refptr<RTCEncodedAudioFrameDelegate> delegate);
+
+ // rtc_encoded_audio_frame.idl implementation.
+ uint64_t timestamp() const;
+@@ -42,20 +39,17 @@ class MODULES_EXPORT RTCEncodedAudioFrame final : public ScriptWrappable {
+ Vector<uint32_t> contributingSources() const;
+ String toString() const;
+
+- scoped_refptr<RTCEncodedAudioFrameDelegate> Delegate() const;
+- void SyncDelegate() const;
+-
+ // Returns and transfers ownership of the internal WebRTC frame
+- // backing this RTCEncodedAudioFrame, neutering all RTCEncodedAudioFrames
+- // backed by that internal WebRTC frame.
+- std::unique_ptr<webrtc::TransformableFrameInterface> PassWebRtcFrame();
++ // backing this RTCEncodedVideoFrame, leaving the RTCEncodedVideoFrame
++ // without a delegate WebRTC frame.
++ std::unique_ptr<webrtc::TransformableFrameInterface> PassDelegate();
+
+ void Trace(Visitor*) override;
+
+ private:
+- scoped_refptr<RTCEncodedAudioFrameDelegate> delegate_;
+- Vector<uint32_t> contributing_sources_;
+ mutable Member<DOMArrayBuffer> frame_data_;
++ Vector<uint32_t> contributing_sources_;
++ std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame_;
+ };
+
+ } // namespace blink
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.cc
+deleted file mode 100644
+index 2c71c02c5223..000000000000
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.cc
++++ /dev/null
+@@ -1,68 +0,0 @@
+-// Copyright 2020 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h"
+-
+-#include <utility>
+-
+-#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
+-
+-namespace blink {
+-
+-const void* RTCEncodedAudioFramesAttachment::kAttachmentKey;
+-
+-RTCEncodedAudioFrameDelegate::RTCEncodedAudioFrameDelegate(
+- std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame,
+- Vector<uint32_t> contributing_sources)
+- : webrtc_frame_(std::move(webrtc_frame)),
+- contributing_sources_(std::move(contributing_sources)) {}
+-
+-uint64_t RTCEncodedAudioFrameDelegate::Timestamp() const {
+- MutexLocker lock(mutex_);
+- return webrtc_frame_ ? webrtc_frame_->GetTimestamp() : 0;
+-}
+-
+-DOMArrayBuffer* RTCEncodedAudioFrameDelegate::CreateDataBuffer() const {
+- ArrayBufferContents contents;
+- {
+- MutexLocker lock(mutex_);
+- if (!webrtc_frame_)
+- return nullptr;
+-
+- auto data = webrtc_frame_->GetData();
+- contents =
+- ArrayBufferContents(data.size(), 1, ArrayBufferContents::kNotShared,
+- ArrayBufferContents::kDontInitialize);
+- if (UNLIKELY(!contents.Data()))
+- OOM_CRASH(data.size());
+- memcpy(contents.Data(), data.data(), data.size());
+- }
+- return DOMArrayBuffer::Create(std::move(contents));
+-}
+-
+-void RTCEncodedAudioFrameDelegate::SetData(const DOMArrayBuffer* data) {
+- MutexLocker lock(mutex_);
+- if (webrtc_frame_ && data) {
+- webrtc_frame_->SetData(rtc::ArrayView<const uint8_t>(
+- static_cast<const uint8_t*>(data->Data()), data->ByteLengthAsSizeT()));
+- }
+-}
+-
+-uint32_t RTCEncodedAudioFrameDelegate::Ssrc() const {
+- MutexLocker lock(mutex_);
+- return webrtc_frame_ ? webrtc_frame_->GetSsrc() : 0;
+-}
+-
+-Vector<uint32_t> RTCEncodedAudioFrameDelegate::ContributingSources() const {
+- MutexLocker lock(mutex_);
+- return contributing_sources_;
+-}
+-
+-std::unique_ptr<webrtc::TransformableFrameInterface>
+-RTCEncodedAudioFrameDelegate::PassWebRtcFrame() {
+- MutexLocker lock(mutex_);
+- return std::move(webrtc_frame_);
+-}
+-
+-} // namespace blink
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h
+deleted file mode 100644
+index 90853ecfa325..000000000000
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_frame_delegate.h
++++ /dev/null
+@@ -1,72 +0,0 @@
+-// Copyright 2020 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_FRAME_DELEGATE_H_
+-#define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_FRAME_DELEGATE_H_
+-
+-#include <stdint.h>
+-
+-#include <memory>
+-
+-#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
+-#include "third_party/blink/renderer/modules/modules_export.h"
+-#include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
+-#include "third_party/blink/renderer/platform/wtf/threading_primitives.h"
+-#include "third_party/webrtc/api/frame_transformer_interface.h"
+-
+-namespace blink {
+-
+-class DOMArrayBuffer;
+-
+-// This class wraps a WebRTC audio frame and allows making shallow
+-// copies. Its purpose is to support making RTCEncodedVideoFrames
+-// serializable in the same process.
+-class RTCEncodedAudioFrameDelegate
+- : public WTF::ThreadSafeRefCounted<RTCEncodedAudioFrameDelegate> {
+- public:
+- explicit RTCEncodedAudioFrameDelegate(
+- std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame,
+- Vector<uint32_t> contributing_sources);
+-
+- uint64_t Timestamp() const;
+- DOMArrayBuffer* CreateDataBuffer() const;
+- void SetData(const DOMArrayBuffer* data);
+- uint32_t Ssrc() const;
+- Vector<uint32_t> ContributingSources() const;
+- std::unique_ptr<webrtc::TransformableFrameInterface> PassWebRtcFrame();
+-
+- private:
+- mutable Mutex mutex_;
+- std::unique_ptr<webrtc::TransformableFrameInterface> webrtc_frame_
+- GUARDED_BY(mutex_);
+- Vector<uint32_t> contributing_sources_;
+-};
+-
+-class MODULES_EXPORT RTCEncodedAudioFramesAttachment
+- : public SerializedScriptValue::Attachment {
+- public:
+- static const void* kAttachmentKey;
+- RTCEncodedAudioFramesAttachment() = default;
+- ~RTCEncodedAudioFramesAttachment() override = default;
+-
+- bool IsLockedToAgentCluster() const override {
+- return !encoded_audio_frames_.IsEmpty();
+- }
+-
+- Vector<scoped_refptr<RTCEncodedAudioFrameDelegate>>& EncodedAudioFrames() {
+- return encoded_audio_frames_;
+- }
+-
+- const Vector<scoped_refptr<RTCEncodedAudioFrameDelegate>>&
+- EncodedAudioFrames() const {
+- return encoded_audio_frames_;
+- }
+-
+- private:
+- Vector<scoped_refptr<RTCEncodedAudioFrameDelegate>> encoded_audio_frames_;
+-};
+-
+-} // namespace blink
+-
+-#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_AUDIO_FRAME_DELEGATE_H_
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink.cc
+index c0e5fa9c6f44..2635b6348029 100644
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink.cc
++++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink.cc
+@@ -48,8 +48,7 @@ ScriptPromise RTCEncodedAudioUnderlyingSink::write(
+ return ScriptPromise();
+ }
+
+- transformer_callback_.Run()->SendFrameToSink(
+- encoded_frame->PassWebRtcFrame());
++ transformer_callback_.Run()->SendFrameToSink(encoded_frame->PassDelegate());
+ return ScriptPromise::CastUndefined(script_state);
+ }
+
+--
+2.26.1
+
diff --git a/0002-Revert-RTCInsertableStreams-Make-RTCEncodedVideoFram.patch b/0002-Revert-RTCInsertableStreams-Make-RTCEncodedVideoFram.patch
new file mode 100644
index 000000000000..18bff6ecd5f8
--- /dev/null
+++ b/0002-Revert-RTCInsertableStreams-Make-RTCEncodedVideoFram.patch
@@ -0,0 +1,595 @@
+From 23bf04c1127da00d17bfa72794602e59b484ae76 Mon Sep 17 00:00:00 2001
+From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
+Date: Fri, 17 Apr 2020 00:41:46 +1000
+Subject: [PATCH 2/8] Revert "[RTCInsertableStreams] Make RTCEncodedVideoFrame
+ serializable"
+
+This reverts commit 283079bc066cc19c0d0d186500697ca95ca03c3f.
+---
+ .../core/v8/serialization/serialization_tag.h | 1 -
+ .../serialization/serialized_script_value.h | 31 +------
+ ...8_script_value_deserializer_for_modules.cc | 28 ------
+ ...v8_script_value_deserializer_for_modules.h | 2 -
+ .../v8_script_value_serializer_for_modules.cc | 28 ------
+ .../v8_script_value_serializer_for_modules.h | 2 -
+ .../renderer/modules/peerconnection/BUILD.gn | 2 -
+ .../peerconnection/rtc_encoded_video_frame.cc | 54 +++++------
+ .../peerconnection/rtc_encoded_video_frame.h | 19 ++--
+ .../rtc_encoded_video_frame_delegate.cc | 89 -------------------
+ .../rtc_encoded_video_frame_delegate.h | 72 ---------------
+ .../rtc_encoded_video_underlying_sink.cc | 3 +-
+ .../rtc_encoded_video_underlying_sink_test.cc | 2 +-
+ 13 files changed, 34 insertions(+), 299 deletions(-)
+ delete mode 100644 third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.cc
+ delete mode 100644 third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h
+
+diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h b/third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h
+index cce273938fc2..05e37ce90847 100644
+--- a/third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h
++++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h
+@@ -102,7 +102,6 @@ enum SerializationTag {
+ // namedCurve:uint32_t
+ kRTCCertificateTag = 'k', // length:uint32_t, pemPrivateKey:WebCoreString,
+ // pemCertificate:WebCoreString
+- kRTCEncodedVideoFrameTag = 'V', // uint32_t -> transferred video frame ID
+
+ // The following tags were used by the Shape Detection API implementation
+ // between M71 and M81. During these milestones, the API was always behind
+diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h
+index bbf10ef3135b..1a80aa3b2356 100644
+--- a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h
++++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h
+@@ -269,41 +269,13 @@ class CORE_EXPORT SerializedScriptValue
+
+ bool IsLockedToAgentCluster() const {
+ return !wasm_modules_.IsEmpty() ||
+- !shared_array_buffers_contents_.IsEmpty() ||
+- std::any_of(attachments_.begin(), attachments_.end(),
+- [](const auto& entry) {
+- return entry.value->IsLockedToAgentCluster();
+- });
++ !shared_array_buffers_contents_.IsEmpty();
+ }
+
+ // Returns true after serializing script values that remote origins cannot
+ // access.
+ bool IsOriginCheckRequired() const;
+
+- // Derive from Attachments to define collections of objects to serialize in
+- // modules. They can be registered using GetOrCreateAttachment().
+- class Attachment {
+- public:
+- virtual ~Attachment() = default;
+- virtual bool IsLockedToAgentCluster() const = 0;
+- };
+-
+- template <typename T>
+- T* GetOrCreateAttachment() {
+- auto result = attachments_.insert(&T::kAttachmentKey, std::unique_ptr<T>());
+- if (!result.stored_value->value)
+- result.stored_value->value = std::make_unique<T>();
+- return static_cast<T*>(result.stored_value->value.get());
+- }
+-
+- template <typename T>
+- const T* GetAttachmentIfExists() const {
+- auto it = attachments_.find(&T::kAttachmentKey);
+- if (it == attachments_.end())
+- return nullptr;
+- return static_cast<T*>(it->value.get());
+- }
+-
+ private:
+ friend class ScriptValueSerializer;
+ friend class V8ScriptValueSerializer;
+@@ -372,7 +344,6 @@ class CORE_EXPORT SerializedScriptValue
+ MojoScopedHandleArray mojo_handles_;
+ SharedArrayBufferContentsArray shared_array_buffers_contents_;
+ NativeFileSystemTokensArray native_file_system_tokens_;
+- HashMap<const void* const*, std::unique_ptr<Attachment>> attachments_;
+
+ bool has_registered_external_allocation_;
+ #if DCHECK_IS_ON()
+diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.cc b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.cc
+index 684d40f0cee8..b5f07e85b7b2 100644
+--- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.cc
++++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.cc
+@@ -18,8 +18,6 @@
+ #include "third_party/blink/renderer/modules/native_file_system/native_file_system_file_handle.h"
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_certificate.h"
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h"
+
+ namespace blink {
+
+@@ -67,8 +65,6 @@ ScriptWrappable* V8ScriptValueDeserializerForModules::ReadDOMObject(
+ return nullptr;
+ return MakeGarbageCollected<RTCCertificate>(std::move(certificate));
+ }
+- case kRTCEncodedVideoFrameTag:
+- return ReadRTCEncodedVideoFrame();
+ default:
+ break;
+ }
+@@ -373,28 +369,4 @@ V8ScriptValueDeserializerForModules::ReadNativeFileSystemHandle(
+ }
+ }
+
+-RTCEncodedVideoFrame*
+-V8ScriptValueDeserializerForModules::ReadRTCEncodedVideoFrame() {
+- if (!RuntimeEnabledFeatures::RTCInsertableStreamsEnabled(
+- ExecutionContext::From(GetScriptState()))) {
+- return nullptr;
+- }
+-
+- uint32_t index;
+- if (!ReadUint32(&index))
+- return nullptr;
+-
+- const auto* attachment =
+- GetSerializedScriptValue()
+- ->GetAttachmentIfExists<RTCEncodedVideoFramesAttachment>();
+- if (!attachment)
+- return nullptr;
+-
+- const auto& frames = attachment->EncodedVideoFrames();
+- if (index >= frames.size())
+- return nullptr;
+-
+- return MakeGarbageCollected<RTCEncodedVideoFrame>(frames[index]);
+-}
+-
+ } // namespace blink
+diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h
+index 410fe5098096..15e5d35547b6 100644
+--- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h
++++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h
+@@ -12,7 +12,6 @@ namespace blink {
+
+ class CryptoKey;
+ class NativeFileSystemHandle;
+-class RTCEncodedVideoFrame;
+
+ // Extends V8ScriptValueSerializer with support for modules/ types.
+ class MODULES_EXPORT V8ScriptValueDeserializerForModules final
+@@ -45,7 +44,6 @@ class MODULES_EXPORT V8ScriptValueDeserializerForModules final
+ }
+ CryptoKey* ReadCryptoKey();
+ NativeFileSystemHandle* ReadNativeFileSystemHandle(SerializationTag tag);
+- RTCEncodedVideoFrame* ReadRTCEncodedVideoFrame();
+ };
+
+ } // namespace blink
+diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.cc b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.cc
+index 6811770537b9..6f017cdd3eca 100644
+--- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.cc
++++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.cc
+@@ -18,9 +18,6 @@
+ #include "third_party/blink/renderer/bindings/modules/v8/v8_landmark.h"
+ #include "third_party/blink/renderer/bindings/modules/v8/v8_point_2d.h"
+ #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_certificate.h"
+-#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_encoded_video_frame.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h"
+ #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
+
+ namespace blink {
+@@ -77,17 +74,6 @@ bool V8ScriptValueSerializerForModules::WriteDOMObject(
+ WriteUTF8String(pem.certificate().c_str());
+ return true;
+ }
+- if (wrapper_type_info == V8RTCEncodedVideoFrame::GetWrapperTypeInfo() &&
+- RuntimeEnabledFeatures::RTCInsertableStreamsEnabled(
+- ExecutionContext::From(GetScriptState()))) {
+- if (IsForStorage()) {
+- exception_state.ThrowDOMException(DOMExceptionCode::kDataCloneError,
+- "An RTCEncodedVideoFrame cannot be "
+- "serialized for storage.");
+- return false;
+- }
+- return WriteRTCEncodedVideoFrame(wrappable->ToImpl<RTCEncodedVideoFrame>());
+- }
+ return false;
+ }
+
+@@ -286,18 +272,4 @@ bool V8ScriptValueSerializerForModules::WriteNativeFileSystemHandle(
+ return true;
+ }
+
+-bool V8ScriptValueSerializerForModules::WriteRTCEncodedVideoFrame(
+- RTCEncodedVideoFrame* video_frame) {
+- auto* attachment =
+- GetSerializedScriptValue()
+- ->GetOrCreateAttachment<RTCEncodedVideoFramesAttachment>();
+- auto& frames = attachment->EncodedVideoFrames();
+- frames.push_back(video_frame->Delegate());
+- const uint32_t index = static_cast<uint32_t>(frames.size() - 1);
+-
+- WriteTag(kRTCEncodedVideoFrameTag);
+- WriteUint32(index);
+- return true;
+-}
+-
+ } // namespace blink
+diff --git a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.h b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.h
+index 10ac32ca4f69..6405202e0cb0 100644
+--- a/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.h
++++ b/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules.h
+@@ -12,7 +12,6 @@
+ namespace blink {
+
+ class NativeFileSystemHandle;
+-class RTCEncodedVideoFrame;
+ class WebCryptoKey;
+
+ // Extends V8ScriptValueSerializer with support for modules/ types.
+@@ -33,7 +32,6 @@ class MODULES_EXPORT V8ScriptValueSerializerForModules final
+ bool WriteNativeFileSystemHandle(
+ SerializationTag tag,
+ NativeFileSystemHandle* native_file_system_handle);
+- bool WriteRTCEncodedVideoFrame(RTCEncodedVideoFrame*);
+ };
+
+ } // namespace blink
+diff --git a/third_party/blink/renderer/modules/peerconnection/BUILD.gn b/third_party/blink/renderer/modules/peerconnection/BUILD.gn
+index 4f9144ed30e0..5cf4876a3628 100644
+--- a/third_party/blink/renderer/modules/peerconnection/BUILD.gn
++++ b/third_party/blink/renderer/modules/peerconnection/BUILD.gn
+@@ -84,8 +84,6 @@ blink_modules_sources("peerconnection") {
+ "rtc_encoded_audio_underlying_source.h",
+ "rtc_encoded_video_frame.cc",
+ "rtc_encoded_video_frame.h",
+- "rtc_encoded_video_frame_delegate.cc",
+- "rtc_encoded_video_frame_delegate.h",
+ "rtc_encoded_video_underlying_sink.cc",
+ "rtc_encoded_video_underlying_sink.h",
+ "rtc_encoded_video_underlying_source.cc",
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc
+index 65593da51242..3f8676ddb290 100644
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc
++++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.cc
+@@ -4,47 +4,46 @@
+
+ #include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h"
+
+-#include <utility>
+-
+ #include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h"
+ #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
+ #include "third_party/webrtc/api/frame_transformer_interface.h"
+
+ namespace blink {
+
+ RTCEncodedVideoFrame::RTCEncodedVideoFrame(
+- std::unique_ptr<webrtc::TransformableVideoFrameInterface> webrtc_frame)
+- : delegate_(base::MakeRefCounted<RTCEncodedVideoFrameDelegate>(
+- std::move(webrtc_frame))) {}
+-
+-RTCEncodedVideoFrame::RTCEncodedVideoFrame(
+- scoped_refptr<RTCEncodedVideoFrameDelegate> delegate)
++ std::unique_ptr<webrtc::TransformableVideoFrameInterface> delegate)
+ : delegate_(std::move(delegate)) {}
+
+ String RTCEncodedVideoFrame::type() const {
+- return delegate_->Type();
++ if (!delegate_)
++ return "empty";
++
++ return delegate_->IsKeyFrame() ? "key" : "delta";
+ }
+
+ uint64_t RTCEncodedVideoFrame::timestamp() const {
+- return delegate_->Timestamp();
++ return delegate_ ? delegate_->GetTimestamp() : 0;
+ }
+
+ DOMArrayBuffer* RTCEncodedVideoFrame::data() const {
+- if (!frame_data_)
+- frame_data_ = delegate_->CreateDataBuffer();
++ if (delegate_ && !frame_data_) {
++ frame_data_ = DOMArrayBuffer::Create(delegate_->GetData().data(),
++ delegate_->GetData().size());
++ }
+ return frame_data_;
+ }
+
+ DOMArrayBuffer* RTCEncodedVideoFrame::additionalData() const {
+- if (!additional_data_)
+- additional_data_ = delegate_->CreateAdditionalDataBuffer();
+-
++ if (delegate_ && !additional_data_) {
++ auto additional_data = delegate_->GetAdditionalData();
++ additional_data_ =
++ DOMArrayBuffer::Create(additional_data.data(), additional_data.size());
++ }
+ return additional_data_;
+ }
+
+ uint32_t RTCEncodedVideoFrame::synchronizationSource() const {
+- return delegate_->Ssrc();
++ return delegate_ ? delegate_->GetSsrc() : 0;
+ }
+
+ void RTCEncodedVideoFrame::setData(DOMArrayBuffer* data) {
+@@ -66,20 +65,15 @@ String RTCEncodedVideoFrame::toString() const {
+ return sb.ToString();
+ }
+
+-void RTCEncodedVideoFrame::SyncDelegate() const {
+- delegate_->SetData(frame_data_);
+-}
+-
+-scoped_refptr<RTCEncodedVideoFrameDelegate> RTCEncodedVideoFrame::Delegate()
+- const {
+- SyncDelegate();
+- return delegate_;
+-}
+-
+ std::unique_ptr<webrtc::TransformableVideoFrameInterface>
+-RTCEncodedVideoFrame::PassWebRtcFrame() {
+- SyncDelegate();
+- return delegate_->PassWebRtcFrame();
++RTCEncodedVideoFrame::PassDelegate() {
++ // Sync the delegate data with |frame_data_| if necessary.
++ if (delegate_ && frame_data_) {
++ delegate_->SetData(rtc::ArrayView<const uint8_t>(
++ static_cast<const uint8_t*>(frame_data_->Data()),
++ frame_data_->ByteLengthAsSizeT()));
++ }
++ return std::move(delegate_);
+ }
+
+ void RTCEncodedVideoFrame::Trace(Visitor* visitor) {
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h
+index 5e13b07e9c14..67024c262e6e 100644
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h
++++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame.h
+@@ -20,16 +20,13 @@ class TransformableVideoFrameInterface;
+ namespace blink {
+
+ class DOMArrayBuffer;
+-class RTCEncodedVideoFrameDelegate;
+
+ class MODULES_EXPORT RTCEncodedVideoFrame final : public ScriptWrappable {
+ DEFINE_WRAPPERTYPEINFO();
+
+ public:
+ explicit RTCEncodedVideoFrame(
+- std::unique_ptr<webrtc::TransformableVideoFrameInterface> webrtc_frame);
+- explicit RTCEncodedVideoFrame(
+- scoped_refptr<RTCEncodedVideoFrameDelegate> delegate);
++ std::unique_ptr<webrtc::TransformableVideoFrameInterface> delegate);
+
+ // rtc_encoded_video_frame.idl implementation.
+ String type() const;
+@@ -41,19 +38,17 @@ class MODULES_EXPORT RTCEncodedVideoFrame final : public ScriptWrappable {
+ uint32_t synchronizationSource() const;
+ String toString() const;
+
+- scoped_refptr<RTCEncodedVideoFrameDelegate> Delegate() const;
+- void SyncDelegate() const;
+-
++ // Internal API
++ bool HasDelegate() { return !!delegate_; }
+ // Returns and transfers ownership of the internal WebRTC frame
+- // backing this RTCEncodedVideoFrame, neutering all RTCEncodedVideoFrames
+- // backed by that internal WebRTC frame.
+- std::unique_ptr<webrtc::TransformableVideoFrameInterface> PassWebRtcFrame();
++ // backing this RTCEncodedVideoFrame, leaving the RTCEncodedVideoFrame
++ // without a delegate WebRTC frame.
++ std::unique_ptr<webrtc::TransformableVideoFrameInterface> PassDelegate();
+
+ void Trace(Visitor*) override;
+
+ private:
+- const scoped_refptr<RTCEncodedVideoFrameDelegate> delegate_;
+-
++ std::unique_ptr<webrtc::TransformableVideoFrameInterface> delegate_;
+ // Exposes encoded frame data from |delegate_|.
+ mutable Member<DOMArrayBuffer> frame_data_;
+ // Exposes additional data from |delegate_|.
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.cc
+deleted file mode 100644
+index 6d2de5b2b773..000000000000
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.cc
++++ /dev/null
+@@ -1,89 +0,0 @@
+-// Copyright 2020 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h"
+-
+-#include <utility>
+-
+-#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
+-#include "third_party/webrtc/api/frame_transformer_interface.h"
+-
+-namespace blink {
+-
+-const void* const RTCEncodedVideoFramesAttachment::kAttachmentKey = nullptr;
+-
+-RTCEncodedVideoFrameDelegate::RTCEncodedVideoFrameDelegate(
+- std::unique_ptr<webrtc::TransformableVideoFrameInterface> webrtc_frame)
+- : webrtc_frame_(std::move(webrtc_frame)) {}
+-
+-String RTCEncodedVideoFrameDelegate::Type() const {
+- MutexLocker lock(mutex_);
+- if (!webrtc_frame_)
+- return "empty";
+-
+- return webrtc_frame_->IsKeyFrame() ? "key" : "delta";
+-}
+-
+-uint64_t RTCEncodedVideoFrameDelegate::Timestamp() const {
+- MutexLocker lock(mutex_);
+- return webrtc_frame_ ? webrtc_frame_->GetTimestamp() : 0;
+-}
+-
+-DOMArrayBuffer* RTCEncodedVideoFrameDelegate::CreateDataBuffer() const {
+- ArrayBufferContents contents;
+- {
+- MutexLocker lock(mutex_);
+- if (!webrtc_frame_)
+- return nullptr;
+-
+- auto data = webrtc_frame_->GetData();
+- contents =
+- ArrayBufferContents(data.size(), 1, ArrayBufferContents::kNotShared,
+- ArrayBufferContents::kDontInitialize);
+- if (UNLIKELY(!contents.Data()))
+- OOM_CRASH(data.size());
+- memcpy(contents.Data(), data.data(), data.size());
+- }
+- return DOMArrayBuffer::Create(std::move(contents));
+-}
+-
+-void RTCEncodedVideoFrameDelegate::SetData(const DOMArrayBuffer* data) {
+- MutexLocker lock(mutex_);
+- if (webrtc_frame_ && data) {
+- webrtc_frame_->SetData(rtc::ArrayView<const uint8_t>(
+- static_cast<const uint8_t*>(data->Data()), data->ByteLengthAsSizeT()));
+- }
+-}
+-
+-DOMArrayBuffer* RTCEncodedVideoFrameDelegate::CreateAdditionalDataBuffer()
+- const {
+- ArrayBufferContents contents;
+- {
+- MutexLocker lock(mutex_);
+- if (!webrtc_frame_)
+- return nullptr;
+-
+- auto additional_data = webrtc_frame_->GetAdditionalData();
+- contents = ArrayBufferContents(additional_data.size(), 1,
+- ArrayBufferContents::kNotShared,
+- ArrayBufferContents::kDontInitialize);
+- if (UNLIKELY(!contents.Data()))
+- OOM_CRASH(additional_data.size());
+- memcpy(contents.Data(), additional_data.data(), additional_data.size());
+- }
+- return DOMArrayBuffer::Create(std::move(contents));
+-}
+-
+-uint32_t RTCEncodedVideoFrameDelegate::Ssrc() const {
+- MutexLocker lock(mutex_);
+- return webrtc_frame_ ? webrtc_frame_->GetSsrc() : 0;
+-}
+-
+-std::unique_ptr<webrtc::TransformableVideoFrameInterface>
+-RTCEncodedVideoFrameDelegate::PassWebRtcFrame() {
+- MutexLocker lock(mutex_);
+- return std::move(webrtc_frame_);
+-}
+-
+-} // namespace blink
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h
+deleted file mode 100644
+index 5bc300b6e82c..000000000000
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_frame_delegate.h
++++ /dev/null
+@@ -1,72 +0,0 @@
+-// Copyright 2020 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_FRAME_DELEGATE_H_
+-#define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_FRAME_DELEGATE_H_
+-
+-#include <stdint.h>
+-
+-#include <memory>
+-
+-#include "third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.h"
+-#include "third_party/blink/renderer/modules/modules_export.h"
+-#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+-#include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
+-#include "third_party/blink/renderer/platform/wtf/threading_primitives.h"
+-#include "third_party/webrtc/api/frame_transformer_interface.h"
+-
+-namespace blink {
+-
+-class DOMArrayBuffer;
+-
+-// This class wraps a WebRTC video frame and allows making shallow
+-// copies. Its purpose is to support making RTCEncodedVideoFrames
+-// serializable in the same process.
+-class RTCEncodedVideoFrameDelegate
+- : public WTF::ThreadSafeRefCounted<RTCEncodedVideoFrameDelegate> {
+- public:
+- explicit RTCEncodedVideoFrameDelegate(
+- std::unique_ptr<webrtc::TransformableVideoFrameInterface> webrtc_frame);
+-
+- String Type() const;
+- uint64_t Timestamp() const;
+- DOMArrayBuffer* CreateDataBuffer() const;
+- void SetData(const DOMArrayBuffer* data);
+- DOMArrayBuffer* CreateAdditionalDataBuffer() const;
+- uint32_t Ssrc() const;
+- std::unique_ptr<webrtc::TransformableVideoFrameInterface> PassWebRtcFrame();
+-
+- private:
+- mutable Mutex mutex_;
+- std::unique_ptr<webrtc::TransformableVideoFrameInterface> webrtc_frame_
+- GUARDED_BY(mutex_);
+-};
+-
+-class MODULES_EXPORT RTCEncodedVideoFramesAttachment
+- : public SerializedScriptValue::Attachment {
+- public:
+- static const void* const kAttachmentKey;
+- RTCEncodedVideoFramesAttachment() = default;
+- ~RTCEncodedVideoFramesAttachment() override = default;
+-
+- bool IsLockedToAgentCluster() const override {
+- return !encoded_video_frames_.IsEmpty();
+- }
+-
+- Vector<scoped_refptr<RTCEncodedVideoFrameDelegate>>& EncodedVideoFrames() {
+- return encoded_video_frames_;
+- }
+-
+- const Vector<scoped_refptr<RTCEncodedVideoFrameDelegate>>&
+- EncodedVideoFrames() const {
+- return encoded_video_frames_;
+- }
+-
+- private:
+- Vector<scoped_refptr<RTCEncodedVideoFrameDelegate>> encoded_video_frames_;
+-};
+-
+-} // namespace blink
+-
+-#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_RTC_ENCODED_VIDEO_FRAME_DELEGATE_H_
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink.cc
+index 4585483a1cb2..3762b10e6bc5 100644
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink.cc
++++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink.cc
+@@ -48,8 +48,7 @@ ScriptPromise RTCEncodedVideoUnderlyingSink::write(
+ return ScriptPromise();
+ }
+
+- transformer_callback_.Run()->SendFrameToSink(
+- encoded_frame->PassWebRtcFrame());
++ transformer_callback_.Run()->SendFrameToSink(encoded_frame->PassDelegate());
+ return ScriptPromise::CastUndefined(script_state);
+ }
+
+diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
+index ea8a67a9cc5f..3d0dfbdbbe3e 100644
+--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
++++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_sink_test.cc
+@@ -68,7 +68,7 @@ class RTCEncodedVideoUnderlyingSinkTest : public testing::Test {
+
+ ScriptValue CreateEncodedVideoFrameChunk(ScriptState* script_state) {
+ RTCEncodedVideoFrame* frame = MakeGarbageCollected<RTCEncodedVideoFrame>(
+- std::unique_ptr<webrtc::TransformableVideoFrameInterface>());
++ /*frame_delegate=*/nullptr);
+ return ScriptValue(script_state->GetIsolate(),
+ ToV8(frame, script_state->GetContext()->Global(),
+ script_state->GetIsolate()));
+--
+2.26.1
+
diff --git a/0001-add-missing-algorithm-header.patch b/0003-Add-missing-algorithm-header-in-crx_install_error.cc.patch
index 1d8140735609..9ee105ff31d4 100644
--- a/0001-add-missing-algorithm-header.patch
+++ b/0003-Add-missing-algorithm-header-in-crx_install_error.cc.patch
@@ -1,8 +1,11 @@
-From 472df7c01d1b3d7dd85a664a384488393e526ef4 Mon Sep 17 00:00:00 2001
+From dba2a4aa61c021a46fa688efc989320763d3c738 Mon Sep 17 00:00:00 2001
From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
-Date: Sat, 4 Apr 2020 17:26:43 +1100
-Subject: [PATCH 1/3] add missing algorithm header
+Date: Thu, 16 Apr 2020 20:11:28 +1000
+Subject: [PATCH 3/8] Add missing algorithm header in crx_install_error.cc
+This is needed for the use of std::find.
+
+Change-Id: I2dc43b3887c467986c5346be5a9e27a987e1e5b3
---
extensions/browser/install/crx_install_error.cc | 2 ++
1 file changed, 2 insertions(+)
@@ -21,5 +24,5 @@ index a9765bb0a5a4..bd0d3e35a167 100644
#include "extensions/browser/install/sandboxed_unpacker_failure_reason.h"
--
-2.26.0
+2.26.1
diff --git a/0002-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch b/0004-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
index 5311beefa009..7196e285c145 100644
--- a/0002-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
+++ b/0004-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
@@ -1,7 +1,7 @@
-From 6800459ad3b60208f27f638d8c6d170fb8461c84 Mon Sep 17 00:00:00 2001
+From ffa47b54c9dbed28a8b1b2b9428049073937b3fe Mon Sep 17 00:00:00 2001
From: Stephan Hartmann <stha09@googlemail.com>
Date: Sun, 5 Apr 2020 08:29:21 +0000
-Subject: [PATCH 2/3] libstdc++: fix incomplete-type in AXTree for
+Subject: [PATCH 4/8] libstdc++: fix incomplete-type in AXTree for
NodeSetSizePosInSetInfo
std::unordered_map<T, U> requires U to be fully declared. ax_tree.h
@@ -56,5 +56,5 @@ index a51ca8de4c84..8c1c57517ac0 100644
// Represents the content of an ordered set which includes the ordered set
// items and the ordered set container if it exists.
--
-2.26.0
+2.26.1
diff --git a/0005-Revert-Trace-ICU-object-creation-in-ICU.CreateInstan.patch b/0005-Revert-Trace-ICU-object-creation-in-ICU.CreateInstan.patch
new file mode 100644
index 000000000000..bf89b54beefc
--- /dev/null
+++ b/0005-Revert-Trace-ICU-object-creation-in-ICU.CreateInstan.patch
@@ -0,0 +1,199 @@
+From 9c5607e39aaf34f866ca2b815196953ec3818098 Mon Sep 17 00:00:00 2001
+From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
+Date: Sat, 11 Apr 2020 12:32:25 +1000
+Subject: [PATCH 5/8] Revert "Trace ICU object creation in "ICU.CreateInstance"
+ UMA histogram"
+
+This reverts commit 928bcad29884064f83bf05ecadf82369f8b4622f.
+---
+ DEPS | 2 +-
+ base/i18n/icu_util.cc | 150 +++++++-----------------------------------
+ 2 files changed, 25 insertions(+), 127 deletions(-)
+
+diff --git a/DEPS b/DEPS
+index 95ff15cbf88c..fd23a935909f 100644
+--- a/DEPS
++++ b/DEPS
+@@ -1014,7 +1014,7 @@ deps = {
+ Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '6fdad5388130757e1efb58a14b8e7f9494625691',
+
+ 'src/third_party/icu':
+- Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '13cfcd5874f6c39c34ec57fa5295e7910ae90b8d',
++ Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'd7aff76cf6bb0fbef3afa6c07718f78a80a70f8f',
+
+ 'src/third_party/icu4j': {
+ 'packages': [
+diff --git a/base/i18n/icu_util.cc b/base/i18n/icu_util.cc
+index 82022d5f490e..425a0b2a6648 100644
+--- a/base/i18n/icu_util.cc
++++ b/base/i18n/icu_util.cc
+@@ -350,134 +350,32 @@ void InitializeIcuTimeZone() {
+ }
+
+ const char kICUDataFile[] = "ICU.DataFile";
+-const char kICUCreateInstance[] = "ICU.CreateInstance";
+-
+-enum class ICUCreateInstance {
+- kCharacterBreakIterator = 0,
+- kWordBreakIterator = 1,
+- kLineBreakIterator = 2,
+- kLineBreakIteratorTypeLoose = 3,
+- kLineBreakIteratorTypeNormal = 4,
+- kLineBreakIteratorTypeStrict = 5,
+- kSentenceBreakIterator = 6,
+- kTitleBreakIterator = 7,
+- kThaiBreakEngine = 8,
+- kLaoBreakEngine = 9,
+- kBurmeseBreakEngine = 10,
+- kKhmerBreakEngine = 11,
+- kChineseJapaneseBreakEngine = 12,
+-
+- kMaxValue = kChineseJapaneseBreakEngine
+-};
+-
+-// Callback functions to report the opening of ICU Data File, and creation of
+-// key objects to UMA. This help us to understand what built-in ICU data files
+-// are rarely used in the user's machines and the distribution of ICU usage.
+-static void U_CALLCONV TraceICUEntry(const void*, int32_t fn_number) {
+- switch (fn_number) {
+- case UTRACE_UBRK_CREATE_CHARACTER:
+- base::UmaHistogramEnumeration(kICUCreateInstance,
+- ICUCreateInstance::kCharacterBreakIterator);
+- break;
+- case UTRACE_UBRK_CREATE_SENTENCE:
+- base::UmaHistogramEnumeration(kICUCreateInstance,
+- ICUCreateInstance::kSentenceBreakIterator);
+- break;
+- case UTRACE_UBRK_CREATE_TITLE:
+- base::UmaHistogramEnumeration(kICUCreateInstance,
+- ICUCreateInstance::kTitleBreakIterator);
+- break;
+- case UTRACE_UBRK_CREATE_WORD:
+- base::UmaHistogramEnumeration(kICUCreateInstance,
+- ICUCreateInstance::kWordBreakIterator);
+- break;
+- default:
+- return;
+- }
+-}
+
+-static void U_CALLCONV TraceICUData(const void* context,
+- int32_t fn_number,
+- int32_t level,
+- const char* fmt,
+- va_list args) {
+- switch (fn_number) {
+- case UTRACE_UDATA_DATA_FILE: {
+- std::string icu_data_file_name(va_arg(args, const char*));
+- va_end(args);
+- // Skip icu version specified prefix if exist.
+- // path is prefixed with icu version prefix such as "icudt65l-".
+- // Histogram only the part after the -.
+- if (icu_data_file_name.find("icudt") == 0) {
+- size_t dash = icu_data_file_name.find("-");
+- if (dash != std::string::npos) {
+- icu_data_file_name = icu_data_file_name.substr(dash + 1);
+- }
+- }
+- // UmaHistogramSparse should track less than 100 values.
+- // We currently have about total 55 built-in data files inside ICU
+- // so it fit the UmaHistogramSparse usage.
+- int hash = base::HashMetricName(icu_data_file_name);
+- base::UmaHistogramSparse(kICUDataFile, hash);
+- return;
+- }
+- case UTRACE_UBRK_CREATE_LINE: {
+- const char* lb_type = va_arg(args, const char*);
+- va_end(args);
+- ICUCreateInstance value;
+- switch (lb_type[0]) {
+- case '\0':
+- value = ICUCreateInstance::kLineBreakIterator;
+- break;
+- case 'l':
+- DCHECK(strcmp(lb_type, "loose") == 0);
+- value = ICUCreateInstance::kLineBreakIteratorTypeLoose;
+- break;
+- case 'n':
+- DCHECK(strcmp(lb_type, "normal") == 0);
+- value = ICUCreateInstance::kLineBreakIteratorTypeNormal;
+- break;
+- case 's':
+- DCHECK(strcmp(lb_type, "strict") == 0);
+- value = ICUCreateInstance::kLineBreakIteratorTypeStrict;
+- break;
+- default:
+- return;
+- }
+- base::UmaHistogramEnumeration(kICUCreateInstance, value);
+- return;
+- }
+- case UTRACE_UBRK_CREATE_BREAK_ENGINE: {
+- const char* script = va_arg(args, const char*);
+- va_end(args);
+- ICUCreateInstance value;
+- switch (script[0]) {
+- case 'H':
+- DCHECK(strcmp(script, "Hani") == 0);
+- value = ICUCreateInstance::kChineseJapaneseBreakEngine;
+- break;
+- case 'K':
+- DCHECK(strcmp(script, "Khmr") == 0);
+- value = ICUCreateInstance::kKhmerBreakEngine;
+- break;
+- case 'L':
+- DCHECK(strcmp(script, "Laoo") == 0);
+- value = ICUCreateInstance::kLaoBreakEngine;
+- break;
+- case 'M':
+- DCHECK(strcmp(script, "Mymr") == 0);
+- value = ICUCreateInstance::kBurmeseBreakEngine;
+- break;
+- case 'T':
+- DCHECK(strcmp(script, "Thai") == 0);
+- value = ICUCreateInstance::kThaiBreakEngine;
+- break;
+- default:
+- return;
++// Callback function to report the opening of ICU Data File to UMA.
++// This help us to understand what built-in ICU data files are rarely used
++// in the user's machines.
++static void U_CALLCONV TraceICUDataFile(const void* context,
++ int32_t fn_number,
++ int32_t level,
++ const char* fmt,
++ va_list args) {
++ if (fn_number == UTRACE_UDATA_DATA_FILE) {
++ std::string icu_data_file_name(va_arg(args, const char*));
++ va_end(args);
++ // Skip icu version specified prefix if exist.
++ // path is prefixed with icu version prefix such as "icudt65l-".
++ // Histogram only the part after the -.
++ if (icu_data_file_name.find("icudt") == 0) {
++ size_t dash = icu_data_file_name.find("-");
++ if (dash != std::string::npos) {
++ icu_data_file_name = icu_data_file_name.substr(dash + 1);
+ }
+- base::UmaHistogramEnumeration(kICUCreateInstance, value);
+- return;
+ }
++ // UmaHistogramSparse should track less than 100 values.
++ // We currently have about total 55 built-in data files inside ICU
++ // so it fit the UmaHistogramSparse usage.
++ int hash = base::HashMetricName(icu_data_file_name);
++ base::UmaHistogramSparse(kICUDataFile, hash);
+ }
+ }
+
+@@ -491,7 +389,7 @@ bool DoCommonInitialization() {
+ InitializeIcuTimeZone();
+
+ const void* context = nullptr;
+- utrace_setFunctions(context, TraceICUEntry, nullptr, TraceICUData);
++ utrace_setFunctions(context, nullptr, nullptr, TraceICUDataFile);
+ utrace_setLevel(UTRACE_VERBOSE);
+ return true;
+ }
+--
+2.26.1
+
diff --git a/0006-Revert-PM-Add-calculation-of-maximum-simultaneous-lo.patch b/0006-Revert-PM-Add-calculation-of-maximum-simultaneous-lo.patch
new file mode 100644
index 000000000000..8901d446acb7
--- /dev/null
+++ b/0006-Revert-PM-Add-calculation-of-maximum-simultaneous-lo.patch
@@ -0,0 +1,244 @@
+From 5794a8df921586417f6ffd6e05214b0258df7a00 Mon Sep 17 00:00:00 2001
+From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
+Date: Sat, 11 Apr 2020 13:01:16 +1000
+Subject: [PATCH 6/8] Revert "[PM] Add calculation of maximum simultaneous
+ load"
+
+This reverts commit b759260ca14691c4ffc386a4c64aef6f4b404618.
+---
+ chrome/browser/BUILD.gn | 2 -
+ .../policies/background_tab_loading_policy.cc | 19 -------
+ .../policies/background_tab_loading_policy.h | 4 --
+ .../background_tab_loading_policy_helpers.cc | 39 --------------
+ .../background_tab_loading_policy_helpers.h | 25 ---------
+ ...und_tab_loading_policy_helpers_unittest.cc | 54 -------------------
+ chrome/test/BUILD.gn | 1 -
+ 7 files changed, 144 deletions(-)
+ delete mode 100644 chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.cc
+ delete mode 100644 chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h
+ delete mode 100644 chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers_unittest.cc
+
+diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
+index 023024e81c99..61c2784bd4c7 100644
+--- a/chrome/browser/BUILD.gn
++++ b/chrome/browser/BUILD.gn
+@@ -3376,8 +3376,6 @@ jumbo_static_library("browser") {
+ "page_load_metrics/observers/session_restore_page_load_metrics_observer.h",
+ "performance_manager/graph/policies/background_tab_loading_policy.cc",
+ "performance_manager/graph/policies/background_tab_loading_policy.h",
+- "performance_manager/graph/policies/background_tab_loading_policy_helpers.cc",
+- "performance_manager/graph/policies/background_tab_loading_policy_helpers.h",
+ "performance_manager/graph/policies/urgent_page_discarding_policy.cc",
+ "performance_manager/graph/policies/urgent_page_discarding_policy.h",
+ "performance_manager/mechanisms/page_discarder.cc",
+diff --git a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.cc b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.cc
+index 7f68ad5c9c81..eb8c5a1ff489 100644
+--- a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.cc
++++ b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.cc
+@@ -4,8 +4,6 @@
+
+ #include "chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.h"
+
+-#include "base/system/sys_info.h"
+-#include "chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h"
+ #include "chrome/browser/performance_manager/mechanisms/page_loader.h"
+ #include "components/performance_manager/public/decorators/tab_properties_decorator.h"
+ #include "components/performance_manager/public/graph/policies/background_tab_loading_policy.h"
+@@ -16,21 +14,7 @@ namespace performance_manager {
+ namespace policies {
+
+ namespace {
+-
+-// Pointer to the instance of itself.
+ BackgroundTabLoadingPolicy* g_background_tab_loading_policy = nullptr;
+-
+-// Lower bound for the maximum number of tabs to load simultaneously.
+-uint32_t kMinSimultaneousTabLoads = 1;
+-
+-// Upper bound for the maximum number of tabs to load simultaneously.
+-// Setting to zero means no upper bound is applied.
+-uint32_t kMaxSimultaneousTabLoads = 4;
+-
+-// The number of CPU cores required per permitted simultaneous tab
+-// load. Setting to zero means no CPU core limit applies.
+-uint32_t kCoresPerSimultaneousTabLoad = 2;
+-
+ } // namespace
+
+ void ScheduleLoadForRestoredTabs(
+@@ -64,9 +48,6 @@ BackgroundTabLoadingPolicy::BackgroundTabLoadingPolicy()
+ : page_loader_(std::make_unique<mechanism::PageLoader>()) {
+ DCHECK(!g_background_tab_loading_policy);
+ g_background_tab_loading_policy = this;
+- simultaneous_tab_loads_ = CalculateMaxSimultaneousTabLoads(
+- kMinSimultaneousTabLoads, kMaxSimultaneousTabLoads,
+- kCoresPerSimultaneousTabLoad, base::SysInfo::NumberOfProcessors());
+ }
+
+ BackgroundTabLoadingPolicy::~BackgroundTabLoadingPolicy() {
+diff --git a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.h b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.h
+index e9ea7180444a..b9187bfb2ae8 100644
+--- a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.h
++++ b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy.h
+@@ -69,10 +69,6 @@ class BackgroundTabLoadingPolicy : public GraphOwned,
+
+ // The set of PageNodes that are currently loading.
+ std::vector<const PageNode*> page_nodes_loading_;
+-
+- // The number of simultaneous tab loads that are permitted by policy. This
+- // is computed based on the number of cores on the machine.
+- size_t simultaneous_tab_loads_;
+ };
+
+ } // namespace policies
+diff --git a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.cc b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.cc
+deleted file mode 100644
+index 6ab117bc44c8..000000000000
+--- a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.cc
++++ /dev/null
+@@ -1,39 +0,0 @@
+-// Copyright 2020 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#include "chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h"
+-#include "base/logging.h"
+-
+-namespace performance_manager {
+-
+-namespace policies {
+-
+-size_t CalculateMaxSimultaneousTabLoads(size_t lower_bound,
+- size_t upper_bound,
+- size_t cores_per_load,
+- size_t num_cores) {
+- DCHECK(upper_bound == 0 || lower_bound <= upper_bound);
+- DCHECK(num_cores > 0);
+-
+- size_t loads = 0;
+-
+- // Setting |cores_per_load| == 0 means that no per-core limit is applied.
+- if (cores_per_load == 0) {
+- loads = std::numeric_limits<size_t>::max();
+- } else {
+- loads = num_cores / cores_per_load;
+- }
+-
+- // If |upper_bound| isn't zero then apply the maximum that it implies.
+- if (upper_bound != 0)
+- loads = std::min(loads, upper_bound);
+-
+- loads = std::max(loads, lower_bound);
+-
+- return loads;
+-}
+-
+-} // namespace policies
+-
+-} // namespace performance_manager
+diff --git a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h
+deleted file mode 100644
+index fae53ab119bd..000000000000
+--- a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h
++++ /dev/null
+@@ -1,25 +0,0 @@
+-// Copyright 2020 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#ifndef CHROME_BROWSER_PERFORMANCE_MANAGER_GRAPH_POLICIES_BACKGROUND_TAB_LOADING_POLICY_HELPERS_H_
+-#define CHROME_BROWSER_PERFORMANCE_MANAGER_GRAPH_POLICIES_BACKGROUND_TAB_LOADING_POLICY_HELPERS_H_
+-
+-#include <stddef.h>
+-
+-namespace performance_manager {
+-
+-namespace policies {
+-
+-// Helper function for BackgroundTabLoadingPolicy to compute the number of
+-// tabs that can load simultaneously.
+-size_t CalculateMaxSimultaneousTabLoads(size_t lower_bound,
+- size_t upper_bound,
+- size_t cores_per_load,
+- size_t num_cores);
+-
+-} // namespace policies
+-
+-} // namespace performance_manager
+-
+-#endif // CHROME_BROWSER_PERFORMANCE_MANAGER_GRAPH_POLICIES_BACKGROUND_TAB_LOADING_POLICY_HELPERS_H_
+diff --git a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers_unittest.cc b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers_unittest.cc
+deleted file mode 100644
+index 4429a0e982f9..000000000000
+--- a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers_unittest.cc
++++ /dev/null
+@@ -1,54 +0,0 @@
+-// Copyright 2020 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#include "chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h"
+-
+-#include "testing/gtest/include/gtest/gtest.h"
+-
+-namespace performance_manager {
+-
+-namespace policies {
+-
+-namespace {
+-
+-class BackgroundTabLoadingPolicyHelpersTest : public ::testing::Test {};
+-
+-} // namespace
+-
+-TEST_F(BackgroundTabLoadingPolicyHelpersTest,
+- CalculateMaxSimultaneousTabLoads) {
+- // Test the lower bound is enforced.
+- EXPECT_EQ(10u, CalculateMaxSimultaneousTabLoads(
+- 10 /* lower_bound */, 20 /* upper_bound */,
+- 1 /* cores_per_load */, 1 /* cores */));
+-
+- // Test the upper bound is enforced.
+- EXPECT_EQ(20u, CalculateMaxSimultaneousTabLoads(
+- 10 /* lower_bound */, 20 /* upper_bound */,
+- 1 /* cores_per_load */, 30 /* cores */));
+-
+- // Test the per-core calculation is correct.
+- EXPECT_EQ(15u, CalculateMaxSimultaneousTabLoads(
+- 10 /* lower_bound */, 20 /* upper_bound */,
+- 1 /* cores_per_load */, 15 /* cores */));
+- EXPECT_EQ(15u, CalculateMaxSimultaneousTabLoads(
+- 10 /* lower_bound */, 20 /* upper_bound */,
+- 2 /* cores_per_load */, 30 /* cores */));
+-
+- // If no per-core is specified then upper_bound is returned.
+- EXPECT_EQ(5u, CalculateMaxSimultaneousTabLoads(
+- 1 /* lower_bound */, 5 /* upper_bound */,
+- 0 /* cores_per_load */, 10 /* cores */));
+-
+- // If no per-core and no upper_bound is applied, then "upper_bound" is
+- // returned.
+- EXPECT_EQ(
+- std::numeric_limits<size_t>::max(),
+- CalculateMaxSimultaneousTabLoads(3 /* lower_bound */, 0 /* upper_bound */,
+- 0 /* cores_per_load */, 4 /* cores */));
+-}
+-
+-} // namespace policies
+-
+-} // namespace performance_manager
+diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
+index 2bce2f66a1ec..f7886e10f3eb 100644
+--- a/chrome/test/BUILD.gn
++++ b/chrome/test/BUILD.gn
+@@ -3991,7 +3991,6 @@ test("unit_tests") {
+ "../browser/performance_manager/graph/policies/urgent_page_discarding_policy_unittest.cc",
+
+ # Background tab loading from performance_manager isn't supported on Android.
+- "../browser/performance_manager/graph/policies/background_tab_loading_policy_helpers_unittest.cc",
+ "../browser/performance_manager/graph/policies/background_tab_loading_policy_unittest.cc",
+
+ # Android does not use the Message Center notification system.
+--
+2.26.1
+
diff --git a/0007-Add-missing-memory-header-in-trust_token_attribute_p.patch b/0007-Add-missing-memory-header-in-trust_token_attribute_p.patch
new file mode 100644
index 000000000000..8e919df96f48
--- /dev/null
+++ b/0007-Add-missing-memory-header-in-trust_token_attribute_p.patch
@@ -0,0 +1,26 @@
+From 71b4b6b16053ee3b6d2fb47a80007ca248caa0d7 Mon Sep 17 00:00:00 2001
+From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
+Date: Fri, 17 Apr 2020 02:14:15 +1000
+Subject: [PATCH 7/8] Add missing memory header in
+ trust_token_attribute_parsing.h
+
+---
+ .../blink/renderer/core/html/trust_token_attribute_parsing.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h b/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h
+index f5a7ab03892b..ef19cfaf680f 100644
+--- a/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h
++++ b/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h
+@@ -5,6 +5,8 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_TRUST_TOKEN_ATTRIBUTE_PARSING_H_
+ #define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_TRUST_TOKEN_ATTRIBUTE_PARSING_H_
+
++#include <memory>
++
+ #include "base/optional.h"
+ #include "services/network/public/mojom/trust_tokens.mojom-blink-forward.h"
+ #include "third_party/blink/renderer/core/core_export.h"
+--
+2.26.1
+
diff --git a/0003-Revert-FragmentItem-Two-fixes-for-outline.patch b/0008-Revert-FragmentItem-Two-fixes-for-outline.patch
index 92cd35db0f6e..66acc660bf4e 100644
--- a/0003-Revert-FragmentItem-Two-fixes-for-outline.patch
+++ b/0008-Revert-FragmentItem-Two-fixes-for-outline.patch
@@ -1,7 +1,7 @@
-From d73794f48b5b20b05c0bd6c4657181f16dce8c2a Mon Sep 17 00:00:00 2001
+From bcac6dec62f192996a5bc061c140da211fc7e8bf Mon Sep 17 00:00:00 2001
From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
-Date: Sun, 5 Apr 2020 18:07:27 +1000
-Subject: [PATCH 3/3] Revert "[FragmentItem] Two fixes for outline"
+Date: Fri, 17 Apr 2020 02:30:27 +1000
+Subject: [PATCH 8/8] Revert "[FragmentItem] Two fixes for outline"
This reverts commit a340aadc092315215068045d847516f985b6a9f3.
---
@@ -80,5 +80,5 @@ index 82f57612ce45..a2f8092c791a 100644
// Outlines of out-of-flow positioned descendants are handled in
// NGPhysicalBoxFragment::AddSelfOutlineRects().
--
-2.26.0
+2.26.1
diff --git a/PKGBUILD b/PKGBUILD
index 706269632fc5..0bed720f5729 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -5,7 +5,7 @@
# Contributor: Daniel J Griffiths <ghost1227@archlinux.us>
pkgname=chromium-dev-ozone
-pkgver=83.0.4100.3
+pkgver=83.0.4103.14
pkgrel=1
_launcher_ver=6
pkgdesc="Chromium built with patches for wayland support via Ozone (dev channel)"
@@ -31,16 +31,26 @@ source=(https://commondatastorage.googleapis.com/chromium-browser-official/chrom
chromium-launcher-$_launcher_ver.tar.gz::https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver.tar.gz
chromium-widevine.patch
chromium-skia-harmony.patch
- 0001-add-missing-algorithm-header.patch
- 0002-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
- 0003-Revert-FragmentItem-Two-fixes-for-outline.patch)
-sha256sums=('de935646f509f31110c0c80353fb82178a8f6ff4fa39e07449f20bb3abdccde7'
+ 0001-Revert-RTCInsertableStreams-Make-RTCEncodedAudioFram.patch
+ 0002-Revert-RTCInsertableStreams-Make-RTCEncodedVideoFram.patch
+ 0003-Add-missing-algorithm-header-in-crx_install_error.cc.patch
+ 0004-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
+ 0005-Revert-Trace-ICU-object-creation-in-ICU.CreateInstan.patch
+ 0006-Revert-PM-Add-calculation-of-maximum-simultaneous-lo.patch
+ 0007-Add-missing-memory-header-in-trust_token_attribute_p.patch
+ 0008-Revert-FragmentItem-Two-fixes-for-outline.patch)
+sha256sums=('6e3d4853dcbd3c2375a1462a764102f6893c3b0505037e28c04bf90002e526e8'
'04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1'
'709e2fddba3c1f2ed4deb3a239fc0479bfa50c46e054e7f32db4fb1365fed070'
'771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1'
- '09f847e4abaa91f9bf92e084ec45f331dbb79936e742fb3ec9ed7a916503ef12'
- 'ad336230b964644ed8db148c497091a001d8601a220b5dd7307b91d13b5473d4'
- 'b65b6cf6e0239ddb6c44b8b2fdc87f711b9e936e8fa6cdd2bdd0f4988b3d759f')
+ 'c53edc13ca335652608607e628284a79d91f5524d9b5e72a8f2d29b4d7618c75'
+ 'cf27aa2a98bc71686e3e0f482b720d7d25017158ab2c7d93b548b3578c4b53e2'
+ '9f2211edf347d54b8167a3b9d773e38aeabce5f98fb1932e7db1aeec845579f6'
+ '5db92d614aba64e9eb684f35e06f36786b74d5a1456308d4d40a65f12e32f62b'
+ '52b0129ac7db760078087a2839e257183f10df8e9f831ec07e6cfc8f5ba455eb'
+ '2b594ff5bc731897274027ddb79a77d247a52ef0990d574ec815b36082ac093a'
+ '91cc1ac6cd6568de8c45a3fb3c6b57fa9ea6e6ae6f2a05f1ff82677d0cdbdedb'
+ '771b862e16ff42e0d43d6f0f5fd49d65210732bb0ae19cc4ea18c2220b4cb041')
# Possible replacements are listed in build/linux/unbundle/replace_gn_files.py
# Keys are the names in the above script; values are the dependencies in Arch
@@ -77,7 +87,7 @@ _google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM
_google_default_client_id=413772536636.apps.googleusercontent.com
_google_default_client_secret=0ZChLK6AxeA3Isu96MkwqDR4
-# Branch point: 737173
+# Branch point: 756066
# Extra commits related specifically to wayland support:
# These consist of the above commits and their dependencies
@@ -105,9 +115,14 @@ prepare() {
# https://crbug.com/skia/6663#c10
patch -Np0 -i ../chromium-skia-harmony.patch
- patch -Np1 -i ../0001-add-missing-algorithm-header.patch
- patch -Np1 -i ../0002-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
- patch -Np1 -i ../0003-Revert-FragmentItem-Two-fixes-for-outline.patch
+ patch -Np1 -i ../0001-Revert-RTCInsertableStreams-Make-RTCEncodedAudioFram.patch
+ patch -Np1 -i ../0002-Revert-RTCInsertableStreams-Make-RTCEncodedVideoFram.patch
+ patch -Np1 -i ../0003-Add-missing-algorithm-header-in-crx_install_error.cc.patch
+ patch -Np1 -i ../0004-libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
+ patch -Np1 -i ../0005-Revert-Trace-ICU-object-creation-in-ICU.CreateInstan.patch
+ patch -Np1 -i ../0006-Revert-PM-Add-calculation-of-maximum-simultaneous-lo.patch
+ patch -Np1 -i ../0007-Add-missing-memory-header-in-trust_token_attribute_p.patch
+ patch -Np1 -i ../0008-Revert-FragmentItem-Two-fixes-for-outline.patch
for PATCH in ${_bugfix_patches[@]}
do