summaryrefslogtreecommitdiff
path: root/www-client/chromium/files
diff options
context:
space:
mode:
Diffstat (limited to 'www-client/chromium/files')
-rw-r--r--www-client/chromium/files/chromium-71-gcc-0.patch57
-rw-r--r--www-client/chromium/files/chromium-73-gcc-0.patch108
-rw-r--r--www-client/chromium/files/chromium-73-gcc-1.patch99
-rw-r--r--www-client/chromium/files/chromium-73-gcc-2.patch51
-rw-r--r--www-client/chromium/files/chromium-73-gcc-3.patch69
-rw-r--r--www-client/chromium/files/chromium-73-gcc-4.patch59
-rw-r--r--www-client/chromium/files/chromium-73-gcc-5.patch65
-rw-r--r--www-client/chromium/files/chromium-73-gcc-6.patch88
-rw-r--r--www-client/chromium/files/chromium-74-gcc.patch25
-rw-r--r--www-client/chromium/files/chromium-75-vaapi.patch254
-rw-r--r--www-client/chromium/files/chromium-76-arm64-skia.patch41
-rw-r--r--www-client/chromium/files/chromium-76-gcc-ambiguous-nodestructor.patch39
-rw-r--r--www-client/chromium/files/chromium-76-gcc-blink-constexpr.patch32
-rw-r--r--www-client/chromium/files/chromium-76-gcc-blink-namespace1.patch91
-rw-r--r--www-client/chromium/files/chromium-76-gcc-blink-namespace2.patch97
-rw-r--r--www-client/chromium/files/chromium-76-gcc-gl-init.patch33
-rw-r--r--www-client/chromium/files/chromium-76-gcc-include.patch10
-rw-r--r--www-client/chromium/files/chromium-76-gcc-noexcept.patch347
-rw-r--r--www-client/chromium/files/chromium-76-gcc-private.patch63
-rw-r--r--www-client/chromium/files/chromium-76-gcc-pure-virtual.patch50
-rw-r--r--www-client/chromium/files/chromium-76-gcc-uint32.patch30
-rw-r--r--www-client/chromium/files/chromium-76-gcc-vulkan.patch115
-rw-r--r--www-client/chromium/files/chromium-76-quiche.patch239
-rw-r--r--www-client/chromium/files/chromium-77-blink-include.patch28
-rw-r--r--www-client/chromium/files/chromium-77-clang.patch13
-rw-r--r--www-client/chromium/files/chromium-77-fix-gn-gen.patch11
-rw-r--r--www-client/chromium/files/chromium-77-gcc-abstract.patch61
-rw-r--r--www-client/chromium/files/chromium-77-gcc-include.patch56
-rw-r--r--www-client/chromium/files/chromium-77-std-string.patch130
-rw-r--r--www-client/chromium/files/chromium-77-system-hb.patch13
-rw-r--r--www-client/chromium/files/chromium-77-system-icu.patch20
-rw-r--r--www-client/chromium/files/chromium-78-include.patch13
-rw-r--r--www-client/chromium/files/chromium-78-protobuf-RepeatedPtrField-export.patch13
-rw-r--r--www-client/chromium/files/chromium-79-gcc-protobuf-alignas.patch81
-rw-r--r--www-client/chromium/files/chromium-79-span-stlcompat.patch12
-rw-r--r--www-client/chromium/files/chromium-80-QuicStreamSendBuffer-deleted-move-constructor.patch30
-rw-r--r--www-client/chromium/files/chromium-84-blink-disable-clang-format.patch33
-rw-r--r--www-client/chromium/files/chromium-86-ConsumeDurationNumber-constexpr.patch32
-rw-r--r--www-client/chromium/files/chromium-86-ImageMemoryBarrierData-init.patch31
-rw-r--r--www-client/chromium/files/chromium-86-compiler.patch159
-rw-r--r--www-client/chromium/files/chromium-86-nearby-explicit.patch25
-rw-r--r--www-client/chromium/files/chromium-86-nearby-include.patch24
-rw-r--r--www-client/chromium/files/chromium-87-CrossThreadPersistent-template.patch32
-rw-r--r--www-client/chromium/files/chromium-87-CursorFactory-include.patch36
-rw-r--r--www-client/chromium/files/chromium-87-SystemMemoryPressureEvaluator-namespace.patch70
-rw-r--r--www-client/chromium/files/chromium-87-Thumbnail-noexcept.patch46
-rw-r--r--www-client/chromium/files/chromium-87-anonymous-struct.patch61
-rw-r--r--www-client/chromium/files/chromium-87-compiler-r1.patch166
-rw-r--r--www-client/chromium/files/chromium-87-openscreen-crypto-include.patch11
-rw-r--r--www-client/chromium/files/chromium-87-ozone-deps.patch15
-rw-r--r--www-client/chromium/files/chromium-87-remotesyscall.patch13
-rw-r--r--www-client/chromium/files/chromium-87-std-max_align_t.patch43
-rw-r--r--www-client/chromium/files/chromium-87-thread_cache.patch25
-rw-r--r--www-client/chromium/files/chromium-88-angle-renderer.patch13
-rw-r--r--www-client/chromium/files/chromium-88-compiler.patch147
-rw-r--r--www-client/chromium/files/chromium-88-compositor-dcheck.patch13
-rw-r--r--www-client/chromium/files/chromium-88-dawn-include.patch12
-rw-r--r--www-client/chromium/files/chromium-88-dawn-size_t-std.patch13
-rw-r--r--www-client/chromium/files/chromium-88-gpu-internals-ozone.patch21
-rw-r--r--www-client/chromium/files/chromium-88-mediasource-uniqptrostream.patch22
-rw-r--r--www-client/chromium/files/chromium-88-pcscan-nonfinal.patch13
-rw-r--r--www-client/chromium/files/chromium-88-service-worker-registration-crash.patch14
-rw-r--r--www-client/chromium/files/chromium-88-system-icu.patch13
-rw-r--r--www-client/chromium/files/chromium-88-tree-formatter-include.patch14
-rw-r--r--www-client/chromium/files/chromium-89-CursorFactory-include.patch20
-rw-r--r--www-client/chromium/files/chromium-89-EnumTable-crash.patch71
-rw-r--r--www-client/chromium/files/chromium-89-angle-display.patch1747
-rw-r--r--www-client/chromium/files/chromium-89-compositor-dcheck.patch13
-rw-r--r--www-client/chromium/files/chromium-89-content-dcheck-uniqueptr.patch13
-rw-r--r--www-client/chromium/files/chromium-89-dawn-string-include.patch13
-rw-r--r--www-client/chromium/files/chromium-89-pcscan-include.patch12
-rw-r--r--www-client/chromium/files/chromium-89-quiche-uniqueptr.patch13
-rw-r--r--www-client/chromium/files/chromium-89-quiche-uniqueptr_r1.patch13
-rw-r--r--www-client/chromium/files/chromium-89-sstream.patch344
-rw-r--r--www-client/chromium/files/chromium-89-uigfx-image-skia.patch22
-rw-r--r--www-client/chromium/files/chromium-89-webui-config-include.patch12
-rw-r--r--www-client/chromium/files/chromium-90-blink-disable-clang-format.patch19
-rw-r--r--www-client/chromium/files/chromium-90-compositor-dcheck.patch13
-rw-r--r--www-client/chromium/files/chromium-90-disable-nomerge.patch13
-rw-r--r--www-client/chromium/files/chromium-90-langdetect-include.patch12
-rw-r--r--www-client/chromium/files/chromium-90-quantization-util-stdint.patch12
-rw-r--r--www-client/chromium/files/chromium-90-quiche-uniqueptr.patch13
-rw-r--r--www-client/chromium/files/chromium-90-ruy-include.patch24
-rw-r--r--www-client/chromium/files/chromium-91-clipboard-ozone.patch48
-rw-r--r--www-client/chromium/files/chromium-91-compiler-r1.patch165
-rw-r--r--www-client/chromium/files/chromium-91-compiler.patch154
-rw-r--r--www-client/chromium/files/chromium-91-disable-nomerge.patch13
-rw-r--r--www-client/chromium/files/chromium-91-libyuv-aarch64.patch91
-rw-r--r--www-client/chromium/files/chromium-92-ClassPropertyCaster-namespace.patch46
-rw-r--r--www-client/chromium/files/chromium-92-base_atomic_include.patch12
-rw-r--r--www-client/chromium/files/chromium-92-glibc-2.33.patch146
-rw-r--r--www-client/chromium/files/chromium-92-platform_thread-include.patch24
-rw-r--r--www-client/chromium/files/chromium-92-sql-cursor.patch231
-rw-r--r--www-client/chromium/files/chromium-93-AXPropertyNode-private.patch43
-rw-r--r--www-client/chromium/files/chromium-93-EnumTable-crash.patch79
-rw-r--r--www-client/chromium/files/chromium-93-InkDropHost-crash.patch25
-rw-r--r--www-client/chromium/files/chromium-93-cart-include.patch13
-rw-r--r--www-client/chromium/files/chromium-93-devtools-msg-dispatcher-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-dnsprefetch-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-ext-autoconfirm-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-gpu-ipc-include.patch13
-rw-r--r--www-client/chromium/files/chromium-93-hid-chooser-include.patch13
-rw-r--r--www-client/chromium/files/chromium-93-lang-prefs-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-login-detection-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-media-ffmpeg-type.patch36
-rw-r--r--www-client/chromium/files/chromium-93-media-history-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-net-http-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-payment-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-pdfium-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-phishing-classifier-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-pwdmgr-include-r1.patch12
-rw-r--r--www-client/chromium/files/chromium-93-pwdmgr-include.patch25
-rw-r--r--www-client/chromium/files/chromium-93-quiche-logging-include.patch13
-rw-r--r--www-client/chromium/files/chromium-93-site_settings_helper-initialzation.patch37
-rw-r--r--www-client/chromium/files/chromium-93-sms-fetcher-include.patch24
-rw-r--r--www-client/chromium/files/chromium-93-sql-virtual-cursor.patch231
-rw-r--r--www-client/chromium/files/chromium-93-tint-include.patch24
-rw-r--r--www-client/chromium/files/chromium-93-ui-event-include.patch13
-rw-r--r--www-client/chromium/files/chromium-93-url-loader-throttles-include.patch13
-rw-r--r--www-client/chromium/files/chromium-93-webapp-include.patch12
-rw-r--r--www-client/chromium/files/chromium-93-worksp-ext-include.patch37
-rw-r--r--www-client/chromium/files/chromium-94-ConversionStorageSql-lambda.patch31
-rw-r--r--www-client/chromium/files/chromium-94-CustomSpaces-include.patch24
-rw-r--r--www-client/chromium/files/chromium-94-compiler.patch218
-rw-r--r--www-client/chromium/files/chromium-94-sql-virtual-cursor.patch216
-rw-r--r--www-client/chromium/files/chromium-94-translate.patch98
-rw-r--r--www-client/chromium/files/chromium-95-hash_traits-include.patch30
-rw-r--r--www-client/chromium/files/chromium-95-libyuv-aarch64.patch31
-rw-r--r--www-client/chromium/files/chromium-95-text_fragments_utils-include.patch37
-rw-r--r--www-client/chromium/files/chromium-96-AppliedTextDecoration-include.patch25
-rw-r--r--www-client/chromium/files/chromium-96-EnumTable-crash.patch76
-rw-r--r--www-client/chromium/files/chromium-96-ax_platform-list-init.patch15
-rw-r--r--www-client/chromium/files/chromium-96-compiler.patch200
-rw-r--r--www-client/chromium/files/chromium-96-coupondb-include.patch13
-rw-r--r--www-client/chromium/files/chromium-96-template-friend.patch34
-rw-r--r--www-client/chromium/files/chromium-angle-inline.patch118
-rw-r--r--www-client/chromium/files/chromium-axobj-ancestoriter-cat-84.patch33
-rw-r--r--www-client/chromium/files/chromium-axtree-incomplete-type-83.patch41
-rw-r--r--www-client/chromium/files/chromium-base-include-84-r1.patch24
-rw-r--r--www-client/chromium/files/chromium-base-include-84-r2.patch12
-rw-r--r--www-client/chromium/files/chromium-base-include-84.patch281
-rw-r--r--www-client/chromium/files/chromium-blink-include-bitset-84.patch13
-rw-r--r--www-client/chromium/files/chromium-blink-include-limits-84.patch13
-rw-r--r--www-client/chromium/files/chromium-blink-include-memory-83.patch13
-rw-r--r--www-client/chromium/files/chromium-blink-template.patch15
-rw-r--r--www-client/chromium/files/chromium-bluetooth-tuple-84.patch51
-rw-r--r--www-client/chromium/files/chromium-browser.xml13
-rw-r--r--www-client/chromium/files/chromium-build-gn-83.patch36
-rw-r--r--www-client/chromium/files/chromium-cc-matrics-include-84.patch12
-rw-r--r--www-client/chromium/files/chromium-cert-share-encrypted-85.patch13
-rw-r--r--www-client/chromium/files/chromium-char-max-84.patch12
-rw-r--r--www-client/chromium/files/chromium-clang-format-path-82.patch13
-rw-r--r--www-client/chromium/files/chromium-compiler-76.patch160
-rw-r--r--www-client/chromium/files/chromium-compiler-77.patch160
-rw-r--r--www-client/chromium/files/chromium-compiler-78.patch160
-rw-r--r--www-client/chromium/files/chromium-compiler-82.patch166
-rw-r--r--www-client/chromium/files/chromium-compiler-83.patch150
-rw-r--r--www-client/chromium/files/chromium-compiler-84-r1.patch150
-rw-r--r--www-client/chromium/files/chromium-compiler-84.patch150
-rw-r--r--www-client/chromium/files/chromium-compiler-86.patch162
-rw-r--r--www-client/chromium/files/chromium-compiler-87.patch147
-rw-r--r--www-client/chromium/files/chromium-compiler-r10.patch185
-rw-r--r--www-client/chromium/files/chromium-compiler-r4.patch168
-rw-r--r--www-client/chromium/files/chromium-compiler-r6.patch170
-rw-r--r--www-client/chromium/files/chromium-compiler-r7.patch176
-rw-r--r--www-client/chromium/files/chromium-compiler-r8.patch164
-rw-r--r--www-client/chromium/files/chromium-compiler-r9.patch160
-rw-r--r--www-client/chromium/files/chromium-core-management-svc-84.patch12
-rw-r--r--www-client/chromium/files/chromium-crx-install-err-include-83.patch13
-rw-r--r--www-client/chromium/files/chromium-cursor-80.patch99
-rw-r--r--www-client/chromium/files/chromium-deque-constructor-82.patch13
-rw-r--r--www-client/chromium/files/chromium-disable-mojovdec.patch18
-rw-r--r--www-client/chromium/files/chromium-ext-no-vector-const-84.patch40
-rw-r--r--www-client/chromium/files/chromium-fix-char_traits.patch14
-rw-r--r--www-client/chromium/files/chromium-gamepad-include-84.patch12
-rw-r--r--www-client/chromium/files/chromium-gcc-89311.patch88
-rw-r--r--www-client/chromium/files/chromium-gcc-initlist.patch16
-rw-r--r--www-client/chromium/files/chromium-gpu-vp9-include-84.patch13
-rw-r--r--www-client/chromium/files/chromium-harfbuzz-r0.patch80
-rw-r--r--www-client/chromium/files/chromium-hashtable-iterator-cat-83.patch65
-rw-r--r--www-client/chromium/files/chromium-include-limits-83.patch13
-rw-r--r--www-client/chromium/files/chromium-include-limits-84.patch12
-rw-r--r--www-client/chromium/files/chromium-inline-node-ptr-84.patch13
-rw-r--r--www-client/chromium/files/chromium-launcher-r3.sh39
-rw-r--r--www-client/chromium/files/chromium-launcher-r6.sh48
-rw-r--r--www-client/chromium/files/chromium-launcher-r7.sh59
-rw-r--r--www-client/chromium/files/chromium-layer_tree_impl-stlcompat.patch13
-rw-r--r--www-client/chromium/files/chromium-link.patch17
-rw-r--r--www-client/chromium/files/chromium-math.h-r0.patch29
-rw-r--r--www-client/chromium/files/chromium-media-alloc-84.patch22
-rw-r--r--www-client/chromium/files/chromium-memcpy-r0.patch35
-rw-r--r--www-client/chromium/files/chromium-mojo-ltm-83.patch84
-rw-r--r--www-client/chromium/files/chromium-nearby-inc-86.patch10
-rw-r--r--www-client/chromium/files/chromium-ngphyscontainer-iterator-cat-83.patch17
-rw-r--r--www-client/chromium/files/chromium-noexcept-2.patch26
-rw-r--r--www-client/chromium/files/chromium-noexcept-3.patch26
-rw-r--r--www-client/chromium/files/chromium-noexcept.patch26
-rw-r--r--www-client/chromium/files/chromium-ntp_backgrounds-include-84.patch12
-rw-r--r--www-client/chromium/files/chromium-opencv-include-84.patch12
-rw-r--r--www-client/chromium/files/chromium-pa13.patch82
-rw-r--r--www-client/chromium/files/chromium-pdfium-stdlib-r0.patch30
-rw-r--r--www-client/chromium/files/chromium-remove-no_check_targets-86.patch621
-rw-r--r--www-client/chromium/files/chromium-renderer-std-nullptr-83.patch13
-rw-r--r--www-client/chromium/files/chromium-revert-crrev-2147485-84.patch369
-rw-r--r--www-client/chromium/files/chromium-revert-e7963c4-78.patch335
-rw-r--r--www-client/chromium/files/chromium-serviceworker-83.patch130
-rw-r--r--www-client/chromium/files/chromium-shim_headers.patch48
-rw-r--r--www-client/chromium/files/chromium-simhash-include-84.patch26
-rw-r--r--www-client/chromium/files/chromium-simhash-include-85.patch15
-rw-r--r--www-client/chromium/files/chromium-sqrt.patch13
-rw-r--r--www-client/chromium/files/chromium-std-nullptr-83.patch22
-rw-r--r--www-client/chromium/files/chromium-stdint.patch21
-rw-r--r--www-client/chromium/files/chromium-stdset.patch13
-rw-r--r--www-client/chromium/files/chromium-string_view-79.patch78
-rw-r--r--www-client/chromium/files/chromium-swiftshader-77.patch53
-rw-r--r--www-client/chromium/files/chromium-unbundle-zlib.patch25
-rw-r--r--www-client/chromium/files/chromium-union.patch54
-rw-r--r--www-client/chromium/files/chromium-unique_ptr-80-r1.patch13
-rw-r--r--www-client/chromium/files/chromium-unique_ptr-80.patch12
-rw-r--r--www-client/chromium/files/chromium-use-oauth2-client-switches-as-default.patch17
-rw-r--r--www-client/chromium/files/chromium-vaapi-76-r1.patch213
-rw-r--r--www-client/chromium/files/chromium-vaapi-76.patch218
-rw-r--r--www-client/chromium/files/chromium-vaapi-77.patch213
-rw-r--r--www-client/chromium/files/chromium-vaapi-78-r1.patch220
-rw-r--r--www-client/chromium/files/chromium-vaapi-78.patch178
-rw-r--r--www-client/chromium/files/chromium-vaapi-79.patch220
-rw-r--r--www-client/chromium/files/chromium-vaapi-80.patch168
-rw-r--r--www-client/chromium/files/chromium-vaapi-81.patch181
-rw-r--r--www-client/chromium/files/chromium-vaapi-82.patch186
-rw-r--r--www-client/chromium/files/chromium-vaapi-83.patch186
-rw-r--r--www-client/chromium/files/chromium-vaapi-87.patch137
-rw-r--r--www-client/chromium/files/chromium-vaapi-fix-87.patch200
-rw-r--r--www-client/chromium/files/chromium-vaapi-signature.patch26
-rw-r--r--www-client/chromium/files/chromium-vector-include-81.patch13
-rw-r--r--www-client/chromium/files/chromium-vector-init.patch13
-rw-r--r--www-client/chromium/files/chromium-vk.patch21
-rw-r--r--www-client/chromium/files/chromium-vr.patch47
-rw-r--r--www-client/chromium/files/chromium-webrtc-include-84.patch10
-rw-r--r--www-client/chromium/files/chromium-webrtc-r0.patch34
-rw-r--r--www-client/chromium/files/chromium-webrtc.patch13
-rw-r--r--www-client/chromium/files/chromium-widevine-80.patch11
-rw-r--r--www-client/chromium/files/chromium-widevine-r2.patch39
-rw-r--r--www-client/chromium/files/chromium-widevine-r3.patch23
-rw-r--r--www-client/chromium/files/chromium-widevine-r4.patch26
-rw-r--r--www-client/chromium/files/chromium-wpt-gn-78.patch13
-rw-r--r--www-client/chromium/files/chromium-zlib-78.patch11
-rw-r--r--www-client/chromium/files/chromium-zlib-82.patch9
-rw-r--r--www-client/chromium/files/chromium.default5
248 files changed, 17581 insertions, 0 deletions
diff --git a/www-client/chromium/files/chromium-71-gcc-0.patch b/www-client/chromium/files/chromium-71-gcc-0.patch
new file mode 100644
index 0000000..711b827
--- /dev/null
+++ b/www-client/chromium/files/chromium-71-gcc-0.patch
@@ -0,0 +1,57 @@
+From 65be571f6ac2f7942b4df9e50b24da517f829eec Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Mon, 15 Oct 2018 20:26:10 +0000
+Subject: [PATCH] google_util: Explicitly use std::initializer_list with
+ base::NoDestructor
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Follow-up to ac53c5c53 ("Remove CR_DEFINE_STATIC_LOCAL from /components").
+Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84849, having
+base::NoDestructor<T<U>> and passing an initializer list of Us does not
+work if this is not done explicitly, as GCC incorrectly fails to determine
+which constructor overload to use:
+
+ ../../components/google/core/common/google_util.cc: In function ‘bool google_util::{anonymous}::IsCanonicalHostGoogleHostname(base::StringPiece, google_util::SubdomainPermission)’:
+ ../../components/google/core/common/google_util.cc:120:24: error: call of overloaded ‘NoDestructor(<brace-enclosed initializer list>)’ is ambiguous
+ {GOOGLE_TLD_LIST});
+
+See also: https://chromium-review.googlesource.com/c/chromium/src/+/1170905
+
+Bug: 819294
+Change-Id: Ie1490b6646d7998d636c485769caabf56c1cf44c
+Reviewed-on: https://chromium-review.googlesource.com/c/1275854
+Reviewed-by: Peter Kasting <pkasting@chromium.org>
+Commit-Queue: Raphael Kubo da Costa (CET) <raphael.kubo.da.costa@intel.com>
+Cr-Commit-Position: refs/heads/master@{#599733}
+---
+ components/google/core/common/google_util.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/components/google/core/common/google_util.cc b/components/google/core/common/google_util.cc
+index a44c84393820..7733848a0443 100644
+--- a/components/google/core/common/google_util.cc
++++ b/components/google/core/common/google_util.cc
+@@ -117,7 +117,7 @@ bool IsCanonicalHostGoogleHostname(base::StringPiece canonical_host,
+ StripTrailingDot(&tld);
+
+ static base::NoDestructor<std::set<std::string>> google_tlds(
+- {GOOGLE_TLD_LIST});
++ std::initializer_list<std::string>({GOOGLE_TLD_LIST}));
+ return base::ContainsKey(*google_tlds, tld.as_string());
+ }
+
+@@ -132,7 +132,8 @@ bool IsGoogleSearchSubdomainUrl(const GURL& url) {
+ StripTrailingDot(&host);
+
+ static base::NoDestructor<std::set<std::string>> google_subdomains(
+- {"ipv4.google.com", "ipv6.google.com"});
++ std::initializer_list<std::string>(
++ {"ipv4.google.com", "ipv6.google.com"}));
+
+ return base::ContainsKey(*google_subdomains, host.as_string());
+ }
+--
+2.19.1
+
diff --git a/www-client/chromium/files/chromium-73-gcc-0.patch b/www-client/chromium/files/chromium-73-gcc-0.patch
new file mode 100644
index 0000000..5a50700
--- /dev/null
+++ b/www-client/chromium/files/chromium-73-gcc-0.patch
@@ -0,0 +1,108 @@
+From 2c3b57cafbbb38c13a519c9d2fda8b65691d9564 Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Thu, 7 Feb 2019 22:55:37 +0000
+Subject: [PATCH] allocator shim: Swap ALIGN_LINKAGE and SHIM_ALWAYS_EXPORT's
+ positions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This fixes the GCC build. GCC seems to be stricter with the position of the
+linkage specification, so just swap the terms to prevent an error that looks
+like:
+
+In file included from ../../base/allocator/allocator_shim.cc:333:
+../../base/allocator/allocator_shim_override_cpp_symbols.h:39:30: error: expected unqualified-id before string constant
+ #define ALIGN_LINKAGE extern "C"
+ ^~~
+../../base/allocator/allocator_shim_override_cpp_symbols.h:99:20: note: in expansion of macro ‘ALIGN_LINKAGE’
+ SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void* ALIGN_NEW(std::size_t size,
+ ^~~~~~~~~~~~~
+
+Bug: 819294
+Change-Id: I0aa16ea88cead42e83796a1c86afad8b447ddc50
+Reviewed-on: https://chromium-review.googlesource.com/c/1458256
+Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
+Reviewed-by: Primiano Tucci <primiano@chromium.org>
+Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Cr-Commit-Position: refs/heads/master@{#630084}
+---
+ .../allocator_shim_override_cpp_symbols.h | 20 +++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/base/allocator/allocator_shim_override_cpp_symbols.h b/base/allocator/allocator_shim_override_cpp_symbols.h
+index 1228f5e33d28..01d25b7f6437 100644
+--- a/base/allocator/allocator_shim_override_cpp_symbols.h
++++ b/base/allocator/allocator_shim_override_cpp_symbols.h
+@@ -96,57 +96,57 @@ SHIM_ALWAYS_EXPORT void operator delete[](void* p, size_t) __THROW {
+ ShimCppDelete(p);
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void* ALIGN_NEW(std::size_t size,
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void* ALIGN_NEW(std::size_t size,
+ ALIGN_VAL_T alignment) {
+ return ShimCppAlignedNew(size, static_cast<size_t>(alignment));
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void* ALIGN_NEW_NOTHROW(
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void* ALIGN_NEW_NOTHROW(
+ std::size_t size,
+ ALIGN_VAL_T alignment,
+ const std::nothrow_t&) __THROW {
+ return ShimCppAlignedNew(size, static_cast<size_t>(alignment));
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void ALIGN_DEL(void* p, ALIGN_VAL_T) __THROW {
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void ALIGN_DEL(void* p, ALIGN_VAL_T) __THROW {
+ ShimCppDelete(p);
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void ALIGN_DEL_SIZED(void* p,
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void ALIGN_DEL_SIZED(void* p,
+ std::size_t size,
+ ALIGN_VAL_T) __THROW {
+ ShimCppDelete(p);
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void
+ ALIGN_DEL_NOTHROW(void* p, ALIGN_VAL_T, const std::nothrow_t&) __THROW {
+ ShimCppDelete(p);
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void* ALIGN_NEW_ARR(std::size_t size,
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void* ALIGN_NEW_ARR(std::size_t size,
+ ALIGN_VAL_T alignment) {
+ return ShimCppAlignedNew(size, static_cast<size_t>(alignment));
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void* ALIGN_NEW_ARR_NOTHROW(
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void* ALIGN_NEW_ARR_NOTHROW(
+ std::size_t size,
+ ALIGN_VAL_T alignment,
+ const std::nothrow_t&) __THROW {
+ return ShimCppAlignedNew(size, static_cast<size_t>(alignment));
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void ALIGN_DEL_ARR(void* p,
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void ALIGN_DEL_ARR(void* p,
+ ALIGN_VAL_T) __THROW {
+ ShimCppDelete(p);
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void ALIGN_DEL_ARR_SIZED(void* p,
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void ALIGN_DEL_ARR_SIZED(void* p,
+ std::size_t size,
+ ALIGN_VAL_T) __THROW {
+ ShimCppDelete(p);
+ }
+
+-SHIM_ALWAYS_EXPORT ALIGN_LINKAGE void
++ALIGN_LINKAGE SHIM_ALWAYS_EXPORT void
+ ALIGN_DEL_ARR_NOTHROW(void* p, ALIGN_VAL_T, const std::nothrow_t&) __THROW {
+ ShimCppDelete(p);
+ }
+--
+2.20.1
+
diff --git a/www-client/chromium/files/chromium-73-gcc-1.patch b/www-client/chromium/files/chromium-73-gcc-1.patch
new file mode 100644
index 0000000..c3f8e42
--- /dev/null
+++ b/www-client/chromium/files/chromium-73-gcc-1.patch
@@ -0,0 +1,99 @@
+From 130a5ae24a02daba8729ba2216bcaf3dbfacea69 Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Fri, 8 Feb 2019 16:58:38 +0000
+Subject: [PATCH] media::learning: Make LabelledExample's move assignment
+ operator noexcept
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The GCC build is currently broken with an error like this:
+
+ ../../media/learning/common/labelled_example.cc:20:1: error: function ‘media::learning::LabelledExample::LabelledExample(media::learning::LabelledExample&&)’ defaulted on its redeclaration with an exception-specification that differs from the implicit exception-specification ‘’
+ LabelledExample::LabelledExample(LabelledExample&& rhs) noexcept = default;
+ ^~~~~~~~~~~~~~~
+
+With GCC, having that noexcept marker requires all members to be marked with
+noexcept themselves, and TargetValue was missing some assignment operators
+and noexcept markers.
+
+clang is fine because we pass -fno-exceptions and it disables the same error
+there, while GCC continues to raise it (bug 843143 and its corresponding CL
+have a longer discussion on this issue).
+
+Bug: 819294
+Change-Id: Ide30932fc466ccb52d6883a82777e703dae48798
+Reviewed-on: https://chromium-review.googlesource.com/c/1458210
+Commit-Queue: Frank Liberato <liberato@chromium.org>
+Reviewed-by: Frank Liberato <liberato@chromium.org>
+Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Cr-Commit-Position: refs/heads/master@{#630355}
+---
+ media/learning/common/labelled_example.cc | 3 ++-
+ media/learning/common/labelled_example.h | 2 +-
+ media/learning/common/value.cc | 6 ++++++
+ media/learning/common/value.h | 4 ++++
+ 4 files changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/media/learning/common/labelled_example.cc b/media/learning/common/labelled_example.cc
+index 76d08509298e..43e834f9f3cf 100644
+--- a/media/learning/common/labelled_example.cc
++++ b/media/learning/common/labelled_example.cc
+@@ -59,7 +59,8 @@ bool LabelledExample::operator<(const LabelledExample& rhs) const {
+ LabelledExample& LabelledExample::operator=(const LabelledExample& rhs) =
+ default;
+
+-LabelledExample& LabelledExample::operator=(LabelledExample&& rhs) = default;
++LabelledExample& LabelledExample::operator=(LabelledExample&& rhs) noexcept =
++ default;
+
+ TrainingData::TrainingData() = default;
+
+diff --git a/media/learning/common/labelled_example.h b/media/learning/common/labelled_example.h
+index 4f43c54e7a76..365abc3c0ebf 100644
+--- a/media/learning/common/labelled_example.h
++++ b/media/learning/common/labelled_example.h
+@@ -40,7 +40,7 @@ struct COMPONENT_EXPORT(LEARNING_COMMON) LabelledExample {
+ bool operator<(const LabelledExample& rhs) const;
+
+ LabelledExample& operator=(const LabelledExample& rhs);
+- LabelledExample& operator=(LabelledExample&& rhs);
++ LabelledExample& operator=(LabelledExample&& rhs) noexcept;
+
+ // Observed feature values.
+ // Note that to interpret these values, you probably need to have the
+diff --git a/media/learning/common/value.cc b/media/learning/common/value.cc
+index 9c9395c25d4e..12ea399d24c3 100644
+--- a/media/learning/common/value.cc
++++ b/media/learning/common/value.cc
+@@ -23,6 +23,12 @@ Value::Value(const std::string& x) : value_(base::PersistentHash(x)) {}
+
+ Value::Value(const Value& other) : value_(other.value_) {}
+
++Value::Value(Value&& rhs) noexcept = default;
++
++Value& Value::operator=(const Value& rhs) = default;
++
++Value& Value::operator=(Value&& rhs) noexcept = default;
++
+ bool Value::operator==(const Value& rhs) const {
+ return value_ == rhs.value_;
+ }
+diff --git a/media/learning/common/value.h b/media/learning/common/value.h
+index 0e64da961f34..62f4953f691c 100644
+--- a/media/learning/common/value.h
++++ b/media/learning/common/value.h
+@@ -38,6 +38,10 @@ class COMPONENT_EXPORT(LEARNING_COMMON) Value {
+ explicit Value(const std::string& x);
+
+ Value(const Value& other);
++ Value(Value&&) noexcept;
++
++ Value& operator=(const Value&);
++ Value& operator=(Value&&) noexcept;
+
+ bool operator==(const Value& rhs) const;
+ bool operator!=(const Value& rhs) const;
+--
+2.20.1
+
diff --git a/www-client/chromium/files/chromium-73-gcc-2.patch b/www-client/chromium/files/chromium-73-gcc-2.patch
new file mode 100644
index 0000000..9d1f05a
--- /dev/null
+++ b/www-client/chromium/files/chromium-73-gcc-2.patch
@@ -0,0 +1,51 @@
+From a5ba6f9bb7665040045dc0f8087407096630ad7b Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Fri, 8 Feb 2019 02:57:28 +0000
+Subject: [PATCH] color_utils: Use std::sqrt() instead of std::sqrtf()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This fixes the build with libstdc++:
+
+ ../../ui/gfx/color_utils.cc: In function ‘SkColor color_utils::SetDarkestColorForTesting(SkColor)’:
+ ../../ui/gfx/color_utils.cc:434:12: error: ‘sqrtf’ is not a member of ‘std’
+ std::sqrtf((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
+ ^~~~~
+ ../../ui/gfx/color_utils.cc:434:12: note: suggested alternative: ‘sqrt’
+ std::sqrtf((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
+ ^~~~~
+ sqrt
+
+sqrtf() is not formally part of C++14 as far as I can see even though libc++
+has it in <cmath>. Additionally, we're only dealing with floats in all parts
+of the expression above, so using the float sqrt() overload should be
+harmless anyway.
+
+Bug: 819294
+Change-Id: If6c7bf31819df97a761e6963def6d6506154c34d
+Reviewed-on: https://chromium-review.googlesource.com/c/1458193
+Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Reviewed-by: Peter Kasting <pkasting@chromium.org>
+Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Cr-Commit-Position: refs/heads/master@{#630140}
+---
+ ui/gfx/color_utils.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ui/gfx/color_utils.cc b/ui/gfx/color_utils.cc
+index c868cd54bac3..92ba1407d594 100644
+--- a/ui/gfx/color_utils.cc
++++ b/ui/gfx/color_utils.cc
+@@ -431,7 +431,7 @@ SkColor SetDarkestColorForTesting(SkColor color) {
+ // GetContrastRatio(kWhiteLuminance, g_luminance_midpoint). The formula below
+ // can be verified by plugging it into how GetContrastRatio() operates.
+ g_luminance_midpoint =
+- std::sqrtf((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
++ std::sqrt((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
+
+ return previous_darkest_color;
+ }
+--
+2.20.1
+
diff --git a/www-client/chromium/files/chromium-73-gcc-3.patch b/www-client/chromium/files/chromium-73-gcc-3.patch
new file mode 100644
index 0000000..9cc6cf2
--- /dev/null
+++ b/www-client/chromium/files/chromium-73-gcc-3.patch
@@ -0,0 +1,69 @@
+From c33e832cc145c696d2157796c7640e659740dafa Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Fri, 8 Feb 2019 08:44:00 +0000
+Subject: [PATCH] quic_flags_impl: Fix GCC build after #618558
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84849, having
+base::NoDestructor<T<U>> and passing an initializer list of Us does not
+work if this is not done explicitly, as GCC incorrectly fails to determine
+which constructor overload to use:
+
+ ../../net/third_party/quic/platform/impl/quic_flags_impl.cc: In member function ‘bool quic::TypedQuicFlagHelper<T>::SetFlag(const string&) const [with T = bool; std::__cxx11::string = std::__cxx11::basic_string<char>]’:
+ ../../net/third_party/quic/platform/impl/quic_flags_impl.cc:156:41: error: call of overloaded ‘NoDestructor(<brace-enclosed initializer list>)’ is ambiguous
+ {"", "1", "t", "true", "y", "yes"});
+ ^
+ In file included from ../../net/third_party/quic/platform/impl/quic_flags_impl.h:16,
+ from ../../net/third_party/quic/platform/impl/quic_flags_impl.cc:5:
+ ../../base/no_destructor.h:62:3: note: candidate: ‘base::NoDestructor<T>::NoDestructor(const base::NoDestructor<T>&) [with T = std::set<std::__cxx11::basic_string<char> >]’ <deleted>
+ NoDestructor(const NoDestructor&) = delete;
+ ^~~~~~~~~~~~
+ ../../base/no_destructor.h:60:12: note: candidate: ‘base::NoDestructor<T>::NoDestructor(T&&) [with T = std::set<std::__cxx11::basic_string<char> >]’
+ explicit NoDestructor(T&& x) { new (storage_) T(std::move(x)); }
+ ^~~~~~~~~~~~
+ ../../base/no_destructor.h:59:12: note: candidate: ‘base::NoDestructor<T>::NoDestructor(const T&) [with T = std::set<std::__cxx11::basic_string<char> >]’
+ explicit NoDestructor(const T& x) { new (storage_) T(x); }
+ ^~~~~~~~~~~~
+
+Explicitly use an std::initializer_list to make the build work everywhere.
+
+Bug: 819294
+Change-Id: I775be20e3766a88a656b58c94c40869cb1bee2a8
+Reviewed-on: https://chromium-review.googlesource.com/c/1458214
+Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Reviewed-by: Ryan Hamilton <rch@chromium.org>
+Commit-Queue: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Cr-Commit-Position: refs/heads/master@{#630249}
+---
+ net/third_party/quic/platform/impl/quic_flags_impl.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/net/third_party/quic/platform/impl/quic_flags_impl.cc b/net/third_party/quic/platform/impl/quic_flags_impl.cc
+index 5e6962d1e770..3fa45fc6892d 100644
+--- a/net/third_party/quic/platform/impl/quic_flags_impl.cc
++++ b/net/third_party/quic/platform/impl/quic_flags_impl.cc
+@@ -5,6 +5,7 @@
+ #include "net/third_party/quic/platform/impl/quic_flags_impl.h"
+
+ #include <algorithm>
++#include <initializer_list>
+ #include <iostream>
+ #include <set>
+
+@@ -153,9 +154,9 @@ std::string QuicFlagRegistry::GetHelp() const {
+ template <>
+ bool TypedQuicFlagHelper<bool>::SetFlag(const std::string& s) const {
+ static const base::NoDestructor<std::set<std::string>> kTrueValues(
+- {"", "1", "t", "true", "y", "yes"});
++ std::initializer_list<std::string>({"", "1", "t", "true", "y", "yes"}));
+ static const base::NoDestructor<std::set<std::string>> kFalseValues(
+- {"0", "f", "false", "n", "no"});
++ std::initializer_list<std::string>({"0", "f", "false", "n", "no"}));
+ if (kTrueValues->find(base::ToLowerASCII(s)) != kTrueValues->end()) {
+ *flag_ = true;
+ return true;
+--
+2.20.1
+
diff --git a/www-client/chromium/files/chromium-73-gcc-4.patch b/www-client/chromium/files/chromium-73-gcc-4.patch
new file mode 100644
index 0000000..df7d630
--- /dev/null
+++ b/www-client/chromium/files/chromium-73-gcc-4.patch
@@ -0,0 +1,59 @@
+From bdd76190e54e6a0e11343dd19e4bf1d06956fa48 Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Wed, 13 Feb 2019 01:02:27 +0000
+Subject: [PATCH] BaseRenderingContext2D: Use base::CheckMul and simplify code
+ in putImageData()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Follow-up to commit e0b3253a56 ("Fix image conversion truncation issues").
+The current code does not build with GCC due to
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89287:
+
+ ../../third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc: In member function ‘void blink::BaseRenderingContext2D::putImageData(blink::ImageData*, int, int, int, int, int, int, blink::ExceptionState&)’:
+ ../../third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc:1777:44: error: default type conversion can't deduce template argument for ‘template<class Dst, typename std::enable_if<base::internal::IsNumericRangeContained<Dst, long unsigned int, void>::value, void>::type* <anonymous> > constexpr base::internal::StrictNumeric<T>::operator Dst() const [with Dst = Dst; typename std::enable_if<base::internal::IsNumericRangeContained<Dst, T>::value>::type* <anonymous> = <enumerator>; T = long unsigned int]’
+ new uint8_t[data_length.ValueOrDie()]);
+ ^
+
+Work around it by using the more idiomatic base::CheckMul() with
+AssignIfValid, so that we can have |data_length| be a size_t again and not
+leave it to the compiler to figure out the type we want when creating the
+|converted_pixels| array.
+
+Bug: 819294
+Change-Id: Id124cc4f3d749b45def4708e21e4badafd708578
+Reviewed-on: https://chromium-review.googlesource.com/c/1467201
+Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Commit-Queue: Kentaro Hara <haraken@chromium.org>
+Reviewed-by: Kentaro Hara <haraken@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#631472}
+---
+ .../canvas/canvas2d/base_rendering_context_2d.cc | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
+index d9fa696c9a9d..34a8a202bfd3 100644
+--- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
++++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
+@@ -1769,12 +1769,12 @@ void BaseRenderingContext2D::putImageData(ImageData* data,
+ CanvasColorParams(ColorParams().ColorSpace(), PixelFormat(), kNonOpaque);
+ if (data_color_params.NeedsColorConversion(context_color_params) ||
+ PixelFormat() == kF16CanvasPixelFormat) {
+- base::CheckedNumeric<size_t> data_length = data->Size().Area();
+- data_length *= context_color_params.BytesPerPixel();
+- if (!data_length.IsValid())
++ size_t data_length;
++ if (!base::CheckMul(data->Size().Area(),
++ context_color_params.BytesPerPixel())
++ .AssignIfValid(&data_length))
+ return;
+- std::unique_ptr<uint8_t[]> converted_pixels(
+- new uint8_t[data_length.ValueOrDie()]);
++ std::unique_ptr<uint8_t[]> converted_pixels(new uint8_t[data_length]);
+ if (data->ImageDataInCanvasColorSettings(
+ ColorParams().ColorSpace(), PixelFormat(), converted_pixels.get(),
+ kRGBAColorType)) {
+--
+2.20.1
+
diff --git a/www-client/chromium/files/chromium-73-gcc-5.patch b/www-client/chromium/files/chromium-73-gcc-5.patch
new file mode 100644
index 0000000..033861e
--- /dev/null
+++ b/www-client/chromium/files/chromium-73-gcc-5.patch
@@ -0,0 +1,65 @@
+From 78b0f0dfa9e6f3c37b71102c01def92f1ab8c330 Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Wed, 13 Feb 2019 23:28:46 +0000
+Subject: [PATCH] CastActivityManager: Do not make DoLaunchSessionParams' move
+ constructor noexcept
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This fixes the GCC build:
+
+ ../../chrome/browser/media/router/providers/cast/cast_activity_manager.cc:806:1: error: function ‘media_router::CastActivityManager::DoLaunchSessionParams::DoLaunchSessionParams(media_router::CastActivityManager::DoLaunchSessionParams&&)’ defaulted on its redeclaration with an exception-specification that differs from the implicit exception-specification ‘’
+ CastActivityManager::DoLaunchSessionParams::DoLaunchSessionParams(
+ ^~~~~~~~~~~~~~~~~~~
+
+With GCC, having that noexcept marker requires all members to be marked with
+noexcept themselves, and MediaRoute, CastMediaSource and url::Origin need
+the right annotations. Just making DoLaunchSessionParams not noexcept is the
+least intrusive solution for now.
+
+clang is fine because we pass -fno-exceptions and it disables the same error
+there, while GCC continues to raise it (bug 843143 and its corresponding CL
+have a longer discussion on this issue).
+
+Bug: 819294
+Change-Id: Ia3a5fb60b5e74e68bd35cfa50e2fcc728b64e5eb
+Reviewed-on: https://chromium-review.googlesource.com/c/1469942
+Commit-Queue: mark a. foltz <mfoltz@chromium.org>
+Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Reviewed-by: mark a. foltz <mfoltz@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#631962}
+---
+ .../media/router/providers/cast/cast_activity_manager.cc | 2 +-
+ .../browser/media/router/providers/cast/cast_activity_manager.h | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
+index b7ee9695f69a..8569e0cd30a3 100644
+--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
++++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
+@@ -804,7 +804,7 @@ CastActivityManager::DoLaunchSessionParams::DoLaunchSessionParams(
+ callback(std::move(callback)) {}
+
+ CastActivityManager::DoLaunchSessionParams::DoLaunchSessionParams(
+- DoLaunchSessionParams&& other) noexcept = default;
++ DoLaunchSessionParams&& other) = default;
+
+ CastActivityManager::DoLaunchSessionParams::~DoLaunchSessionParams() = default;
+
+diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.h b/chrome/browser/media/router/providers/cast/cast_activity_manager.h
+index 325bffc725ee..08fe0ccca603 100644
+--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.h
++++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.h
+@@ -295,7 +295,7 @@ class CastActivityManager : public cast_channel::CastMessageHandler::Observer,
+ const url::Origin& origin,
+ int tab_id,
+ mojom::MediaRouteProvider::CreateRouteCallback callback);
+- DoLaunchSessionParams(DoLaunchSessionParams&& other) noexcept;
++ DoLaunchSessionParams(DoLaunchSessionParams&& other);
+ ~DoLaunchSessionParams();
+ DoLaunchSessionParams& operator=(DoLaunchSessionParams&&) = delete;
+
+--
+2.20.1
+
diff --git a/www-client/chromium/files/chromium-73-gcc-6.patch b/www-client/chromium/files/chromium-73-gcc-6.patch
new file mode 100644
index 0000000..3cd72ab
--- /dev/null
+++ b/www-client/chromium/files/chromium-73-gcc-6.patch
@@ -0,0 +1,88 @@
+From cf4c534f04c223f8a9d65407852e2a531a6d7fb6 Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Thu, 14 Feb 2019 22:22:21 +0000
+Subject: [PATCH] chrome/browser: Replace some forward declarations with actual
+ includes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This fixes the GCC build which was failing like this:
+
+ ../../base/scoped_observer.h: In instantiation of ‘void ScopedObserver<Source, Observer>::RemoveAll() [with Source = TabStripModel; Observer = TabStripModelObserver]’:
+ ../../base/scoped_observer.h:26:5: required from ‘ScopedObserver<Source, Observer>::~ScopedObserver() [with Source = TabStripModel; Observer = TabStripModelObserver]’
+ ../../chrome/browser/ui/views/extensions/extension_popup.h:115:70: required from here
+ ../../base/scoped_observer.h:45:20: error: invalid use of incomplete type ‘class TabStripModel’
+ sources_[i]->RemoveObserver(observer_);
+ ~~~~~~~~~~~~~^~~~~~~~~~~~~~
+
+This is caused by https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89311 ("Brace
+initialization needlessly invokes destructor"), i.e. having something like
+
+ ScopedObserver<T, U> observer_{this};
+
+in a header declaration requires T and U to be fully declared because
+ScopedObserver's destructor references them. In a few cases, T was only
+forward-declared.
+
+Bug: 819294
+Change-Id: Ie5b9dc2745e27d4532c5539e3845a8c9147a0595
+Reviewed-on: https://chromium-review.googlesource.com/c/1472576
+Auto-Submit: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Commit-Queue: Alan Cutter <alancutter@chromium.org>
+Reviewed-by: Finnur Thorarinsson <finnur@chromium.org>
+Reviewed-by: Alan Cutter <alancutter@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#632385}
+---
+ chrome/browser/ui/views/extensions/extension_popup.cc | 1 -
+ chrome/browser/ui/views/extensions/extension_popup.h | 1 +
+ chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc | 1 -
+ chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h | 2 +-
+ .../web_applications/extensions/bookmark_app_tab_helper.cc | 1 -
+ .../web_applications/extensions/bookmark_app_tab_helper.h | 2 +-
+ 6 files changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/chrome/browser/ui/views/extensions/extension_popup.cc b/chrome/browser/ui/views/extensions/extension_popup.cc
+index 3f0985d383dd..57d16aba9e9f 100644
+--- a/chrome/browser/ui/views/extensions/extension_popup.cc
++++ b/chrome/browser/ui/views/extensions/extension_popup.cc
+@@ -8,7 +8,6 @@
+ #include "chrome/browser/devtools/devtools_window.h"
+ #include "chrome/browser/extensions/extension_view_host.h"
+ #include "chrome/browser/ui/browser.h"
+-#include "chrome/browser/ui/tabs/tab_strip_model.h"
+ #include "content/public/browser/devtools_agent_host.h"
+ #include "content/public/browser/notification_details.h"
+ #include "content/public/browser/notification_source.h"
+diff --git a/chrome/browser/ui/views/extensions/extension_popup.h b/chrome/browser/ui/views/extensions/extension_popup.h
+index 3661b5bda950..9018efa0fea5 100644
+--- a/chrome/browser/ui/views/extensions/extension_popup.h
++++ b/chrome/browser/ui/views/extensions/extension_popup.h
+@@ -9,6 +9,7 @@
+ #include "base/compiler_specific.h"
+ #include "base/macros.h"
+ #include "base/scoped_observer.h"
++#include "chrome/browser/ui/tabs/tab_strip_model.h"
+ #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
+ #include "chrome/browser/ui/views/extensions/extension_view_views.h"
+ #include "content/public/browser/devtools_agent_host_observer.h"
+diff --git a/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h b/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h
+index 2a3ea8e4f91f..ac44a4f05dec 100644
+--- a/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h
++++ b/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h
+@@ -8,6 +8,7 @@
+ #include "base/macros.h"
+ #include "base/memory/weak_ptr.h"
+ #include "base/scoped_observer.h"
++#include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
+ #include "chrome/browser/ui/toolbar/toolbar_actions_bar_observer.h"
+ #include "chrome/browser/ui/views/frame/app_menu_button_observer.h"
+ #include "ui/views/controls/scroll_view.h"
+@@ -16,7 +17,6 @@ class AppMenu;
+ class AppMenuButton;
+ class Browser;
+ class BrowserActionsContainer;
+-class ToolbarActionsBar;
+
+ namespace views {
+ class MenuItemView;
diff --git a/www-client/chromium/files/chromium-74-gcc.patch b/www-client/chromium/files/chromium-74-gcc.patch
new file mode 100644
index 0000000..d4829ff
--- /dev/null
+++ b/www-client/chromium/files/chromium-74-gcc.patch
@@ -0,0 +1,25 @@
+diff --git a/third_party/dav1d/BUILD.gn b/third_party/dav1d/BUILD.gn
+index aedc658c3..4baeac7df 100644
+--- a/third_party/dav1d/BUILD.gn
++++ b/third_party/dav1d/BUILD.gn
+@@ -31,9 +31,9 @@ if (current_cpu == "x86" || current_cpu == "x64") {
+ } else {
+ needs_stack_alignment = true
+ if (current_cpu == "x86") {
+- stack_alignment = 16
++ stack_alignment = 4
+ } else if (current_cpu == "x64") {
+- stack_alignment = 32
++ stack_alignment = 5
+ }
+ }
+ } else {
+@@ -73,7 +73,7 @@ dav1d_copts = [
+ if (!is_win) {
+ dav1d_copts += [ "-std=c99" ]
+ if (needs_stack_alignment) {
+- dav1d_copts += [ "-mstack-alignment=$stack_alignment" ]
++ dav1d_copts += [ "-mpreferred-stack-boundary=$stack_alignment" ]
+ }
+ }
+
diff --git a/www-client/chromium/files/chromium-75-vaapi.patch b/www-client/chromium/files/chromium-75-vaapi.patch
new file mode 100644
index 0000000..7e08455
--- /dev/null
+++ b/www-client/chromium/files/chromium-75-vaapi.patch
@@ -0,0 +1,254 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index cb04c939a..dc1a995a6 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1434,7 +1434,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ #if defined(OS_WIN)
+@@ -1980,12 +1980,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // ENABLE_ISOLATED_XR_SERVICE
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"v8-cache-options", flag_descriptions::kV8CacheOptionsName,
+ flag_descriptions::kV8CacheOptionsDescription, kOsAll,
+ MULTI_VALUE_TYPE(kV8CacheOptionsChoices)},
+@@ -3696,10 +3696,10 @@ const FeatureEntry kFeatureEntries[] = {
+ "AutofillDropdownLayout")},
+ #endif // OS_ANDROID
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"enable-vaapi-jpeg-image-decode-acceleration",
+ flag_descriptions::kVaapiJpegImageDecodeAccelerationName,
+- flag_descriptions::kVaapiJpegImageDecodeAccelerationDescription, kOsCrOS,
++ flag_descriptions::kVaapiJpegImageDecodeAccelerationDescription, kOsCrOS | kOsLinux,
+ FEATURE_VALUE_TYPE(features::kVaapiJpegImageDecodeAcceleration)},
+ #endif
+
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 7457414f6..5c84e90f6 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -2991,13 +2991,22 @@ const char kMacViewsTaskManagerDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++#endif // defined(OS_CHROMEOS) defined(OS_LINUX) and !defined(OS_ANDROID)
++
++#if defined(OS_CHROMEOS)
+
+ const char kAppServiceAshName[] = "App Service Ash";
+ const char kAppServiceAshDescription[] =
+@@ -3437,12 +3446,6 @@ const char kUserActivityPredictionMlServiceName[] =
+ const char kUserActivityPredictionMlServiceDescription[] =
+ "Uses the new ML Service model for user activity prediction (Smart Dim).";
+
+-const char kVaapiJpegImageDecodeAccelerationName[] =
+- "VA-API JPEG decode acceleration for images";
+-const char kVaapiJpegImageDecodeAccelerationDescription[] =
+- "Enable or disable decode acceleration of JPEG images (as opposed to camera"
+- " captures) using the VA-API.";
+-
+ const char kVideoPlayerChromecastSupportName[] =
+ "Experimental Chromecast support for Video Player";
+ const char kVideoPlayerChromecastSupportDescription[] =
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index 11e45a0ac..d7cbf8394 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1779,11 +1779,17 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
+ extern const char kAppServiceAshName[];
+ extern const char kAppServiceAshDescription[];
+
+@@ -2059,9 +2065,6 @@ extern const char kUseMonitorColorSpaceDescription[];
+ extern const char kUserActivityPredictionMlServiceName[];
+ extern const char kUserActivityPredictionMlServiceDescription[];
+
+-extern const char kVaapiJpegImageDecodeAccelerationName[];
+-extern const char kVaapiJpegImageDecodeAccelerationDescription[];
+-
+ extern const char kVideoPlayerChromecastSupportName[];
+ extern const char kVideoPlayerChromecastSupportDescription[];
+
+diff --git a/components/viz/service/main/viz_main_impl.cc b/components/viz/service/main/viz_main_impl.cc
+index 284d0167d..87d5e14c5 100644
+--- a/components/viz/service/main/viz_main_impl.cc
++++ b/components/viz/service/main/viz_main_impl.cc
+@@ -36,7 +36,7 @@ std::unique_ptr<base::Thread> CreateAndStartIOThread() {
+ // It should be possible to use |main_task_runner_| for doing IO tasks.
+ base::Thread::Options thread_options(base::MessageLoop::TYPE_IO, 0);
+ thread_options.priority = base::ThreadPriority::NORMAL;
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ // TODO(reveman): Remove this in favor of setting it explicitly for each
+ // type of process.
+ thread_options.priority = base::ThreadPriority::DISPLAY;
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 2b1165264..fec963bd9 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -127,4 +128,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
+index a838f0ccf..4c891fb92 100644
+--- a/content/gpu/gpu_main.cc
++++ b/content/gpu/gpu_main.cc
+@@ -288,7 +288,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ base::PlatformThread::SetName("CrGpuMain");
+
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ // Set thread priority before sandbox initialization.
+ base::PlatformThread::SetCurrentThreadPriority(base::ThreadPriority::DISPLAY);
+ #endif
+@@ -321,7 +321,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+ GetContentClient()->SetGpuInfo(gpu_init->gpu_info());
+
+ base::ThreadPriority io_thread_priority = base::ThreadPriority::NORMAL;
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ io_thread_priority = base::ThreadPriority::DISPLAY;
+ #endif
+
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index d4c3b4364..935fdeb86 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -369,17 +369,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index b3477148d..477caecdb 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -517,7 +517,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeJpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn
+index 81c1e4fca..81996bc56 100644
+--- a/media/filters/BUILD.gn
++++ b/media/filters/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("//build/config/jumbo.gni")
+ import("//media/media_options.gni")
+ import("//third_party/libaom/options.gni")
++import("//media/gpu/args.gni")
+
+ jumbo_source_set("filters") {
+ # Do not expand the visibility here without double-checking with OWNERS, this
+@@ -212,7 +213,7 @@ jumbo_source_set("filters") {
+ deps += [ "//media/base/android" ]
+ }
+
+- if (current_cpu != "arm" && is_linux) {
++ if (use_vaapi && is_linux) {
+ sources += [
+ "h264_bitstream_buffer.cc",
+ "h264_bitstream_buffer.h",
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index b1750d527..cc1ad45af 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -512,6 +512,13 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
++
+ if (use_v4l2_codec || use_vaapi) {
+ test("jpeg_encode_accelerator_unittest") {
+ deps = [
+@@ -582,6 +589,7 @@ if (is_chromeos || is_linux) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
diff --git a/www-client/chromium/files/chromium-76-arm64-skia.patch b/www-client/chromium/files/chromium-76-arm64-skia.patch
new file mode 100644
index 0000000..8a44235
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-arm64-skia.patch
@@ -0,0 +1,41 @@
+From 7aacb0b30a86936aedd1308708d1a51d951197f2 Mon Sep 17 00:00:00 2001
+From: Mike Klein <mtklein@google.com>
+Date: Tue, 02 Jul 2019 13:23:06 -0500
+Subject: [PATCH] fix GCC arm64 builds
+
+These two guards are checking if we're building for aarch64 and thus
+have F16 conversion instructions, but weren't checking if we want to use
+them (if we have them _and_ we're being compiled by Clang). At head
+we're trying to pass a 2-byte uint16_t to a function expecting an 8-byte
+uint16x4_t, etc.
+
+Change-Id: I21f6cd2100ec81ccdd47c4ec0575107624cd7c5a
+Reviewed-on: https://skia-review.googlesource.com/c/skia/+/225257
+Reviewed-by: Herb Derby <herb@google.com>
+Commit-Queue: Mike Klein <mtklein@google.com>
+---
+
+diff --git a/third_party/skia/src/opts/SkRasterPipeline_opts.h b/third_party/skia/src/opts/SkRasterPipeline_opts.h
+index 0eae9fe..e05f36c 100644
+--- a/third_party/skia/src/opts/SkRasterPipeline_opts.h
++++ b/third_party/skia/src/opts/SkRasterPipeline_opts.h
+@@ -972,7 +972,8 @@
+ }
+
+ SI F from_half(U16 h) {
+-#if defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) \
++ && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f32_f16(h);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
+@@ -992,7 +993,8 @@
+ }
+
+ SI U16 to_half(F f) {
+-#if defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) \
++ && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f16_f32(f);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
diff --git a/www-client/chromium/files/chromium-76-gcc-ambiguous-nodestructor.patch b/www-client/chromium/files/chromium-76-gcc-ambiguous-nodestructor.patch
new file mode 100644
index 0000000..587abf3
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-ambiguous-nodestructor.patch
@@ -0,0 +1,39 @@
+From 52b5ceac95b67491b1c71f0ef9a32b778bbbaa2e Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Wed, 05 Jun 2019 19:46:55 +0000
+Subject: [PATCH] GCC: avoid ambiguous NoDestructor creation in GetNeverSniffedMimeTypes.
+
+Use brace-list notation to wrap the already existing brace-list for
+initializing the flat-set. This resolves an ambiguous instantiation
+in GCC.
+
+Bug: 819294
+Change-Id: I89ddf12522d62a5140a8c2c41dc98e30ec7a0e78
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645774
+Reviewed-by: Matt Menke <mmenke@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#666401}
+---
+
+diff --git a/services/network/cross_origin_read_blocking.cc b/services/network/cross_origin_read_blocking.cc
+index 30999c0..60a03f6 100644
+--- a/services/network/cross_origin_read_blocking.cc
++++ b/services/network/cross_origin_read_blocking.cc
+@@ -211,7 +211,7 @@
+ // confirmation sniffing because images, scripts, etc. are frequently
+ // mislabelled by http servers as HTML/JSON/XML).
+ base::flat_set<std::string>& GetNeverSniffedMimeTypes() {
+- static base::NoDestructor<base::flat_set<std::string>> s_types({
++ static base::NoDestructor<base::flat_set<std::string>> s_types{{
+ // The list below has been populated based on most commonly used content
+ // types according to HTTP Archive - see:
+ // https://github.com/whatwg/fetch/issues/860#issuecomment-457330454
+@@ -224,7 +224,7 @@
+ "application/x-www-form-urlencoded",
+ "application/zip",
+ "text/event-stream",
+- });
++ }};
+
+ // All items need to be lower-case, to support case-insensitive comparisons
+ // later.
diff --git a/www-client/chromium/files/chromium-76-gcc-blink-constexpr.patch b/www-client/chromium/files/chromium-76-gcc-blink-constexpr.patch
new file mode 100644
index 0000000..26bba05
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-blink-constexpr.patch
@@ -0,0 +1,32 @@
+From cf6d6b40d711fce93a24a2cf517fa3becdbae8bb Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Wed, 05 Jun 2019 17:18:40 +0000
+Subject: [PATCH] Make blink::LayoutUnit::HasFraction constexpr
+
+Other HasFraction methods as in PhysicalUnit are declared already
+constexpr and using it. It breaks GCC build.
+
+Bug: 819294.
+Change-Id: I0c4bd9bd206d45cf31f7fa815ce8533718a425cb
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645222
+Reviewed-by: vmpstr <vmpstr@chromium.org>
+Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#666336}
+---
+
+diff --git a/third_party/blink/renderer/platform/geometry/layout_unit.h b/third_party/blink/renderer/platform/geometry/layout_unit.h
+index f073986..b6dbc76 100644
+--- a/third_party/blink/renderer/platform/geometry/layout_unit.h
++++ b/third_party/blink/renderer/platform/geometry/layout_unit.h
+@@ -202,7 +202,9 @@
+ return value_ > 0 ? LayoutUnit() : *this;
+ }
+
+- bool HasFraction() const { return RawValue() % kFixedPointDenominator; }
++ constexpr bool HasFraction() const {
++ return RawValue() % kFixedPointDenominator;
++ }
+
+ LayoutUnit Fraction() const {
+ // Compute fraction using the mod operator to preserve the sign of the value
diff --git a/www-client/chromium/files/chromium-76-gcc-blink-namespace1.patch b/www-client/chromium/files/chromium-76-gcc-blink-namespace1.patch
new file mode 100644
index 0000000..bae3ede
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-blink-namespace1.patch
@@ -0,0 +1,91 @@
+From c6afbd59c997c2b64f11abdd1eaef71ae8ea2ddc Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Fri, 07 Jun 2019 18:11:15 +0000
+Subject: [PATCH] GCC: FeaturePolicyParser ParseValueForFuzzer is not in anonymous namespace
+
+Compilation fails because we are declaring ParseValueForFuzzer as friend method,
+but we are declaring it is in anonymous namespace. Moving to global namespace
+still fails (in this case in Clang).
+
+So final solution is making it a public static method of FeaturePolicyParser.
+
+Bug: 819294
+Change-Id: Iea307cb6faef675b748d6eb5da2175dcbb17fdc7
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645223
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Reviewed-by: Luna Lu <loonybear@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#667228}
+---
+
+diff --git a/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc b/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc
+index f1c9594..bae91a1 100644
+--- a/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc
++++ b/third_party/blink/renderer/core/feature_policy/feature_policy_parser.cc
+@@ -323,6 +323,13 @@
+ return value;
+ }
+
++void FeaturePolicyParser::ParseValueForFuzzer(
++ blink::mojom::PolicyValueType feature_type,
++ const WTF::String& value_string) {
++ bool ok;
++ ParseValueForType(feature_type, value_string, &ok);
++}
++
+ bool IsFeatureDeclared(mojom::FeaturePolicyFeature feature,
+ const ParsedFeaturePolicy& policy) {
+ return std::any_of(policy.begin(), policy.end(),
+diff --git a/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h b/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h
+index fd25d90..8aa7323 100644
+--- a/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h
++++ b/third_party/blink/renderer/core/feature_policy/feature_policy_parser.h
+@@ -16,9 +16,6 @@
+ #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+ #include "third_party/blink/renderer/platform/wtf/vector.h"
+
+-// Forward declare for friendship.
+-void ParseValueForFuzzer(blink::mojom::PolicyValueType, const WTF::String&);
+-
+ namespace blink {
+
+ class Document;
+@@ -79,8 +76,10 @@
+ const FeatureNameMap& feature_names,
+ ExecutionContext* execution_context = nullptr);
+
++ // Used for LLVM fuzzer test
++ static void ParseValueForFuzzer(mojom::PolicyValueType, const String&);
++
+ private:
+- friend void ::ParseValueForFuzzer(mojom::PolicyValueType, const String&);
+ static PolicyValue GetFallbackValueForFeature(
+ mojom::FeaturePolicyFeature feature);
+ static PolicyValue ParseValueForType(mojom::PolicyValueType feature_type,
+diff --git a/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc b/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc
+index 7f8e6aa..1455636 100644
+--- a/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc
++++ b/third_party/blink/renderer/core/feature_policy/feature_policy_value_fuzzer.cc
+@@ -13,19 +13,12 @@
+ #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
+ #include "third_party/blink/renderer/platform/wtf/vector.h"
+
+-void ParseValueForFuzzer(blink::mojom::PolicyValueType feature_type,
+- const WTF::String& value_string) {
+- bool ok;
+- blink::FeaturePolicyParser::ParseValueForType(feature_type, value_string,
+- &ok);
+-}
+-
+ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ static blink::BlinkFuzzerTestSupport test_support =
+ blink::BlinkFuzzerTestSupport();
+- ParseValueForFuzzer(blink::mojom::PolicyValueType::kBool,
+- WTF::String(data, size));
+- ParseValueForFuzzer(blink::mojom::PolicyValueType::kDecDouble,
+- WTF::String(data, size));
++ blink::FeaturePolicyParser::ParseValueForFuzzer(
++ blink::mojom::PolicyValueType::kBool, WTF::String(data, size));
++ blink::FeaturePolicyParser::ParseValueForFuzzer(
++ blink::mojom::PolicyValueType::kDecDouble, WTF::String(data, size));
+ return 0;
+ }
diff --git a/www-client/chromium/files/chromium-76-gcc-blink-namespace2.patch b/www-client/chromium/files/chromium-76-gcc-blink-namespace2.patch
new file mode 100644
index 0000000..1d4b90f
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-blink-namespace2.patch
@@ -0,0 +1,97 @@
+From dcb55fb8f18abe5f43d260aa67b14b2dc996f992 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Tue, 11 Jun 2019 08:00:13 +0000
+Subject: [PATCH] GCC: move explicit specialization out of RunInfo
+
+Explicit specialization in non-namespace scope is not allowed in C++, and GCC breaks
+build because of that. Move the template specializations out of RunInfo declaration
+in shape_result_inline_headeres.h to fix the GCC build issue.
+
+Bug: 819294
+Change-Id: Id083852bcf8e9efbdc911fdad28fd8767d2905d0
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1651728
+Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#667901}
+---
+
+diff --git a/third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h b/third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h
+index 76ee6091..c14d3a0 100644
+--- a/third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h
++++ b/third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h
+@@ -251,37 +251,6 @@
+ template <bool has_non_zero_glyph_offsets>
+ struct iterator final {};
+
+- // For non-zero glyph offset array
+- template <>
+- struct iterator<true> final {
+- // The constructor for ShapeResult
+- explicit iterator(const GlyphOffsetArray& array)
+- : pointer(array.storage_.get()) {
+- DCHECK(pointer);
+- }
+-
+- // The constructor for ShapeResultView
+- explicit iterator(const GlyphDataRange& range) : pointer(range.offsets) {
+- DCHECK(pointer);
+- }
+-
+- GlyphOffset operator*() const { return *pointer; }
+- void operator++() { ++pointer; }
+-
+- const GlyphOffset* pointer;
+- };
+-
+- // For zero glyph offset array
+- template <>
+- struct iterator<false> final {
+- explicit iterator(const GlyphOffsetArray& array) {
+- DCHECK(!array.HasStorage());
+- }
+- explicit iterator(const GlyphDataRange& range) { DCHECK(!range.offsets); }
+- GlyphOffset operator*() const { return GlyphOffset(); }
+- void operator++() {}
+- };
+-
+ template <bool has_non_zero_glyph_offsets>
+ iterator<has_non_zero_glyph_offsets> GetIterator() const {
+ return iterator<has_non_zero_glyph_offsets>(*this);
+@@ -495,6 +464,37 @@
+ float width_;
+ };
+
++// For non-zero glyph offset array
++template <>
++struct ShapeResult::RunInfo::GlyphOffsetArray::iterator<true> final {
++ // The constructor for ShapeResult
++ explicit iterator(const GlyphOffsetArray& array)
++ : pointer(array.storage_.get()) {
++ DCHECK(pointer);
++ }
++
++ // The constructor for ShapeResultView
++ explicit iterator(const GlyphDataRange& range) : pointer(range.offsets) {
++ DCHECK(pointer);
++ }
++
++ GlyphOffset operator*() const { return *pointer; }
++ void operator++() { ++pointer; }
++
++ const GlyphOffset* pointer;
++};
++
++// For zero glyph offset array
++template <>
++struct ShapeResult::RunInfo::GlyphOffsetArray::iterator<false> final {
++ explicit iterator(const GlyphOffsetArray& array) {
++ DCHECK(!array.HasStorage());
++ }
++ explicit iterator(const GlyphDataRange& range) { DCHECK(!range.offsets); }
++ GlyphOffset operator*() const { return GlyphOffset(); }
++ void operator++() {}
++};
++
+ // Find the range of HarfBuzzRunGlyphData for the specified character index
+ // range. This function uses binary search twice, hence O(2 log n).
+ inline ShapeResult::RunInfo::GlyphDataRange
diff --git a/www-client/chromium/files/chromium-76-gcc-gl-init.patch b/www-client/chromium/files/chromium-76-gcc-gl-init.patch
new file mode 100644
index 0000000..3bf394f
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-gl-init.patch
@@ -0,0 +1,33 @@
+From 7dc76c8d9f4cfbce7cf11424120aa6f6094916dc Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Wed, 05 Jun 2019 21:09:01 +0000
+Subject: [PATCH] GCC: XSetWindowAttributes struct initialization should keep order of declaration
+
+XSetWindowAttributes initialization of attributes in GLSurfaceGLX is not in the
+same order of the declaration. GCC fails because of that.
+
+Bug: 819294
+Change-Id: I8a97da980d5961a35a47ae4d0d8d558b85291f1f
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1646253
+Reviewed-by: Zhenyao Mo <zmo@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#666436}
+---
+
+diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc
+index f649dd4..0aa6892 100644
+--- a/ui/gl/gl_surface_glx.cc
++++ b/ui/gl/gl_surface_glx.cc
+@@ -583,10 +583,10 @@
+
+ XSetWindowAttributes swa = {
+ .background_pixmap = 0,
+- .bit_gravity = NorthWestGravity,
+- .colormap = g_colormap,
+ .background_pixel = 0, // ARGB(0,0,0,0) for compositing WM
+ .border_pixel = 0,
++ .bit_gravity = NorthWestGravity,
++ .colormap = g_colormap,
+ };
+ auto value_mask = CWBackPixmap | CWBitGravity | CWColormap | CWBorderPixel;
+ if (ui::IsCompositingManagerPresent() &&
diff --git a/www-client/chromium/files/chromium-76-gcc-include.patch b/www-client/chromium/files/chromium-76-gcc-include.patch
new file mode 100644
index 0000000..adc7f3a
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-include.patch
@@ -0,0 +1,10 @@
+--- a/chrome/browser/themes/theme_service.h 2019-06-13 18:56:30.000000000 -0000
++++ b/chrome/browser/themes/theme_service.h 2019-06-17 08:50:57.714289399 -0000
+@@ -26,6 +26,7 @@
+ #include "extensions/common/extension_id.h"
+ #include "ui/base/theme_provider.h"
+ #include "ui/native_theme/native_theme_observer.h"
++#include "ui/native_theme/native_theme.h"
+
+ class BrowserThemePack;
+ class CustomThemeSupplier;
diff --git a/www-client/chromium/files/chromium-76-gcc-noexcept.patch b/www-client/chromium/files/chromium-76-gcc-noexcept.patch
new file mode 100644
index 0000000..2a7f4b3
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-noexcept.patch
@@ -0,0 +1,347 @@
+From 84c91abab33966f928497c24db4a39f436d2dca8 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Fri, 07 Jun 2019 09:50:11 +0000
+Subject: [PATCH] Make SharedMemoryMapping move constructor noexcept
+
+As LayerTreeHostImpl::UIResourceData move constructor is declared
+noexcept with default implementation, the move constructor of its
+members should also be noexcept. GCC will fail to build otherwise
+for mismatching noexcept declaration.
+
+We also set the move assignment operator.
+
+Bug: 819294
+Change-Id: Icd663da83b882e15f7d16780c9241972e09bc492
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645297
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Reviewed-by: Daniel Cheng <dcheng@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#667064}
+---
+
+diff --git a/base/memory/shared_memory_mapping.cc b/base/memory/shared_memory_mapping.cc
+index 2be2570..8426fa8 100644
+--- a/base/memory/shared_memory_mapping.cc
++++ b/base/memory/shared_memory_mapping.cc
+@@ -33,7 +33,7 @@
+
+ SharedMemoryMapping::SharedMemoryMapping() = default;
+
+-SharedMemoryMapping::SharedMemoryMapping(SharedMemoryMapping&& mapping)
++SharedMemoryMapping::SharedMemoryMapping(SharedMemoryMapping&& mapping) noexcept
+ : memory_(mapping.memory_),
+ size_(mapping.size_),
+ mapped_size_(mapping.mapped_size_),
+@@ -42,7 +42,7 @@
+ }
+
+ SharedMemoryMapping& SharedMemoryMapping::operator=(
+- SharedMemoryMapping&& mapping) {
++ SharedMemoryMapping&& mapping) noexcept {
+ Unmap();
+ memory_ = mapping.memory_;
+ size_ = mapping.size_;
+@@ -90,9 +90,9 @@
+
+ ReadOnlySharedMemoryMapping::ReadOnlySharedMemoryMapping() = default;
+ ReadOnlySharedMemoryMapping::ReadOnlySharedMemoryMapping(
+- ReadOnlySharedMemoryMapping&&) = default;
++ ReadOnlySharedMemoryMapping&&) noexcept = default;
+ ReadOnlySharedMemoryMapping& ReadOnlySharedMemoryMapping::operator=(
+- ReadOnlySharedMemoryMapping&&) = default;
++ ReadOnlySharedMemoryMapping&&) noexcept = default;
+ ReadOnlySharedMemoryMapping::ReadOnlySharedMemoryMapping(
+ void* address,
+ size_t size,
+@@ -102,9 +102,9 @@
+
+ WritableSharedMemoryMapping::WritableSharedMemoryMapping() = default;
+ WritableSharedMemoryMapping::WritableSharedMemoryMapping(
+- WritableSharedMemoryMapping&&) = default;
++ WritableSharedMemoryMapping&&) noexcept = default;
+ WritableSharedMemoryMapping& WritableSharedMemoryMapping::operator=(
+- WritableSharedMemoryMapping&&) = default;
++ WritableSharedMemoryMapping&&) noexcept = default;
+ WritableSharedMemoryMapping::WritableSharedMemoryMapping(
+ void* address,
+ size_t size,
+diff --git a/base/memory/shared_memory_mapping.h b/base/memory/shared_memory_mapping.h
+index d9569af..2b8858e 100644
+--- a/base/memory/shared_memory_mapping.h
++++ b/base/memory/shared_memory_mapping.h
+@@ -32,8 +32,8 @@
+ SharedMemoryMapping();
+
+ // Move operations are allowed.
+- SharedMemoryMapping(SharedMemoryMapping&& mapping);
+- SharedMemoryMapping& operator=(SharedMemoryMapping&& mapping);
++ SharedMemoryMapping(SharedMemoryMapping&& mapping) noexcept;
++ SharedMemoryMapping& operator=(SharedMemoryMapping&& mapping) noexcept;
+
+ // Unmaps the region if the mapping is valid.
+ virtual ~SharedMemoryMapping();
+@@ -93,8 +93,9 @@
+ ReadOnlySharedMemoryMapping();
+
+ // Move operations are allowed.
+- ReadOnlySharedMemoryMapping(ReadOnlySharedMemoryMapping&&);
+- ReadOnlySharedMemoryMapping& operator=(ReadOnlySharedMemoryMapping&&);
++ ReadOnlySharedMemoryMapping(ReadOnlySharedMemoryMapping&&) noexcept;
++ ReadOnlySharedMemoryMapping& operator=(
++ ReadOnlySharedMemoryMapping&&) noexcept;
+
+ // Returns the base address of the mapping. This is read-only memory. This is
+ // page-aligned. This is nullptr for invalid instances.
+@@ -171,8 +172,9 @@
+ WritableSharedMemoryMapping();
+
+ // Move operations are allowed.
+- WritableSharedMemoryMapping(WritableSharedMemoryMapping&&);
+- WritableSharedMemoryMapping& operator=(WritableSharedMemoryMapping&&);
++ WritableSharedMemoryMapping(WritableSharedMemoryMapping&&) noexcept;
++ WritableSharedMemoryMapping& operator=(
++ WritableSharedMemoryMapping&&) noexcept;
+
+ // Returns the base address of the mapping. This is writable memory. This is
+ // page-aligned. This is nullptr for invalid instances.
+
+From bdc24128b75008743d819e298557a53205706e7c Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Sun, 09 Jun 2019 11:22:25 +0000
+Subject: [PATCH] GCC: fix noexcept from move constructor and assign operators of AccountInfo
+
+AccountInfo declares them as noexcept and uses default implementation,
+so all its members (including AccountId) should be noexcept. But AccountId
+is not noexcept. To fix it we just need to make CoreAccountId move
+operator/assign operator noexcept.
+
+Bug: 819294
+Change-Id: Ice38654ab7cf3b9eaa6f54aa36e1fec329264f98
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645296
+Reviewed-by: Roger Tawa <rogerta@chromium.org>
+Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#667484}
+---
+
+diff --git a/google_apis/gaia/core_account_id.cc b/google_apis/gaia/core_account_id.cc
+index d808082..12eefe3 100644
+--- a/google_apis/gaia/core_account_id.cc
++++ b/google_apis/gaia/core_account_id.cc
+@@ -6,8 +6,16 @@
+
+ CoreAccountId::CoreAccountId() = default;
+
++CoreAccountId::CoreAccountId(const CoreAccountId&) = default;
++
++CoreAccountId::CoreAccountId(CoreAccountId&&) noexcept = default;
++
+ CoreAccountId::~CoreAccountId() = default;
+
++CoreAccountId& CoreAccountId::operator=(const CoreAccountId&) = default;
++
++CoreAccountId& CoreAccountId::operator=(CoreAccountId&&) noexcept = default;
++
+ CoreAccountId::CoreAccountId(const char* id) : id(id) {}
+
+ CoreAccountId::CoreAccountId(std::string&& id) : id(std::move(id)) {}
+diff --git a/google_apis/gaia/core_account_id.h b/google_apis/gaia/core_account_id.h
+index 5ea602a..c2d1911 100644
+--- a/google_apis/gaia/core_account_id.h
++++ b/google_apis/gaia/core_account_id.h
+@@ -14,8 +14,13 @@
+ // for design and tracking).
+ struct CoreAccountId {
+ CoreAccountId();
++ CoreAccountId(const CoreAccountId&);
++ CoreAccountId(CoreAccountId&&) noexcept;
+ ~CoreAccountId();
+
++ CoreAccountId& operator=(const CoreAccountId&);
++ CoreAccountId& operator=(CoreAccountId&&) noexcept;
++
+ // Those implicit constructor and conversion operator allow to
+ // progressively migrate the code to use this struct. Removing
+ // them is tracked by https://crbug.com/959161
+
+From 9aae68736bc7eb7172d0d0c978ecb6d1f75c7b30 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Tue, 11 Jun 2019 10:27:19 +0200
+Subject: [PATCH] GCC: add noexcept move assignment in history::URLRow
+
+In GCC, build is failing because history::QueryURLResult declares its move
+assignment operator as noexcept using default implementation. That requires
+its members to provide a move assignment operator that is noexcept too.
+
+But URLRow was missing noexcept declaration in move assignment operator (even
+though it was providing noexcept to its move constructor).
+
+Bug: 819294
+Change-Id: I726e3cf7a4a50c9206a5d0fba8a561d363483d4f
+---
+
+diff --git a/components/history/core/browser/url_row.cc b/components/history/core/browser/url_row.cc
+index 44c22fd..aec0101 100644
+--- a/components/history/core/browser/url_row.cc
++++ b/components/history/core/browser/url_row.cc
+@@ -26,7 +26,7 @@
+ }
+
+ URLRow& URLRow::operator=(const URLRow& other) = default;
+-URLRow& URLRow::operator=(URLRow&& other) = default;
++URLRow& URLRow::operator=(URLRow&& other) noexcept = default;
+
+ void URLRow::Swap(URLRow* other) {
+ std::swap(id_, other->id_);
+diff --git a/components/history/core/browser/url_row.h b/components/history/core/browser/url_row.h
+index 8f6f9cf..31a1ef8 100644
+--- a/components/history/core/browser/url_row.h
++++ b/components/history/core/browser/url_row.h
+@@ -35,7 +35,7 @@
+
+ virtual ~URLRow();
+ URLRow& operator=(const URLRow& other);
+- URLRow& operator=(URLRow&& other);
++ URLRow& operator=(URLRow&& other) noexcept;
+
+ URLID id() const { return id_; }
+
+
+From 41d954dec0669c9a85730c0bde7df7ba7a0ff43e Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Thu, 06 Jun 2019 15:30:49 +0000
+Subject: [PATCH] Fix AutocompleteMatch move constructor/assign operator noexcept
+
+For AutocompleteMatch to declare noexcept them, all the contained
+properties need to be noexcept too. This is required at least
+for SuggestionAnswer, because base::string16 will make default
+calculated signature of the move operator noexcept(false).
+
+To avoid this issue we explicitely declare them on SuggestionAnswer,
+and its member classes TextField and ImageLine.
+
+Bug: 819294
+Change-Id: I8714f2c6352a3292bdebdc3aed9790270e49c580
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1554669
+Reviewed-by: Kevin Bailey <krb@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#666714}
+---
+
+diff --git a/components/omnibox/browser/suggestion_answer.cc b/components/omnibox/browser/suggestion_answer.cc
+index 151e55f..a0c9049 100644
+--- a/components/omnibox/browser/suggestion_answer.cc
++++ b/components/omnibox/browser/suggestion_answer.cc
+@@ -55,6 +55,12 @@
+
+ SuggestionAnswer::TextField::TextField() = default;
+ SuggestionAnswer::TextField::~TextField() = default;
++SuggestionAnswer::TextField::TextField(const TextField&) = default;
++SuggestionAnswer::TextField::TextField(TextField&&) noexcept = default;
++SuggestionAnswer::TextField& SuggestionAnswer::TextField::operator=(
++ const TextField&) = default;
++SuggestionAnswer::TextField& SuggestionAnswer::TextField::operator=(
++ TextField&&) noexcept = default;
+
+ // static
+ bool SuggestionAnswer::TextField::ParseTextField(const base::Value& field_json,
+@@ -93,9 +99,12 @@
+ SuggestionAnswer::ImageLine::ImageLine()
+ : num_text_lines_(1) {}
+ SuggestionAnswer::ImageLine::ImageLine(const ImageLine& line) = default;
++SuggestionAnswer::ImageLine::ImageLine(ImageLine&&) noexcept = default;
+
+ SuggestionAnswer::ImageLine& SuggestionAnswer::ImageLine::operator=(
+ const ImageLine& line) = default;
++SuggestionAnswer::ImageLine& SuggestionAnswer::ImageLine::operator=(
++ ImageLine&&) noexcept = default;
+
+ SuggestionAnswer::ImageLine::~ImageLine() {}
+
+@@ -251,9 +260,14 @@
+
+ SuggestionAnswer::SuggestionAnswer(const SuggestionAnswer& answer) = default;
+
++SuggestionAnswer::SuggestionAnswer(SuggestionAnswer&&) noexcept = default;
++
+ SuggestionAnswer& SuggestionAnswer::operator=(const SuggestionAnswer& answer) =
+ default;
+
++SuggestionAnswer& SuggestionAnswer::operator=(SuggestionAnswer&&) noexcept =
++ default;
++
+ SuggestionAnswer::~SuggestionAnswer() = default;
+
+ // static
+diff --git a/components/omnibox/browser/suggestion_answer.h b/components/omnibox/browser/suggestion_answer.h
+index 31be937..2840ace 100644
+--- a/components/omnibox/browser/suggestion_answer.h
++++ b/components/omnibox/browser/suggestion_answer.h
+@@ -125,6 +125,10 @@
+ public:
+ TextField();
+ ~TextField();
++ TextField(const TextField&);
++ TextField(TextField&&) noexcept;
++ TextField& operator=(const TextField&);
++ TextField& operator=(TextField&&) noexcept;
+
+ // Parses |field_json| dictionary and populates |text_field| with the
+ // contents. If any of the required elements is missing, returns false and
+@@ -162,7 +166,9 @@
+ public:
+ ImageLine();
+ explicit ImageLine(const ImageLine& line);
++ ImageLine(ImageLine&&) noexcept;
+ ImageLine& operator=(const ImageLine& line);
++ ImageLine& operator=(ImageLine&&) noexcept;
+ ~ImageLine();
+
+ // Parses dictionary |line_json| and populates |image_line| with the
+@@ -213,7 +219,9 @@
+
+ SuggestionAnswer();
+ SuggestionAnswer(const SuggestionAnswer& answer);
++ SuggestionAnswer(SuggestionAnswer&&) noexcept;
+ SuggestionAnswer& operator=(const SuggestionAnswer& answer);
++ SuggestionAnswer& operator=(SuggestionAnswer&&) noexcept;
+ ~SuggestionAnswer();
+
+ // Parses dictionary |answer_json| and fills a SuggestionAnswer containing the
+
+From 9f99af41cae3cfff3bcdcc856c1539801c9b745b Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Fri, 07 Jun 2019 18:59:59 +0000
+Subject: [PATCH] DisjoingRangeLockManager::Lock move constructor/assign operator cannot be noexcept
+
+They depend on LockRequest, that depends on WeakPtr, none of them noexcept.
+
+Bug: 819294
+Change-Id: I04ec15901ca627358df727540597f21f135c129b
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1646252
+Reviewed-by: Joshua Bell <jsbell@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#667260}
+---
+
+diff --git a/content/browser/indexed_db/scopes/disjoint_range_lock_manager.cc b/content/browser/indexed_db/scopes/disjoint_range_lock_manager.cc
+index 478a5c9..a18c6cd 100644
+--- a/content/browser/indexed_db/scopes/disjoint_range_lock_manager.cc
++++ b/content/browser/indexed_db/scopes/disjoint_range_lock_manager.cc
+@@ -19,14 +19,13 @@
+ : requested_type(type),
+ locks_holder(std::move(locks_holder)),
+ acquired_callback(std::move(acquired_callback)) {}
+-DisjointRangeLockManager::LockRequest::LockRequest(LockRequest&&) noexcept =
+- default;
++DisjointRangeLockManager::LockRequest::LockRequest(LockRequest&&) = default;
+ DisjointRangeLockManager::LockRequest::~LockRequest() = default;
+ DisjointRangeLockManager::Lock::Lock() = default;
+-DisjointRangeLockManager::Lock::Lock(Lock&&) noexcept = default;
++DisjointRangeLockManager::Lock::Lock(Lock&&) = default;
+ DisjointRangeLockManager::Lock::~Lock() = default;
+ DisjointRangeLockManager::Lock& DisjointRangeLockManager::Lock::operator=(
+- DisjointRangeLockManager::Lock&&) noexcept = default;
++ DisjointRangeLockManager::Lock&&) = default;
+
+ DisjointRangeLockManager::DisjointRangeLockManager(int level_count)
+ : task_runner_(base::SequencedTaskRunnerHandle::Get()),
diff --git a/www-client/chromium/files/chromium-76-gcc-private.patch b/www-client/chromium/files/chromium-76-gcc-private.patch
new file mode 100644
index 0000000..bc0ed98
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-private.patch
@@ -0,0 +1,63 @@
+From 502e6e42633d2571c8236c8649b031fe9915eb5b Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Tue, 11 Jun 2019 16:56:27 +0000
+Subject: [PATCH] GCC: CertNetFetcherImpl declares Job as a friend but it is in the anonymous namespace
+
+GCC does not allow friendship declaration to anonymous namespace as done with Job
+object in the CertNetFetcherImpl. This fix removes the friend declaration, and just
+makes RemoveJob method public, that was the only reason to make Job a friend.
+
+Error was:
+./../net/cert_net/cert_net_fetcher_impl.cc: In member function ‘void net::{anonymous}::Job::DetachRequest(net::CertNetFetcherImpl::RequestCore*)’:
+../../net/cert_net/cert_net_fetcher_impl.cc:458:42: error: ‘std::unique_ptr<net::{anonymous}::Job> net::CertNetFetcherImpl::AsyncCertNetFetcherImpl::RemoveJob(net::{anonymous}::Job*)’ is private within this context
+ delete_this = parent_->RemoveJob(this);
+ ^
+../../net/cert_net/cert_net_fetcher_impl.cc:151:24: note: declared private here
+ std::unique_ptr<Job> RemoveJob(Job* job);
+ ^~~~~~~~~
+../../net/cert_net/cert_net_fetcher_impl.cc: In member function ‘void net::{anonymous}::Job::OnJobCompleted(net::Error)’:
+../../net/cert_net/cert_net_fetcher_impl.cc:610:61: error: ‘std::unique_ptr<net::{anonymous}::Job> net::CertNetFetcherImpl::AsyncCertNetFetcherImpl::RemoveJob(net::{anonymous}::Job*)’ is private within this context
+ std::unique_ptr<Job> delete_this = parent_->RemoveJob(this);
+ ^
+../../net/cert_net/cert_net_fetcher_impl.cc:151:24: note: declared private here
+ std::unique_ptr<Job> RemoveJob(Job* job);
+ ^~~~~~~~~
+
+Bug: 819294
+Change-Id: I3609f4558e570741395366de6a4cd40577d91450
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1651783
+Commit-Queue: Eric Roman <eroman@chromium.org>
+Reviewed-by: Eric Roman <eroman@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#668015}
+---
+
+diff --git a/net/cert_net/cert_net_fetcher_impl.cc b/net/cert_net/cert_net_fetcher_impl.cc
+index 11a1166..349c656 100644
+--- a/net/cert_net/cert_net_fetcher_impl.cc
++++ b/net/cert_net/cert_net_fetcher_impl.cc
+@@ -135,21 +135,19 @@
+ void Fetch(std::unique_ptr<RequestParams> request_params,
+ scoped_refptr<RequestCore> request);
+
++ // Removes |job| from the in progress jobs and transfers ownership to the
++ // caller.
++ std::unique_ptr<Job> RemoveJob(Job* job);
++
+ // Cancels outstanding jobs, which stops network requests and signals the
+ // corresponding RequestCores that the requests have completed.
+ void Shutdown();
+
+ private:
+- friend class Job;
+-
+ // Finds a job with a matching RequestPararms or returns nullptr if there was
+ // no match.
+ Job* FindJob(const RequestParams& params);
+
+- // Removes |job| from the in progress jobs and transfers ownership to the
+- // caller.
+- std::unique_ptr<Job> RemoveJob(Job* job);
+-
+ // The in-progress jobs. This set does not contain the job which is actively
+ // invoking callbacks (OnJobCompleted).
+ JobSet jobs_;
diff --git a/www-client/chromium/files/chromium-76-gcc-pure-virtual.patch b/www-client/chromium/files/chromium-76-gcc-pure-virtual.patch
new file mode 100644
index 0000000..3d34e43
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-pure-virtual.patch
@@ -0,0 +1,50 @@
+From cdf306db81efaaaa954487585d5a5a16205a5ebd Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Wed, 05 Jun 2019 14:45:06 +0000
+Subject: [PATCH] Avoid pure virtual crash destroying RenderProcessUserData
+
+When RenderProcessUserData is destroyed from the destructor of
+RenderProcessHostImpl, it is done in the destructor of RenderProcessHost.
+At this point RemoveObserver override is already freed, so RenderProcessHost
+is pure virtual. This crash happens at least building with GCC:
+
+ at /usr/include/c++/8/ext/new_allocator.h:140
+ (this=0x7fffffffcb50, __in_chrg=<optimized out>) at /usr/include/c++/8/bits/stl_tree.h:964
+
+We need to destroy RenderProcessUserData before that happens. To do that
+we can just override RenderProcessHostDestroyed.
+
+Bug: 910288
+Change-Id: I38107b178829b0cb7494f5333b765e5b087d82cd
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645366
+Commit-Queue: Sigurður Ásgeirsson <siggi@chromium.org>
+Reviewed-by: Sigurður Ásgeirsson <siggi@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#666279}
+---
+
+diff --git a/chrome/browser/performance_manager/render_process_user_data.cc b/chrome/browser/performance_manager/render_process_user_data.cc
+index 2e2c199..ef6e1fb 100644
+--- a/chrome/browser/performance_manager/render_process_user_data.cc
++++ b/chrome/browser/performance_manager/render_process_user_data.cc
+@@ -116,4 +116,9 @@
+ base::Unretained(process_node_.get()), info.exit_code));
+ }
+
++void RenderProcessUserData::RenderProcessHostDestroyed(
++ content::RenderProcessHost* host) {
++ host->RemoveUserData(kRenderProcessUserDataKey);
++}
++
+ } // namespace performance_manager
+diff --git a/chrome/browser/performance_manager/render_process_user_data.h b/chrome/browser/performance_manager/render_process_user_data.h
+index ac74b1d..f3b4d16 100644
+--- a/chrome/browser/performance_manager/render_process_user_data.h
++++ b/chrome/browser/performance_manager/render_process_user_data.h
+@@ -47,6 +47,7 @@
+ void RenderProcessExited(
+ content::RenderProcessHost* host,
+ const content::ChildProcessTerminationInfo& info) override;
++ void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
+
+ // All instances are linked together in a doubly linked list to allow orderly
+ // destruction at browser shutdown time.
diff --git a/www-client/chromium/files/chromium-76-gcc-uint32.patch b/www-client/chromium/files/chromium-76-gcc-uint32.patch
new file mode 100644
index 0000000..5e392e6
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-uint32.patch
@@ -0,0 +1,30 @@
+From 53bb5a463ee956c70230eaa5450022185d0ddc3c Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Thu, 06 Jun 2019 07:54:05 +0000
+Subject: [PATCH] ThrottlingController::Liveness needs to be uint32_t
+
+We are setting kAlive and kDead values assigning values that
+are bigger than the maximum signed int32. It is better to use
+uint32_t in this case.
+
+Bug: 819294
+Change-Id: If72b48291a66a3a9db24b4c8e2d11d31936a66ee
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645772
+Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#666619}
+---
+
+diff --git a/services/network/throttling/throttling_controller.h b/services/network/throttling/throttling_controller.h
+index 43751c4..3c6f87b 100644
+--- a/services/network/throttling/throttling_controller.h
++++ b/services/network/throttling/throttling_controller.h
+@@ -38,7 +38,7 @@
+
+ // TODO(https://crbug.com/960874): Debugging code to try and shed some light
+ // on why the owned maps are invalid.
+- enum class Liveness : int32_t {
++ enum class Liveness : uint32_t {
+ kAlive = 0xCA11AB13,
+ kDead = 0xDEADBEEF,
+ };
diff --git a/www-client/chromium/files/chromium-76-gcc-vulkan.patch b/www-client/chromium/files/chromium-76-gcc-vulkan.patch
new file mode 100644
index 0000000..cf93bce
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-gcc-vulkan.patch
@@ -0,0 +1,115 @@
+From fdb3bb1f8c41d044a5b0cb80257a26dd3c8f83a3 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Tue, 11 Jun 2019 17:39:38 +0000
+Subject: [PATCH] GCC: do not use old C notation to assign struct with property names.
+
+The notation for initialization of structs referring to its properties
+is invalid in C++. This is not accepted in GCC. It was making build
+fail in VulkanCommandBuffer.
+
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc: In member function 'void gpu::VulkanCommandBuffer::TransitionImageLayout(VkImage, VkImageLayout, VkImageLayout)':
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:214:7: error: expected primary-expression before '.' token
+ .subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+ ^
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:215:7: error: expected primary-expression before '.' token
+ .subresourceRange.baseMipLevel = 0,
+ ^
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:216:7: error: expected primary-expression before '.' token
+ .subresourceRange.levelCount = 1,
+ ^
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:217:7: error: expected primary-expression before '.' token
+ .subresourceRange.baseArrayLayer = 0,
+ ^
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:218:7: error: expected primary-expression before '.' token
+ .subresourceRange.layerCount = 1,
+ ^
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc: In member function 'void gpu::VulkanCommandBuffer::CopyBufferToImage(VkBuffer, VkImage, uint32_t, uint32_t, uint32_t, uint32_t)':
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:235:7: error: expected primary-expression before '.' token
+ .imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+ ^
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:236:7: error: expected primary-expression before '.' token
+ .imageSubresource.mipLevel = 0,
+ ^
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:237:7: error: expected primary-expression before '.' token
+ .imageSubresource.baseArrayLayer = 0,
+ ^
+./../../../chromium-76.0.3806.1/gpu/vulkan/vulkan_command_buffer.cc:238:7: error: expected primary-expression before '.' token
+ .imageSubresource.layerCount = 1,
+ ^
+Bug: 819294
+
+Change-Id: I999abece0c727e77964789183642ba62009c2c22
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1651802
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Reviewed-by: Antoine Labour <piman@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#668033}
+---
+
+diff --git a/gpu/vulkan/vulkan_command_buffer.cc b/gpu/vulkan/vulkan_command_buffer.cc
+index ba776e4..4f14c85 100644
+--- a/gpu/vulkan/vulkan_command_buffer.cc
++++ b/gpu/vulkan/vulkan_command_buffer.cc
+@@ -207,21 +207,20 @@
+ void VulkanCommandBuffer::TransitionImageLayout(VkImage image,
+ VkImageLayout old_layout,
+ VkImageLayout new_layout) {
+- VkImageMemoryBarrier barrier = {
+- .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
+- .srcAccessMask = GetAccessMask(old_layout),
+- .dstAccessMask = GetAccessMask(new_layout),
+- .oldLayout = old_layout,
+- .newLayout = new_layout,
+- .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
+- .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
+- .image = image,
+- .subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+- .subresourceRange.baseMipLevel = 0,
+- .subresourceRange.levelCount = 1,
+- .subresourceRange.baseArrayLayer = 0,
+- .subresourceRange.layerCount = 1,
+- };
++ VkImageMemoryBarrier barrier = {};
++ barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
++ barrier.srcAccessMask = GetAccessMask(old_layout);
++ barrier.dstAccessMask = GetAccessMask(new_layout);
++ barrier.oldLayout = old_layout;
++ barrier.newLayout = new_layout;
++ barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
++ barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
++ barrier.image = image;
++ barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
++ barrier.subresourceRange.baseMipLevel = 0;
++ barrier.subresourceRange.levelCount = 1;
++ barrier.subresourceRange.baseArrayLayer = 0;
++ barrier.subresourceRange.layerCount = 1;
+ vkCmdPipelineBarrier(command_buffer_, GetPipelineStageFlags(old_layout),
+ GetPipelineStageFlags(new_layout), 0, 0, nullptr, 0,
+ nullptr, 1, &barrier);
+@@ -233,17 +232,16 @@
+ uint32_t buffer_height,
+ uint32_t width,
+ uint32_t height) {
+- VkBufferImageCopy region = {
+- .bufferOffset = 0,
+- .bufferRowLength = buffer_width,
+- .bufferImageHeight = buffer_height,
+- .imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+- .imageSubresource.mipLevel = 0,
+- .imageSubresource.baseArrayLayer = 0,
+- .imageSubresource.layerCount = 1,
+- .imageOffset = {0, 0, 0},
+- .imageExtent = {width, height, 1},
+- };
++ VkBufferImageCopy region = {};
++ region.bufferOffset = 0;
++ region.bufferRowLength = buffer_width;
++ region.bufferImageHeight = buffer_height;
++ region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
++ region.imageSubresource.mipLevel = 0;
++ region.imageSubresource.baseArrayLayer = 0;
++ region.imageSubresource.layerCount = 1;
++ region.imageOffset = {0, 0, 0};
++ region.imageExtent = {width, height, 1};
+ vkCmdCopyBufferToImage(command_buffer_, buffer, image,
+ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
+ }
diff --git a/www-client/chromium/files/chromium-76-quiche.patch b/www-client/chromium/files/chromium-76-quiche.patch
new file mode 100644
index 0000000..f3aa42a
--- /dev/null
+++ b/www-client/chromium/files/chromium-76-quiche.patch
@@ -0,0 +1,239 @@
+From 9424add9d73432a794b7944790253213cce6dcb8 Mon Sep 17 00:00:00 2001
+From: danzh <danzh@google.com>
+Date: Thu, 06 Jun 2019 14:04:36 -0700
+Subject: [PATCH] gfe-relnote: (n/a) code cleanup. Fix envoy compile errors.
+
+Add #include header for std library.
+Reference TransportParameters when using its enum TransportParameterId.
+
+PiperOrigin-RevId: 251922363
+Change-Id: Iba38660e5adc3069e377829acec44267658b11c6
+---
+
+diff --git a/net/third_party/quiche/src/quic/core/crypto/transport_parameters.cc b/net/third_party/quiche/src/quic/core/crypto/transport_parameters.cc
+index ee0ebf0..e5df9fe 100644
+--- a/net/third_party/quiche/src/quic/core/crypto/transport_parameters.cc
++++ b/net/third_party/quiche/src/quic/core/crypto/transport_parameters.cc
+@@ -62,37 +62,37 @@
+ std::string TransportParameterIdToString(
+ TransportParameters::TransportParameterId param_id) {
+ switch (param_id) {
+- case kOriginalConnectionId:
++ case TransportParameters::kOriginalConnectionId:
+ return "original_connection_id";
+- case kIdleTimeout:
++ case TransportParameters::kIdleTimeout:
+ return "idle_timeout";
+- case kStatelessResetToken:
++ case TransportParameters::kStatelessResetToken:
+ return "stateless_reset_token";
+- case kMaxPacketSize:
++ case TransportParameters::kMaxPacketSize:
+ return "max_packet_size";
+- case kInitialMaxData:
++ case TransportParameters::kInitialMaxData:
+ return "initial_max_data";
+- case kInitialMaxStreamDataBidiLocal:
++ case TransportParameters::kInitialMaxStreamDataBidiLocal:
+ return "initial_max_stream_data_bidi_local";
+- case kInitialMaxStreamDataBidiRemote:
++ case TransportParameters::kInitialMaxStreamDataBidiRemote:
+ return "initial_max_stream_data_bidi_remote";
+- case kInitialMaxStreamDataUni:
++ case TransportParameters::kInitialMaxStreamDataUni:
+ return "initial_max_stream_data_uni";
+- case kInitialMaxStreamsBidi:
++ case TransportParameters::kInitialMaxStreamsBidi:
+ return "initial_max_streams_bidi";
+- case kInitialMaxStreamsUni:
++ case TransportParameters::kInitialMaxStreamsUni:
+ return "initial_max_streams_uni";
+- case kAckDelayExponent:
++ case TransportParameters::kAckDelayExponent:
+ return "ack_delay_exponent";
+- case kMaxAckDelay:
++ case TransportParameters::kMaxAckDelay:
+ return "max_ack_delay";
+- case kDisableMigration:
++ case TransportParameters::kDisableMigration:
+ return "disable_migration";
+- case kPreferredAddress:
++ case TransportParameters::kPreferredAddress:
+ return "preferred_address";
+- case kGoogleQuicParam:
++ case TransportParameters::kGoogleQuicParam:
+ return "google";
+- case kGoogleQuicVersion:
++ case TransportParameters::kGoogleQuicVersion:
+ return "google-version";
+ }
+ return "Unknown(" + QuicTextUtils::Uint64ToString(param_id) + ")";
+@@ -390,7 +390,7 @@
+ CBB original_connection_id_param;
+ if (!in.original_connection_id.IsEmpty()) {
+ DCHECK_EQ(Perspective::IS_SERVER, in.perspective);
+- if (!CBB_add_u16(&params, kOriginalConnectionId) ||
++ if (!CBB_add_u16(&params, TransportParameters::kOriginalConnectionId) ||
+ !CBB_add_u16_length_prefixed(&params, &original_connection_id_param) ||
+ !CBB_add_bytes(
+ &original_connection_id_param,
+@@ -412,7 +412,7 @@
+ if (!in.stateless_reset_token.empty()) {
+ DCHECK_EQ(kStatelessResetTokenLength, in.stateless_reset_token.size());
+ DCHECK_EQ(Perspective::IS_SERVER, in.perspective);
+- if (!CBB_add_u16(&params, kStatelessResetToken) ||
++ if (!CBB_add_u16(&params, TransportParameters::kStatelessResetToken) ||
+ !CBB_add_u16_length_prefixed(&params, &stateless_reset_token_param) ||
+ !CBB_add_bytes(&stateless_reset_token_param,
+ in.stateless_reset_token.data(),
+@@ -438,7 +438,7 @@
+
+ // disable_migration
+ if (in.disable_migration) {
+- if (!CBB_add_u16(&params, kDisableMigration) ||
++ if (!CBB_add_u16(&params, TransportParameters::kDisableMigration) ||
+ !CBB_add_u16(&params, 0u)) { // 0 is the length of this parameter.
+ QUIC_BUG << "Failed to write disable_migration for " << in;
+ return false;
+@@ -458,7 +458,7 @@
+ QUIC_BUG << "Bad lengths " << *in.preferred_address;
+ return false;
+ }
+- if (!CBB_add_u16(&params, kPreferredAddress) ||
++ if (!CBB_add_u16(&params, TransportParameters::kPreferredAddress) ||
+ !CBB_add_u16_length_prefixed(&params, &preferred_address_params) ||
+ !CBB_add_bytes(
+ &preferred_address_params,
+@@ -491,7 +491,7 @@
+ if (in.google_quic_params) {
+ const QuicData& serialized_google_quic_params =
+ in.google_quic_params->GetSerialized();
+- if (!CBB_add_u16(&params, kGoogleQuicParam) ||
++ if (!CBB_add_u16(&params, TransportParameters::kGoogleQuicParam) ||
+ !CBB_add_u16_length_prefixed(&params, &google_quic_params) ||
+ !CBB_add_bytes(&google_quic_params,
+ reinterpret_cast<const uint8_t*>(
+@@ -505,7 +505,7 @@
+
+ // Google-specific version extension.
+ CBB google_version_params;
+- if (!CBB_add_u16(&params, kGoogleQuicVersion) ||
++ if (!CBB_add_u16(&params, TransportParameters::kGoogleQuicVersion) ||
+ !CBB_add_u16_length_prefixed(&params, &google_version_params) ||
+ !CBB_add_u32(&google_version_params, in.version)) {
+ QUIC_BUG << "Failed to write Google version extension for " << in;
+@@ -565,7 +565,7 @@
+ }
+ bool parse_success = true;
+ switch (param_id) {
+- case kOriginalConnectionId:
++ case TransportParameters::kOriginalConnectionId:
+ if (!out->original_connection_id.IsEmpty()) {
+ QUIC_DLOG(ERROR) << "Received a second original connection ID";
+ return false;
+@@ -581,10 +581,10 @@
+ CBS_len(&value));
+ }
+ break;
+- case kIdleTimeout:
++ case TransportParameters::kIdleTimeout:
+ parse_success = out->idle_timeout_milliseconds.ReadFromCbs(&value);
+ break;
+- case kStatelessResetToken:
++ case TransportParameters::kStatelessResetToken:
+ if (!out->stateless_reset_token.empty()) {
+ QUIC_DLOG(ERROR) << "Received a second stateless reset token";
+ return false;
+@@ -597,36 +597,36 @@
+ out->stateless_reset_token.assign(CBS_data(&value),
+ CBS_data(&value) + CBS_len(&value));
+ break;
+- case kMaxPacketSize:
++ case TransportParameters::kMaxPacketSize:
+ parse_success = out->max_packet_size.ReadFromCbs(&value);
+ break;
+- case kInitialMaxData:
++ case TransportParameters::kInitialMaxData:
+ parse_success = out->initial_max_data.ReadFromCbs(&value);
+ break;
+- case kInitialMaxStreamDataBidiLocal:
++ case TransportParameters::kInitialMaxStreamDataBidiLocal:
+ parse_success =
+ out->initial_max_stream_data_bidi_local.ReadFromCbs(&value);
+ break;
+- case kInitialMaxStreamDataBidiRemote:
++ case TransportParameters::kInitialMaxStreamDataBidiRemote:
+ parse_success =
+ out->initial_max_stream_data_bidi_remote.ReadFromCbs(&value);
+ break;
+- case kInitialMaxStreamDataUni:
++ case TransportParameters::kInitialMaxStreamDataUni:
+ parse_success = out->initial_max_stream_data_uni.ReadFromCbs(&value);
+ break;
+- case kInitialMaxStreamsBidi:
++ case TransportParameters::kInitialMaxStreamsBidi:
+ parse_success = out->initial_max_streams_bidi.ReadFromCbs(&value);
+ break;
+- case kInitialMaxStreamsUni:
++ case TransportParameters::kInitialMaxStreamsUni:
+ parse_success = out->initial_max_streams_uni.ReadFromCbs(&value);
+ break;
+- case kAckDelayExponent:
++ case TransportParameters::kAckDelayExponent:
+ parse_success = out->ack_delay_exponent.ReadFromCbs(&value);
+ break;
+- case kMaxAckDelay:
++ case TransportParameters::kMaxAckDelay:
+ parse_success = out->max_ack_delay.ReadFromCbs(&value);
+ break;
+- case kDisableMigration:
++ case TransportParameters::kDisableMigration:
+ if (out->disable_migration) {
+ QUIC_DLOG(ERROR) << "Received a second disable migration";
+ return false;
+@@ -638,7 +638,7 @@
+ }
+ out->disable_migration = true;
+ break;
+- case kPreferredAddress: {
++ case TransportParameters::kPreferredAddress: {
+ uint16_t ipv4_port, ipv6_port;
+ in_addr ipv4_address;
+ in6_addr ipv6_address;
+@@ -692,7 +692,7 @@
+ QuicMakeUnique<TransportParameters::PreferredAddress>(
+ preferred_address);
+ } break;
+- case kGoogleQuicParam: {
++ case TransportParameters::kGoogleQuicParam: {
+ if (out->google_quic_params) {
+ QUIC_DLOG(ERROR) << "Received a second Google parameter";
+ return false;
+@@ -701,7 +701,7 @@
+ reinterpret_cast<const char*>(CBS_data(&value)), CBS_len(&value));
+ out->google_quic_params = CryptoFramer::ParseMessage(serialized_params);
+ } break;
+- case kGoogleQuicVersion: {
++ case TransportParameters::kGoogleQuicVersion: {
+ if (!CBS_get_u32(&value, &out->version)) {
+ QUIC_DLOG(ERROR) << "Failed to parse Google version extension";
+ return false;
+diff --git a/quic/core/quic_socket_address_coder.cc b/quic/core/quic_socket_address_coder.cc
+index 2527fc9..b26103d 100644
+--- a/net/third_party/quiche/src/quic/core/quic_socket_address_coder.cc
++++ b/net/third_party/quiche/src/quic/core/quic_socket_address_coder.cc
+@@ -2,10 +2,12 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-#include <string>
+-
+ #include "net/third_party/quiche/src/quic/core/quic_socket_address_coder.h"
+
++#include <cstring>
++#include <string>
++#include <vector>
++
+ namespace quic {
+
+ namespace {
diff --git a/www-client/chromium/files/chromium-77-blink-include.patch b/www-client/chromium/files/chromium-77-blink-include.patch
new file mode 100644
index 0000000..3ac1770
--- /dev/null
+++ b/www-client/chromium/files/chromium-77-blink-include.patch
@@ -0,0 +1,28 @@
+From 5baf7df7f4c5971dab552897eeef94b194650ce5 Mon Sep 17 00:00:00 2001
+From: Dave Tapuska <dtapuska@chromium.org>
+Date: Mon, 12 Aug 2019 22:30:13 +0000
+Subject: [PATCH] Fix build failure due to missing include for std::numeric_limits usage.
+
+Some configurations fail to build, limits should have been included.
+
+BUG=992832
+
+Change-Id: I894ba0543bfcef101c93259e39a31d12ae6d035c
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1747981
+Commit-Queue: Dave Tapuska <dtapuska@chromium.org>
+Reviewed-by: Mostyn Bramley-Moore <mostynb@vewd.com>
+Cr-Commit-Position: refs/heads/master@{#686214}
+---
+
+diff --git a/third_party/blink/renderer/platform/exported/web_time_range.cc b/third_party/blink/renderer/platform/exported/web_time_range.cc
+index 384566a..68d83e1 100644
+--- a/third_party/blink/renderer/platform/exported/web_time_range.cc
++++ b/third_party/blink/renderer/platform/exported/web_time_range.cc
+@@ -31,6 +31,7 @@
+ #include "third_party/blink/public/platform/web_time_range.h"
+
+ #include <cmath>
++#include <limits>
+
+ namespace blink {
+
diff --git a/www-client/chromium/files/chromium-77-clang.patch b/www-client/chromium/files/chromium-77-clang.patch
new file mode 100644
index 0000000..a57b5a4
--- /dev/null
+++ b/www-client/chromium/files/chromium-77-clang.patch
@@ -0,0 +1,13 @@
+diff --git a/base/location.h b/base/location.h
+index c07e747..924db1c 100644
+--- a/base/location.h
++++ b/base/location.h
+@@ -18,7 +18,7 @@
+
+ namespace base {
+
+-#if defined(__has_builtin)
++#if defined(__clang__)
+ // Clang allows detection of these builtins.
+ #define SUPPORTS_LOCATION_BUILTINS \
+ (__has_builtin(__builtin_FUNCTION) && __has_builtin(__builtin_FILE) && \
diff --git a/www-client/chromium/files/chromium-77-fix-gn-gen.patch b/www-client/chromium/files/chromium-77-fix-gn-gen.patch
new file mode 100644
index 0000000..2c5f128
--- /dev/null
+++ b/www-client/chromium/files/chromium-77-fix-gn-gen.patch
@@ -0,0 +1,11 @@
+--- a/third_party/blink/tools/BUILD.gn
++++ b/third_party/blink/tools/BUILD.gn
+@@ -11,7 +11,7 @@ action("build_wpt_metadata") {
+ rebase_path("$root_out_dir/wpt_expectations_metadata"),
+ ]
+ outputs = [
+- "$root_out_dir/wpt_expectations_metadata/",
++ "$root_out_dir/wpt_expectations_metadata",
+ ]
+ data = [
+ # Include the blinkpy tools to access expectations data
diff --git a/www-client/chromium/files/chromium-77-gcc-abstract.patch b/www-client/chromium/files/chromium-77-gcc-abstract.patch
new file mode 100644
index 0000000..6d77299
--- /dev/null
+++ b/www-client/chromium/files/chromium-77-gcc-abstract.patch
@@ -0,0 +1,61 @@
+From f08cb0022527081c078e8b96062e6c9b4fbda151 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Fri, 26 Jul 2019 16:48:06 +0000
+Subject: [PATCH] BinaryUploadService: change parameter passing that cannot afford abstract class
+
+The method UploadForDeepScanning gets a Request as parameter. But Request is an
+abstract class, so GCC will not allow that declaration (polimorphycs should be
+passed by reference). Use std::unique_ptr so BinaryUploadService can assume
+ownership.
+
+Bug: 819294
+Change-Id: I9e8c75cc92b01abd704d9049b0421555377da5ba
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1713550
+Reviewed-by: Daniel Rubery <drubery@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#681333}
+---
+
+diff --git a/chrome/browser/safe_browsing/download_protection/binary_upload_service.cc b/chrome/browser/safe_browsing/download_protection/binary_upload_service.cc
+index 6430c89..4e90487 100644
+--- a/chrome/browser/safe_browsing/download_protection/binary_upload_service.cc
++++ b/chrome/browser/safe_browsing/download_protection/binary_upload_service.cc
+@@ -10,7 +10,7 @@
+ namespace safe_browsing {
+
+ void BinaryUploadService::UploadForDeepScanning(
+- BinaryUploadService::Request request) {
++ std::unique_ptr<BinaryUploadService::Request> request) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ NOTREACHED();
+ }
+diff --git a/chrome/browser/safe_browsing/download_protection/binary_upload_service.h b/chrome/browser/safe_browsing/download_protection/binary_upload_service.h
+index d2dfd83..9b6f395 100644
+--- a/chrome/browser/safe_browsing/download_protection/binary_upload_service.h
++++ b/chrome/browser/safe_browsing/download_protection/binary_upload_service.h
+@@ -5,6 +5,8 @@
+ #ifndef CHROME_BROWSER_SAFE_BROWSING_DOWNLOAD_PROTECTION_BINARY_UPLOAD_SERVICE_H_
+ #define CHROME_BROWSER_SAFE_BROWSING_DOWNLOAD_PROTECTION_BINARY_UPLOAD_SERVICE_H_
+
++#include <memory>
++
+ #include "base/callback.h"
+ #include "components/safe_browsing/proto/webprotect.pb.h"
+
+@@ -40,6 +42,7 @@
+ public:
+ // |callback| will run on the UI thread.
+ explicit Request(Callback callback);
++ virtual ~Request() = default;
+ Request(const Request&) = delete;
+ Request& operator=(const Request&) = delete;
+
+@@ -67,7 +70,7 @@
+ // Upload the given file contents for deep scanning. The results will be
+ // returned asynchronously by calling |request|'s |callback|. This must be
+ // called on the UI thread.
+- void UploadForDeepScanning(Request request);
++ void UploadForDeepScanning(std::unique_ptr<Request> request);
+ };
+
+ } // namespace safe_browsing
diff --git a/www-client/chromium/files/chromium-77-gcc-include.patch b/www-client/chromium/files/chromium-77-gcc-include.patch
new file mode 100644
index 0000000..f464039
--- /dev/null
+++ b/www-client/chromium/files/chromium-77-gcc-include.patch
@@ -0,0 +1,56 @@
+From 8c747a9c14ed4905f60f6680e2e09e33ea34163e Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Fri, 26 Jul 2019 16:18:17 +0000
+Subject: [PATCH] IWYU: include <memory> in one_euro_filter.h as it uses std::unique_ptr
+
+Bug: 819294
+Change-Id: Ie1530f7046b0c8eb76e26adca530fa57c67ed876
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1720637
+Reviewed-by: Ella Ge <eirage@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#681321}
+---
+
+diff --git a/third_party/one_euro_filter/src/one_euro_filter.h b/third_party/one_euro_filter/src/one_euro_filter.h
+index 7f8d15b..a8cd0ab 100644
+--- a/third_party/one_euro_filter/src/one_euro_filter.h
++++ b/third_party/one_euro_filter/src/one_euro_filter.h
+@@ -1,6 +1,8 @@
+ #ifndef ONE_EURO_ONE_EURO_FILTER_H_
+ #define ONE_EURO_ONE_EURO_FILTER_H_
+
++#include <memory>
++
+ #include "low_pass_filter.h"
+
+ namespace one_euro_filter {
+
+From 258f5f182f8dd72f727af26e614794c67a5996e6 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jose.dapena@lge.com>
+Date: Fri, 26 Jul 2019 15:17:54 +0000
+Subject: [PATCH] IWYU: ScopedObserver of TabStripModel requires it to be included
+
+Build with GCC and libstdc++ is failing in files using tab_sharing_ui.h
+as it has a ScopedObserver of a TabStripModel without including it
+in advance.
+
+Bug: 819294
+Change-Id: I4b12073484f65ad2bb873119daa748245296d282
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1713526
+Reviewed-by: Guido Urdaneta <guidou@chromium.org>
+Commit-Queue: José Dapena Paz <jose.dapena@lge.com>
+Cr-Commit-Position: refs/heads/master@{#681290}
+---
+
+diff --git a/chrome/browser/ui/tab_sharing/tab_sharing_ui.h b/chrome/browser/ui/tab_sharing/tab_sharing_ui.h
+index 6d931129..147868f 100644
+--- a/chrome/browser/ui/tab_sharing/tab_sharing_ui.h
++++ b/chrome/browser/ui/tab_sharing/tab_sharing_ui.h
+@@ -14,6 +14,7 @@
+ #include "base/strings/string16.h"
+ #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h"
+ #include "chrome/browser/ui/browser_list_observer.h"
++#include "chrome/browser/ui/tabs/tab_strip_model.h"
+ #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
+ #include "components/infobars/core/infobar_manager.h"
+ #include "content/public/browser/desktop_media_id.h"
diff --git a/www-client/chromium/files/chromium-77-std-string.patch b/www-client/chromium/files/chromium-77-std-string.patch
new file mode 100644
index 0000000..f921f1a
--- /dev/null
+++ b/www-client/chromium/files/chromium-77-std-string.patch
@@ -0,0 +1,130 @@
+From 74138b9febd37eac0fc26b8efb110014a83a52c6 Mon Sep 17 00:00:00 2001
+From: Jeremy Roman <jbroman@chromium.org>
+Date: Wed, 07 Aug 2019 13:26:48 +0000
+Subject: [PATCH] WTF: Make LinkedHashSet understand values for which memset initialization would be bad.
+
+Includes a unit test which fails before, and uses this to fix FontCacheKeyTraits.
+
+Bug: 980025
+Change-Id: If41f97444c7fd37b9b95d6dadaf3da5689079e9e
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1739948
+Reviewed-by: Kentaro Hara <haraken@chromium.org>
+Reviewed-by: Yutaka Hirano <yhirano@chromium.org>
+Commit-Queue: Jeremy Roman <jbroman@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#684731}
+---
+
+diff --git a/third_party/blink/renderer/platform/fonts/font_cache_key.h b/third_party/blink/renderer/platform/fonts/font_cache_key.h
+index 0efc8fb..90063cb 100644
+--- a/third_party/blink/renderer/platform/fonts/font_cache_key.h
++++ b/third_party/blink/renderer/platform/fonts/font_cache_key.h
+@@ -133,6 +133,10 @@
+
+ struct FontCacheKeyTraits : WTF::SimpleClassHashTraits<FontCacheKey> {
+ STATIC_ONLY(FontCacheKeyTraits);
++
++ // std::string's empty state need not be zero in all implementations,
++ // and it is held within FontFaceCreationParams.
++ static const bool kEmptyValueIsZero = false;
+ };
+
+ } // namespace blink
+diff --git a/third_party/blink/renderer/platform/wtf/linked_hash_set.h b/third_party/blink/renderer/platform/wtf/linked_hash_set.h
+index b35b6e9..77e524c 100644
+--- a/third_party/blink/renderer/platform/wtf/linked_hash_set.h
++++ b/third_party/blink/renderer/platform/wtf/linked_hash_set.h
+@@ -146,6 +146,11 @@
+ LinkedHashSetNodeBase* next)
+ : LinkedHashSetNodeBase(prev, next), value_(value) {}
+
++ LinkedHashSetNode(ValueArg&& value,
++ LinkedHashSetNodeBase* prev,
++ LinkedHashSetNodeBase* next)
++ : LinkedHashSetNodeBase(prev, next), value_(std::move(value)) {}
++
+ LinkedHashSetNode(LinkedHashSetNode&& other)
+ : LinkedHashSetNodeBase(std::move(other)),
+ value_(std::move(other.value_)) {}
+@@ -445,10 +450,13 @@
+
+ // The slot is empty when the next_ field is zero so it's safe to zero
+ // the backing.
+- static const bool kEmptyValueIsZero = true;
++ static const bool kEmptyValueIsZero = ValueTraits::kEmptyValueIsZero;
+
+ static const bool kHasIsEmptyValueFunction = true;
+ static bool IsEmptyValue(const Node& node) { return !node.next_; }
++ static Node EmptyValue() {
++ return Node(ValueTraits::EmptyValue(), nullptr, nullptr);
++ }
+
+ static const int kDeletedValue = -1;
+
+diff --git a/third_party/blink/renderer/platform/wtf/list_hash_set_test.cc b/third_party/blink/renderer/platform/wtf/list_hash_set_test.cc
+index 4c3f899..cd1be00 100644
+--- a/third_party/blink/renderer/platform/wtf/list_hash_set_test.cc
++++ b/third_party/blink/renderer/platform/wtf/list_hash_set_test.cc
+@@ -487,6 +487,7 @@
+ };
+
+ struct Complicated {
++ Complicated() : Complicated(0) {}
+ Complicated(int value) : simple_(value) { objects_constructed_++; }
+
+ Complicated(const Complicated& other) : simple_(other.simple_) {
+@@ -495,9 +496,6 @@
+
+ Simple simple_;
+ static int objects_constructed_;
+-
+- private:
+- Complicated() = delete;
+ };
+
+ int Complicated::objects_constructed_ = 0;
+@@ -731,4 +729,45 @@
+
+ } // anonymous namespace
+
++// A unit type which objects to its state being initialized wrong.
++struct InvalidZeroValue {
++ InvalidZeroValue() = default;
++ InvalidZeroValue(WTF::HashTableDeletedValueType) : deleted_(true) {}
++ ~InvalidZeroValue() { CHECK(ok_); }
++ bool IsHashTableDeletedValue() const { return deleted_; }
++
++ bool ok_ = true;
++ bool deleted_ = false;
++};
++
++template <>
++struct HashTraits<InvalidZeroValue> : SimpleClassHashTraits<InvalidZeroValue> {
++ static const bool kEmptyValueIsZero = false;
++};
++
++template <>
++struct DefaultHash<InvalidZeroValue> {
++ struct Hash {
++ static unsigned GetHash(const InvalidZeroValue&) { return 0; }
++ static bool Equal(const InvalidZeroValue&, const InvalidZeroValue&) {
++ return true;
++ }
++ };
++};
++
++template <typename Set>
++class ListOrLinkedHashSetInvalidZeroTest : public testing::Test {};
++
++using InvalidZeroValueSetTypes =
++ testing::Types<ListHashSet<InvalidZeroValue>,
++ ListHashSet<InvalidZeroValue, 1>,
++ LinkedHashSet<InvalidZeroValue>>;
++TYPED_TEST_SUITE(ListOrLinkedHashSetInvalidZeroTest, InvalidZeroValueSetTypes);
++
++TYPED_TEST(ListOrLinkedHashSetInvalidZeroTest, InvalidZeroValue) {
++ using Set = TypeParam;
++ Set set;
++ set.insert(InvalidZeroValue());
++}
++
+ } // namespace WTF
diff --git a/www-client/chromium/files/chromium-77-system-hb.patch b/www-client/chromium/files/chromium-77-system-hb.patch
new file mode 100644
index 0000000..9cea0fa
--- /dev/null
+++ b/www-client/chromium/files/chromium-77-system-hb.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/harfbuzz-ng/BUILD.gn b/third_party/harfbuzz-ng/BUILD.gn
+index 37d8e33..6610cc6 100644
+--- a/third_party/harfbuzz-ng/BUILD.gn
++++ b/third_party/harfbuzz-ng/BUILD.gn
+@@ -16,7 +16,7 @@ if (use_system_harfbuzz) {
+ "//third_party:freetype_harfbuzz",
+ "//third_party/freetype:freetype_source",
+ ]
+- packages = [ "harfbuzz" ]
++ packages = [ "harfbuzz", "harfbuzz-subset" ]
+ }
+ } else {
+ config("harfbuzz_config") {
diff --git a/www-client/chromium/files/chromium-77-system-icu.patch b/www-client/chromium/files/chromium-77-system-icu.patch
new file mode 100644
index 0000000..1f848d7
--- /dev/null
+++ b/www-client/chromium/files/chromium-77-system-icu.patch
@@ -0,0 +1,20 @@
+diff --git a/build/linux/unbundle/icu.gn b/build/linux/unbundle/icu.gn
+index 4450e40..9ca36dd 100644
+--- a/build/linux/unbundle/icu.gn
++++ b/build/linux/unbundle/icu.gn
+@@ -96,6 +96,7 @@ shim_headers("icui18n_shim") {
+ "unicode/fpositer.h",
+ "unicode/gender.h",
+ "unicode/gregocal.h",
++ "unicode/listformatter.h",
+ "unicode/measfmt.h",
+ "unicode/measunit.h",
+ "unicode/measure.h",
+@@ -178,7 +179,6 @@ shim_headers("icuuc_shim") {
+ "unicode/icudataver.h",
+ "unicode/icuplug.h",
+ "unicode/idna.h",
+- "unicode/listformatter.h",
+ "unicode/localpointer.h",
+ "unicode/locdspnm.h",
+ "unicode/locid.h",
diff --git a/www-client/chromium/files/chromium-78-include.patch b/www-client/chromium/files/chromium-78-include.patch
new file mode 100644
index 0000000..a0b77c4
--- /dev/null
+++ b/www-client/chromium/files/chromium-78-include.patch
@@ -0,0 +1,13 @@
+diff --git a/components/password_manager/core/browser/leak_detection/encryption_utils.cc b/components/password_manager/core/browser/leak_detection/encryption_utils.cc
+index 31a7116..53eb464 100644
+--- a/components/password_manager/core/browser/leak_detection/encryption_utils.cc
++++ b/components/password_manager/core/browser/leak_detection/encryption_utils.cc
+@@ -13,6 +13,8 @@
+ #include "crypto/sha2.h"
+ #include "third_party/boringssl/src/include/openssl/evp.h"
+
++#include <climits>
++
+ namespace password_manager {
+
+ namespace {
diff --git a/www-client/chromium/files/chromium-78-protobuf-RepeatedPtrField-export.patch b/www-client/chromium/files/chromium-78-protobuf-RepeatedPtrField-export.patch
new file mode 100644
index 0000000..ddb9e80
--- /dev/null
+++ b/www-client/chromium/files/chromium-78-protobuf-RepeatedPtrField-export.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/protobuf/src/google/protobuf/repeated_field.h b/third_party/protobuf/src/google/protobuf/repeated_field.h
+index b5b193c..4434854 100644
+--- a/third_party/protobuf/src/google/protobuf/repeated_field.h
++++ b/third_party/protobuf/src/google/protobuf/repeated_field.h
+@@ -804,7 +804,7 @@ class StringTypeHandler {
+ // RepeatedPtrField is like RepeatedField, but used for repeated strings or
+ // Messages.
+ template <typename Element>
+-class RepeatedPtrField final : private internal::RepeatedPtrFieldBase {
++class PROTOBUF_EXPORT RepeatedPtrField final : private internal::RepeatedPtrFieldBase {
+ public:
+ RepeatedPtrField();
+ explicit RepeatedPtrField(Arena* arena);
diff --git a/www-client/chromium/files/chromium-79-gcc-protobuf-alignas.patch b/www-client/chromium/files/chromium-79-gcc-protobuf-alignas.patch
new file mode 100644
index 0000000..20180c4
--- /dev/null
+++ b/www-client/chromium/files/chromium-79-gcc-protobuf-alignas.patch
@@ -0,0 +1,81 @@
+From 5d66d5907ac3e76d1e382b8a8e8afe653bd00f4c Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Sun, 31 May 2020 13:59:15 +0000
+Subject: [PATCH] Fix GCC build with PROTOBUF_USE_DLLS enabled
+
+GCC does not allow mixing __attribute__(()) syntax and alignas()
+syntax. Re-use approach from chromium base/compiler_specific.h
+---
+ .../protobuf/src/google/protobuf/arena.h | 2 +-
+ .../protobuf/src/google/protobuf/port_def.inc | 29 +++++++++++++++++++
+ .../src/google/protobuf/port_undef.inc | 1 +
+ 3 files changed, 31 insertions(+), 1 deletion(-)
+
+diff --git a/third_party/protobuf/src/google/protobuf/arena.h b/third_party/protobuf/src/google/protobuf/arena.h
+index dedc221..a8515ce 100644
+--- a/third_party/protobuf/src/google/protobuf/arena.h
++++ b/third_party/protobuf/src/google/protobuf/arena.h
+@@ -245,7 +245,7 @@ struct ArenaOptions {
+ // well as protobuf container types like RepeatedPtrField and Map. The protocol
+ // is internal to protobuf and is not guaranteed to be stable. Non-proto types
+ // should not rely on this protocol.
+-class PROTOBUF_EXPORT alignas(8) Arena final {
++class PROTOBUF_EXPORT PROTOBUF_ALIGNAS(8) Arena final {
+ public:
+ // Arena constructor taking custom options. See ArenaOptions below for
+ // descriptions of the options available.
+diff --git a/third_party/protobuf/src/google/protobuf/port_def.inc b/third_party/protobuf/src/google/protobuf/port_def.inc
+index f1bd85d..6d02b53 100644
+--- a/third_party/protobuf/src/google/protobuf/port_def.inc
++++ b/third_party/protobuf/src/google/protobuf/port_def.inc
+@@ -528,6 +528,35 @@ PROTOBUF_EXPORT_TEMPLATE_TEST(DEFAULT, __declspec(dllimport));
+ #undef IN
+ #endif // _MSC_VER
+
++// Specify memory alignment for structs, classes, etc.
++// Use like:
++// class PROTOBUF_ALIGNAS(16) MyClass { ... }
++// PROTOBUF_ALIGNAS(16) int array[4];
++//
++// In most places you can use the C++11 keyword "alignas", which is preferred.
++//
++// But compilers have trouble mixing __attribute__((...)) syntax with
++// alignas(...) syntax.
++//
++// Doesn't work in clang or gcc:
++// struct alignas(16) __attribute__((packed)) S { char c; };
++// Works in clang but not gcc:
++// struct __attribute__((packed)) alignas(16) S2 { char c; };
++// Works in clang and gcc:
++// struct alignas(16) S3 { char c; } __attribute__((packed));
++//
++// There are also some attributes that must be specified *before* a class
++// definition: visibility (used for exporting functions/classes) is one of
++// these attributes. This means that it is not possible to use alignas() with a
++// class that is marked as exported.
++#if defined(_MSC_VER)
++#define PROTOBUF_ALIGNAS(byte_alignment) __declspec(align(byte_alignment))
++#elif defined(__GNUC__)
++#define PROTOBUF_ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
++#else
++#define PROTOBUF_ALIGNAS(byte_alignment) alignas(byte_alignment)
++#endif
++
+ #if defined(__clang__)
+ #pragma clang diagnostic push
+ // TODO(gerbens) ideally we cleanup the code. But a cursory try shows many
+diff --git a/third_party/protobuf/src/google/protobuf/port_undef.inc b/third_party/protobuf/src/google/protobuf/port_undef.inc
+index b7e67fe..ba1fffc 100644
+--- a/third_party/protobuf/src/google/protobuf/port_undef.inc
++++ b/third_party/protobuf/src/google/protobuf/port_undef.inc
+@@ -80,6 +80,7 @@
+ #undef PROTOBUF_EXPORT_TEMPLATE_STYLE_MATCH_foj3FJo5StF0OvIzl7oMxA__declspec
+ #undef PROTOBUF_EXPORT_TEMPLATE_STYLE_MATCH_DECLSPEC_dllexport
+ #undef PROTOBUF_EXPORT_TEMPLATE_STYLE_MATCH_DECLSPEC_dllimport
++#undef PROTOBUF_ALIGNAS
+
+
+
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-79-span-stlcompat.patch b/www-client/chromium/files/chromium-79-span-stlcompat.patch
new file mode 100644
index 0000000..9b47ee7
--- /dev/null
+++ b/www-client/chromium/files/chromium-79-span-stlcompat.patch
@@ -0,0 +1,12 @@
+diff --git a/base/containers/span.h b/base/containers/span.h
+index c03bdf836..ff00275e7 100644
+--- a/base/containers/span.h
++++ b/base/containers/span.h
+@@ -224,6 +224,7 @@ class span : public internal::ExtentStorage<Extent> {
+ using difference_type = ptrdiff_t;
+ using pointer = T*;
+ using reference = T&;
++ using iterator_category = std::random_access_iterator_tag;
+ using iterator = CheckedContiguousIterator<T>;
+ using const_iterator = CheckedContiguousConstIterator<T>;
+ using reverse_iterator = std::reverse_iterator<iterator>;
diff --git a/www-client/chromium/files/chromium-80-QuicStreamSendBuffer-deleted-move-constructor.patch b/www-client/chromium/files/chromium-80-QuicStreamSendBuffer-deleted-move-constructor.patch
new file mode 100644
index 0000000..aa3d541
--- /dev/null
+++ b/www-client/chromium/files/chromium-80-QuicStreamSendBuffer-deleted-move-constructor.patch
@@ -0,0 +1,30 @@
+From 00f47df999c9b19e80fdc01db0ae9ca1b6a12b3a Mon Sep 17 00:00:00 2001
+From: vasilvv <vasilvv@google.com>
+Date: Wed, 03 Apr 2019 13:58:53 -0700
+Subject: [PATCH] GCC: do not delete move constructor of QuicStreamSendBuffer
+
+QuicStreamSendBuffer constructor is implicitely required in the
+initialization of the vector of substreams in QuicCryptoStream.
+Though clang apparently ignores that, GCC fails to build.
+
+BUG=chromium:819294
+
+Originally submitted by José Dapena Paz <jose.dapena@lge.com> at https://quiche-review.googlesource.com/c/quiche/+/2420
+
+PiperOrigin-RevId: 241800134
+Change-Id: I4e3c97d6e5895d85340e8c1b740e6196d9104066
+---
+
+diff --git a/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h b/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h
+index e34514b..74e9d0d 100644
+--- a/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h
++++ b/net/third_party/quiche/src/quic/core/quic_stream_send_buffer.h
+@@ -62,7 +62,7 @@
+ public:
+ explicit QuicStreamSendBuffer(QuicBufferAllocator* allocator);
+ QuicStreamSendBuffer(const QuicStreamSendBuffer& other) = delete;
+- QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = delete;
++ QuicStreamSendBuffer(QuicStreamSendBuffer&& other) = default;
+ ~QuicStreamSendBuffer();
+
+ // Save |data_length| of data starts at |iov_offset| in |iov| to send buffer.
diff --git a/www-client/chromium/files/chromium-84-blink-disable-clang-format.patch b/www-client/chromium/files/chromium-84-blink-disable-clang-format.patch
new file mode 100644
index 0000000..c573db8
--- /dev/null
+++ b/www-client/chromium/files/chromium-84-blink-disable-clang-format.patch
@@ -0,0 +1,33 @@
+From 08ac7188f414218ac9d764e29e7aa64a6bfc2f96 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Sun, 31 May 2020 10:02:03 +0000
+Subject: [PATCH] disable clang-format for generated code in blink
+
+For GCC builds clang-format might be not available. Additionally,
+current scripts look for clang-format within chromium sources and
+don't consider system clang-format.
+---
+ .../bindings/scripts/bind_gen/codegen_utils.py | 10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
+
+diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py
+index 7021f1a..33bf5bf 100644
+--- a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py
++++ b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py
+@@ -150,12 +150,4 @@ def write_code_node_to_file(code_node, filepath):
+
+ rendered_text = render_code_node(code_node)
+
+- format_result = style_format.auto_format(rendered_text, filename=filepath)
+- if not format_result.did_succeed:
+- raise RuntimeError("Style-formatting failed: filename = {filename}\n"
+- "---- stderr ----\n"
+- "{stderr}:".format(
+- filename=format_result.filename,
+- stderr=format_result.error_message))
+-
+- web_idl.file_io.write_to_file_if_changed(filepath, format_result.contents)
++ web_idl.file_io.write_to_file_if_changed(filepath, rendered_text)
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-86-ConsumeDurationNumber-constexpr.patch b/www-client/chromium/files/chromium-86-ConsumeDurationNumber-constexpr.patch
new file mode 100644
index 0000000..b623223
--- /dev/null
+++ b/www-client/chromium/files/chromium-86-ConsumeDurationNumber-constexpr.patch
@@ -0,0 +1,32 @@
+From f64e2d2daa64749995253f8ad00679ce74abdc1b Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jdapena@igalia.com>
+Date: Wed, 19 Aug 2020 11:02:00 +0200
+Subject: [PATCH] GCC: ConsumeDurationNumber cannot be a constexpr
+
+Declaring base::ConsumeDurationNumber as constexpr is not valid, as it
+uses the BasicStringPiece::begin method, that is not constexpr.
+
+build error in GCC:
+../../base/time/time.cc: In function ‘constexpr base::Optional<base::{anonymous}::ParsedDecimal> base::{anonymous}::ConsumeDurationNumber(base::StringPiece&)’:
+../../base/time/time.cc:67:63: error: call to non-‘constexpr’ function ‘const value_type* base::BasicStringPiece<STRING_TYPE>::begin() const [with STRING_TYPE = std::__cxx11::basic_string<char>; base::BasicStringPiece<STRING_TYPE>::const_iterator = const char*; base::BasicStringPiece<STRING_TYPE>::value_type = char]’
+ 67 | StringPiece::const_iterator orig_start = number_string.begin();
+ | ~~~~~~~~~~~~~~~~~~~^~
+
+Bug: 859294
+Change-Id: Id987d003f66052848d7083bb33abc3acfd109b73
+---
+
+diff --git a/base/time/time.cc b/base/time/time.cc
+index 1b1a830..7c47419 100644
+--- a/base/time/time.cc
++++ b/base/time/time.cc
+@@ -61,8 +61,7 @@
+ //
+ // Adapted from absl:
+ // https://cs.chromium.org/chromium/src/third_party/abseil-cpp/absl/time/duration.cc?l=807&rcl=2c22e9135f107a4319582ae52e2e3e6b201b6b7c
+-constexpr Optional<ParsedDecimal> ConsumeDurationNumber(
+- StringPiece& number_string) {
++Optional<ParsedDecimal> ConsumeDurationNumber(StringPiece& number_string) {
+ ParsedDecimal res;
+ StringPiece::const_iterator orig_start = number_string.begin();
+ // Parse contiguous digits.
diff --git a/www-client/chromium/files/chromium-86-ImageMemoryBarrierData-init.patch b/www-client/chromium/files/chromium-86-ImageMemoryBarrierData-init.patch
new file mode 100644
index 0000000..ff12a80
--- /dev/null
+++ b/www-client/chromium/files/chromium-86-ImageMemoryBarrierData-init.patch
@@ -0,0 +1,31 @@
+From 2879a6ba43b65c33e3c02432b4ae7a7462d24096 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 28 Aug 2020 07:23:29 +0000
+Subject: [PATCH] GCC: fix ImageMemoryBarrierData initialization
+
+GCC can't convert constant string to char[40]. Use const char * instead.
+Otherwise fails like this:
+
+src/libANGLE/renderer/vulkan/vk_helpers.cpp:121:1: error: could not convert
+'...' from '<brace-enclosed initializer list>' to
+'const angle::PackedEnumMap<rx::vk::ImageLayout, rx::vk::{anonymous}::ImageMemoryBarrierData>'
+---
+ third_party/angle/src/libANGLE/renderer/vulkan/vk_helpers.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/third_party/angle/src/libANGLE/renderer/vulkan/vk_helpers.cpp b/third_party/angle/src/libANGLE/renderer/vulkan/vk_helpers.cpp
+index af957d7..7fe82ae 100644
+--- a/third_party/angle/src/libANGLE/renderer/vulkan/vk_helpers.cpp
++++ b/third_party/angle/src/libANGLE/renderer/vulkan/vk_helpers.cpp
+@@ -73,7 +73,7 @@ enum BarrierType
+
+ struct ImageMemoryBarrierData
+ {
+- char name[40];
++ const char *name;
+
+ // The Vk layout corresponding to the ImageLayout key.
+ VkImageLayout layout;
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-86-compiler.patch b/www-client/chromium/files/chromium-86-compiler.patch
new file mode 100644
index 0000000..3088207
--- /dev/null
+++ b/www-client/chromium/files/chromium-86-compiler.patch
@@ -0,0 +1,159 @@
+From f4d0b0eb899005b4b8b6388e1d8bb82cc0018fc8 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Thu, 20 Aug 2020 19:12:21 +0000
+Subject: [PATCH] Disable various compiler configs
+
+---
+ build/config/compiler/BUILD.gn | 52 +++++++++++-----------------------
+ 1 file changed, 17 insertions(+), 35 deletions(-)
+
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 06c166f..fe5d340 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -254,8 +254,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -488,17 +486,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
+@@ -1575,7 +1562,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1584,10 +1571,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1596,15 +1579,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -2002,7 +1976,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -2037,7 +2012,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2077,7 +2053,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2109,7 +2086,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2134,7 +2112,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2251,7 +2230,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2346,7 +2326,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2399,7 +2380,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-86-nearby-explicit.patch b/www-client/chromium/files/chromium-86-nearby-explicit.patch
new file mode 100644
index 0000000..84709cb
--- /dev/null
+++ b/www-client/chromium/files/chromium-86-nearby-explicit.patch
@@ -0,0 +1,25 @@
+From 849e5c6b3a8746d9205102bd3df4e140cead405a Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Sat, 18 Jul 2020 15:11:13 +0000
+Subject: [PATCH] GCC: remove explicit from AtomicReference constructor
+
+---
+ .../nearby/src/cpp/platform_v2/public/atomic_reference.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/third_party/nearby/src/cpp/platform_v2/public/atomic_reference.h b/third_party/nearby/src/cpp/platform_v2/public/atomic_reference.h
+index 5742724..bbb8c01 100644
+--- a/third_party/nearby/src/cpp/platform_v2/public/atomic_reference.h
++++ b/third_party/nearby/src/cpp/platform_v2/public/atomic_reference.h
+@@ -37,7 +37,7 @@ class AtomicReference<T, std::enable_if_t<sizeof(T) <= sizeof(std::uint32_t) &&
+ final {
+ public:
+ using Platform = api::ImplementationPlatform;
+- explicit AtomicReference(T value)
++ AtomicReference(T value)
+ : impl_(Platform::CreateAtomicUint32(static_cast<std::uint32_t>(value))) {
+ }
+ ~AtomicReference() = default;
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-86-nearby-include.patch b/www-client/chromium/files/chromium-86-nearby-include.patch
new file mode 100644
index 0000000..d3f02c2
--- /dev/null
+++ b/www-client/chromium/files/chromium-86-nearby-include.patch
@@ -0,0 +1,24 @@
+From a5b2ee9dd7dfb186e26ec6c0c06c2ae1a9d27195 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Sat, 18 Jul 2020 14:15:50 +0000
+Subject: [PATCH] IWYU: memcpy is defined in cstring
+
+---
+ third_party/nearby/src/cpp/platform_v2/base/byte_array.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/third_party/nearby/src/cpp/platform_v2/base/byte_array.h b/third_party/nearby/src/cpp/platform_v2/base/byte_array.h
+index ee5d0eb..4b1d79b 100644
+--- a/third_party/nearby/src/cpp/platform_v2/base/byte_array.h
++++ b/third_party/nearby/src/cpp/platform_v2/base/byte_array.h
+@@ -17,6 +17,7 @@
+
+ #include <array>
+ #include <cstdint>
++#include <cstring>
+ #include <string>
+ #include <type_traits>
+ #include <utility>
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-87-CrossThreadPersistent-template.patch b/www-client/chromium/files/chromium-87-CrossThreadPersistent-template.patch
new file mode 100644
index 0000000..585c91f
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-CrossThreadPersistent-template.patch
@@ -0,0 +1,32 @@
+From 37070745728cd7744e12fa5110cde304ab6a048d Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jdapena@igalia.com>
+Date: Tue, 15 Sep 2020 16:55:19 +0200
+Subject: [PATCH] GCC: avoid GCC getting confused with wrong using resolution in CrossThreadPersistent
+
+In the method to assign a CrossThreadWeakPersistent<U> to a CrossThreadPersistent<T>,
+there is a call to the parent class implementation of Get. It uses Parent, that is,
+in CrossThreadPersistent<T> an alias to its parent. GCC resolves it as that, but
+that's wrong, and it should resolve to the parent of CrossThreadWeakPersistent<U>.
+
+To avoid the problem, we define in that method ParentU resolving to the right
+parent, and use a static cast to it.
+
+Bug: 819294
+Change-Id: I0152dac92d4a28eb1f1abbc56473204b62f33797
+---
+
+diff --git a/third_party/blink/renderer/platform/heap/persistent.h b/third_party/blink/renderer/platform/heap/persistent.h
+index f08f42f..32cadc0 100644
+--- a/third_party/blink/renderer/platform/heap/persistent.h
++++ b/third_party/blink/renderer/platform/heap/persistent.h
+@@ -784,7 +784,9 @@
+ CrossThreadPersistent<T>& CrossThreadPersistent<T>::operator=(
+ const CrossThreadWeakPersistent<U>& other) {
+ MutexLocker locker(ProcessHeap::CrossThreadPersistentMutex());
+- this->AssignUnsafe(other.Parent::Get());
++ using ParentU = PersistentBase<U, kWeakPersistentConfiguration,
++ kCrossThreadPersistentConfiguration>;
++ this->AssignUnsafe(static_cast<const ParentU&>(other).Get());
+ return *this;
+ }
+
diff --git a/www-client/chromium/files/chromium-87-CursorFactory-include.patch b/www-client/chromium/files/chromium-87-CursorFactory-include.patch
new file mode 100644
index 0000000..98cb9cf
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-CursorFactory-include.patch
@@ -0,0 +1,36 @@
+From c4f6e8cd34a245c3640b86a91c9694d69594d80b Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Wed, 16 Sep 2020 15:05:02 +0000
+Subject: [PATCH] IWYU: ui::CursorFactory is now required independent from
+ Ozone
+
+---
+ .../ui/views/chrome_browser_main_extra_parts_views_linux.cc | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc b/chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
+index 5a97d61..ccedd2a 100644
+--- a/chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
++++ b/chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
+@@ -7,6 +7,7 @@
+ #include "chrome/browser/themes/theme_service_aura_linux.h"
+ #include "chrome/browser/ui/browser_list.h"
+ #include "chrome/browser/ui/views/theme_profile_key.h"
++#include "ui/base/cursor/cursor_factory.h"
+ #include "ui/display/screen.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+
+@@ -15,10 +16,6 @@
+ #include "ui/gtk/gtk_ui_delegate.h"
+ #endif
+
+-#if defined(USE_OZONE)
+-#include "ui/base/cursor/cursor_factory.h"
+-#endif
+-
+ #if defined(USE_X11)
+ #include "ui/gfx/x/connection.h" // nogncheck
+ #if BUILDFLAG(USE_GTK)
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-87-SystemMemoryPressureEvaluator-namespace.patch b/www-client/chromium/files/chromium-87-SystemMemoryPressureEvaluator-namespace.patch
new file mode 100644
index 0000000..3129a75
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-SystemMemoryPressureEvaluator-namespace.patch
@@ -0,0 +1,70 @@
+From b73f096a06f4241a1459b0e02ddaa0bb4e14f7a1 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 4 Sep 2020 17:57:22 +0000
+Subject: [PATCH] GCC: fix clash in predefined macro "linux"
+
+"linux" is predefined in GCC and can't be used for namespace name.
+---
+ base/util/memory_pressure/system_memory_pressure_evaluator.cc | 2 +-
+ .../memory_pressure/system_memory_pressure_evaluator_linux.cc | 4 ++--
+ .../memory_pressure/system_memory_pressure_evaluator_linux.h | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/base/util/memory_pressure/system_memory_pressure_evaluator.cc b/base/util/memory_pressure/system_memory_pressure_evaluator.cc
+index babb4f8..4a9963b 100644
+--- a/base/util/memory_pressure/system_memory_pressure_evaluator.cc
++++ b/base/util/memory_pressure/system_memory_pressure_evaluator.cc
+@@ -46,7 +46,7 @@ SystemMemoryPressureEvaluator::CreateDefaultSystemEvaluator(
+ }
+ return evaluator;
+ #elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
+- return std::make_unique<util::linux::SystemMemoryPressureEvaluator>(
++ return std::make_unique<util::os_linux::SystemMemoryPressureEvaluator>(
+ monitor->CreateVoter());
+ #endif
+ return nullptr;
+diff --git a/base/util/memory_pressure/system_memory_pressure_evaluator_linux.cc b/base/util/memory_pressure/system_memory_pressure_evaluator_linux.cc
+index 258d983..1878d88 100644
+--- a/base/util/memory_pressure/system_memory_pressure_evaluator_linux.cc
++++ b/base/util/memory_pressure/system_memory_pressure_evaluator_linux.cc
+@@ -32,7 +32,7 @@ int GetAvailableSystemMemoryMiB(const base::SystemMemoryInfoKB& mem_info) {
+ } // namespace
+
+ namespace util {
+-namespace linux {
++namespace os_linux {
+
+ const base::TimeDelta SystemMemoryPressureEvaluator::kModeratePressureCooldown =
+ base::TimeDelta::FromSeconds(10);
+@@ -153,5 +153,5 @@ SystemMemoryPressureEvaluator::CalculateCurrentPressureLevel() {
+ return base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE;
+ }
+
+-} // namespace linux
++} // namespace os_linux
+ } // namespace util
+diff --git a/base/util/memory_pressure/system_memory_pressure_evaluator_linux.h b/base/util/memory_pressure/system_memory_pressure_evaluator_linux.h
+index 0f5c43d..3a24427 100644
+--- a/base/util/memory_pressure/system_memory_pressure_evaluator_linux.h
++++ b/base/util/memory_pressure/system_memory_pressure_evaluator_linux.h
+@@ -13,7 +13,7 @@
+ #include "base/util/memory_pressure/system_memory_pressure_evaluator.h"
+
+ namespace util {
+-namespace linux {
++namespace os_linux {
+
+ // Linux memory pressure voter. Because there is no OS provided signal this
+ // polls at a low frequency, and applies internal hysteresis.
+@@ -106,7 +106,7 @@ class SystemMemoryPressureEvaluator
+ SEQUENCE_CHECKER(sequence_checker_);
+ };
+
+-} // namespace linux
++} // namespace os_linux
+ } // namespace util
+
+ #endif // BASE_UTIL_MEMORY_PRESSURE_SYSTEM_MEMORY_PRESSURE_EVALUATOR_LINUX_H_
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-87-Thumbnail-noexcept.patch b/www-client/chromium/files/chromium-87-Thumbnail-noexcept.patch
new file mode 100644
index 0000000..76c3d43
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-Thumbnail-noexcept.patch
@@ -0,0 +1,46 @@
+From 92db841a0d8449b46ce9d9e76bb4a23e5b370f9c Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 11 Sep 2020 07:07:00 +0000
+Subject: [PATCH] GCC: remove noexcept from PDF Thumbnail
+
+Move constructor/operator can't be noexcept, because of SkBitmap
+member has no noexcept move constructor/operator.
+---
+ pdf/thumbnail.cc | 4 ++--
+ pdf/thumbnail.h | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/pdf/thumbnail.cc b/pdf/thumbnail.cc
+index d46b20b..82f4790 100644
+--- a/pdf/thumbnail.cc
++++ b/pdf/thumbnail.cc
+@@ -113,9 +113,9 @@ Thumbnail::Thumbnail(const gfx::Size& page_size, float device_pixel_ratio) {
+ DCHECK(success);
+ }
+
+-Thumbnail::Thumbnail(Thumbnail&& other) noexcept = default;
++Thumbnail::Thumbnail(Thumbnail&& other) = default;
+
+-Thumbnail& Thumbnail::operator=(Thumbnail&& other) noexcept = default;
++Thumbnail& Thumbnail::operator=(Thumbnail&& other) = default;
+
+ Thumbnail::~Thumbnail() = default;
+
+diff --git a/pdf/thumbnail.h b/pdf/thumbnail.h
+index 4b2bdef..d62a56a 100644
+--- a/pdf/thumbnail.h
++++ b/pdf/thumbnail.h
+@@ -17,8 +17,8 @@ class Thumbnail final {
+ public:
+ Thumbnail();
+ Thumbnail(const gfx::Size& page_size, float device_pixel_ratio);
+- Thumbnail(Thumbnail&& other) noexcept;
+- Thumbnail& operator=(Thumbnail&& other) noexcept;
++ Thumbnail(Thumbnail&& other);
++ Thumbnail& operator=(Thumbnail&& other);
+ ~Thumbnail();
+
+ SkBitmap& bitmap() { return bitmap_; }
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-87-anonymous-struct.patch b/www-client/chromium/files/chromium-87-anonymous-struct.patch
new file mode 100644
index 0000000..7d7c356
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-anonymous-struct.patch
@@ -0,0 +1,61 @@
+From 9f2b2a3a6153be7ae5cef3305161c07fa2f6f70c Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jdapena@igalia.com>
+Date: Tue, 15 Sep 2020 18:58:11 +0000
+Subject: [PATCH] GCC: do not use anonymous structs
+
+Two using declarations have been added in x11.h for an
+unnamed struct. This is not allowed by C++ (and GCC). An example:
+using XErrorEvent = struct {
+ ...
+};
+
+The solution is giving a name to the struct.
+
+Bug: 819294
+Change-Id: I9e77017851efe8e0a92fb37c01fdba693bb7a36d
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2412450
+Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
+Commit-Queue: José Dapena Paz <jdapena@igalia.com>
+Cr-Commit-Position: refs/heads/master@{#807126}
+---
+
+diff --git a/ui/gfx/x/x11.h b/ui/gfx/x/x11.h
+index 6b36d48..d2dab40 100644
+--- a/ui/gfx/x/x11.h
++++ b/ui/gfx/x/x11.h
+@@ -139,7 +139,7 @@
+
+ enum XEventQueueOwner { XlibOwnsEventQueue = 0, XCBOwnsEventQueue };
+
+-using XErrorEvent = struct {
++using XErrorEvent = struct _XErrorEvent {
+ int type;
+ Display* display;
+ XID resourceid;
+@@ -149,7 +149,7 @@
+ unsigned char minor_code;
+ };
+
+-using XRectangle = struct {
++using XRectangle = struct _XRectangle {
+ short x, y;
+ unsigned short width, height;
+ };
+@@ -161,7 +161,7 @@
+ XPointer private_data;
+ };
+
+-using Visual = struct {
++using Visual = struct _Visual {
+ XExtData* ext_data;
+ VisualID visualid;
+ int c_class;
+@@ -170,7 +170,7 @@
+ int map_entries;
+ };
+
+-using XVisualInfo = struct {
++using XVisualInfo = struct _XVisualInfo {
+ Visual* visual;
+ VisualID visualid;
+ int screen;
diff --git a/www-client/chromium/files/chromium-87-compiler-r1.patch b/www-client/chromium/files/chromium-87-compiler-r1.patch
new file mode 100644
index 0000000..181e724
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-compiler-r1.patch
@@ -0,0 +1,166 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 4f6461b6b..b5d2c7700 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -254,8 +254,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -480,36 +478,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+-
+- # Pinned clang has enable-dse-memoryssa enabled by default but it's broken,
+- # so we have to force it off.
+- # Trunk clang has it disabled by default but it might work, so we force it
+- # on so the ToT bots can check if it works now.
+- if (!llvm_force_head_revision) {
+- cflags += [
+- # TODO(https://crbug.com/1127713): Investigate, remove.
+- "-mllvm",
+- "-enable-dse-memoryssa=false",
+- ]
+- }
+- if (llvm_force_head_revision) {
+- cflags += [
+- # TODO(https://crbug.com/1127713): Investigate, remove.
+- "-mllvm",
+- "-enable-dse-memoryssa=true",
+- ]
+- }
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
+@@ -1571,7 +1539,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1580,10 +1548,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1592,15 +1556,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1998,7 +1953,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -2033,7 +1989,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2073,7 +2030,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2105,7 +2063,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2130,7 +2089,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2247,7 +2207,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2355,7 +2316,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2408,7 +2370,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-87-openscreen-crypto-include.patch b/www-client/chromium/files/chromium-87-openscreen-crypto-include.patch
new file mode 100644
index 0000000..5edd10b
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-openscreen-crypto-include.patch
@@ -0,0 +1,11 @@
+--- a/third_party/openscreen/src/util/crypto/random_bytes.h 2020-10-03 07:37:39.335192533 +0800
++++ b/third_party/openscreen/src/util/crypto/random_bytes.h 2020-10-03 07:37:29.548124971 +0800
+@@ -5,6 +5,8 @@
+ #ifndef UTIL_CRYPTO_RANDOM_BYTES_H_
+ #define UTIL_CRYPTO_RANDOM_BYTES_H_
+
++#include <stdint.h>
++
+ #include <array>
+
+ namespace openscreen {
diff --git a/www-client/chromium/files/chromium-87-ozone-deps.patch b/www-client/chromium/files/chromium-87-ozone-deps.patch
new file mode 100644
index 0000000..c9bac08
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-ozone-deps.patch
@@ -0,0 +1,15 @@
+diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
+index 51b25f1a8..56dfeb165 100644
+--- a/chrome/browser/BUILD.gn
++++ b/chrome/browser/BUILD.gn
+@@ -5073,7 +5073,9 @@ static_library("browser") {
+ "chrome_browser_main_extra_parts_ozone.cc",
+ "chrome_browser_main_extra_parts_ozone.h",
+ ]
+- deps += [ "//ui/ozone" ]
++ if (use_ozone) {
++ deps += [ "//ui/ozone" ]
++ }
+ }
+
+ if (enable_background_mode) {
diff --git a/www-client/chromium/files/chromium-87-remotesyscall.patch b/www-client/chromium/files/chromium-87-remotesyscall.patch
new file mode 100644
index 0000000..63d1cf9
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-remotesyscall.patch
@@ -0,0 +1,13 @@
+diff --git a/sandbox/linux/syscall_broker/remote_syscall_arg_handler.cc b/sandbox/linux/syscall_broker/remote_syscall_arg_handler.cc
+index 33ff80225..d503a86e0 100644
+--- a/sandbox/linux/syscall_broker/remote_syscall_arg_handler.cc
++++ b/sandbox/linux/syscall_broker/remote_syscall_arg_handler.cc
+@@ -4,6 +4,8 @@
+
+ #include "sandbox/linux/syscall_broker/remote_syscall_arg_handler.h"
+
++#include <string.h>
++
+ #include <sys/ioctl.h>
+ #include <sys/syscall.h>
+ #include <sys/types.h>
diff --git a/www-client/chromium/files/chromium-87-std-max_align_t.patch b/www-client/chromium/files/chromium-87-std-max_align_t.patch
new file mode 100644
index 0000000..e37d0fb
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-std-max_align_t.patch
@@ -0,0 +1,43 @@
+From 1e0683735e26c6fcecb0977e0cdae5da2eaf7c84 Mon Sep 17 00:00:00 2001
+From: Jose Dapena Paz <jdapena@igalia.com>
+Date: Tue, 22 Sep 2020 13:18:55 +0200
+Subject: [PATCH] libstdc++: use max_align_t without std prefix in partition alloc constants.
+
+Using std::max_align_t would require using cstddef instead of stddef.h. As
+partition alloc constants is including stddef.h, let's remove the std::
+namespace prefix.
+
+This fixes this error building with libstdc++
+../../base/allocator/partition_allocator/partition_alloc_constants.h:200:51: error: ‘max_align_t’ is not a member of ‘std’; did you mean ‘max_align_t’?
+
+Bug: 957519
+Change-Id: I72b22428937e7b7b1e6bb31fb0ac0bef3b72c581
+
+(Adjusted to work with clang too)
+---
+
+diff --git a/base/allocator/partition_allocator/partition_alloc_constants.h b/base/allocator/partition_allocator/partition_alloc_constants.h
+index 0c74dbe..ef1488f 100644
+--- a/base/allocator/partition_allocator/partition_alloc_constants.h
++++ b/base/allocator/partition_allocator/partition_alloc_constants.h
+@@ -183,7 +183,7 @@ NumPartitionPagesPerSuperPage() {
+ }
+
+ // Alignment has two constraints:
+-// - Alignment requirement for scalar types: alignof(std::max_align_t)
++// - Alignment requirement for scalar types: alignof(max_align_t)
+ // - Alignment requirement for operator new().
+ //
+ // The two are separate on Windows 64 bits, where the first one is 8 bytes, and
+@@ -195,9 +195,9 @@ NumPartitionPagesPerSuperPage() {
+ // platforms, as Chrome's requirement is C++14 as of 2020.
+ #if defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__)
+ static constexpr size_t kAlignment =
+- std::max(alignof(std::max_align_t), __STDCPP_DEFAULT_NEW_ALIGNMENT__);
++ std::max(alignof(max_align_t), __STDCPP_DEFAULT_NEW_ALIGNMENT__);
+ #else
+-static constexpr size_t kAlignment = alignof(std::max_align_t);
++static constexpr size_t kAlignment = alignof(max_align_t);
+ #endif
+ static_assert(kAlignment <= 16,
+ "PartitionAlloc doesn't support a fundamental alignment larger "
diff --git a/www-client/chromium/files/chromium-87-thread_cache.patch b/www-client/chromium/files/chromium-87-thread_cache.patch
new file mode 100644
index 0000000..b2ef990
--- /dev/null
+++ b/www-client/chromium/files/chromium-87-thread_cache.patch
@@ -0,0 +1,25 @@
+diff --git a/base/allocator/partition_allocator/partition_alloc.h b/base/allocator/partition_allocator/partition_alloc.h
+index 549451e2d..17b7deab3 100644
+--- a/base/allocator/partition_allocator/partition_alloc.h
++++ b/base/allocator/partition_allocator/partition_alloc.h
+@@ -582,7 +582,7 @@ struct BASE_EXPORT PartitionRoot {
+ EXCLUSIVE_LOCKS_REQUIRED(lock_);
+ void DecommitEmptyPages() EXCLUSIVE_LOCKS_REQUIRED(lock_);
+
+- friend class internal::ThreadCache;
++ friend class base::internal::ThreadCache;
+ };
+
+ static_assert(sizeof(PartitionRoot<internal::ThreadSafe>) ==
+diff --git a/base/allocator/partition_allocator/thread_cache.h b/base/allocator/partition_allocator/thread_cache.h
+index dd71ccc09..05097470a 100644
+--- a/base/allocator/partition_allocator/thread_cache.h
++++ b/base/allocator/partition_allocator/thread_cache.h
+@@ -5,6 +5,7 @@
+ #ifndef BASE_ALLOCATOR_PARTITION_ALLOCATOR_THREAD_CACHE_H_
+ #define BASE_ALLOCATOR_PARTITION_ALLOCATOR_THREAD_CACHE_H_
+
++#include <atomic>
+ #include <cstdint>
+ #include <memory>
+
diff --git a/www-client/chromium/files/chromium-88-angle-renderer.patch b/www-client/chromium/files/chromium-88-angle-renderer.patch
new file mode 100644
index 0000000..257c00c
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-angle-renderer.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/angle/src/libANGLE/renderer/EGLReusableSync.h b/third_party/angle/src/libANGLE/renderer/EGLReusableSync.h
+index 9c65fccad..12c972565 100644
+--- a/third_party/angle/src/libANGLE/renderer/EGLReusableSync.h
++++ b/third_party/angle/src/libANGLE/renderer/EGLReusableSync.h
+@@ -14,6 +14,8 @@
+
+ #include "common/angleutils.h"
+
++#include <condition_variable>
++
+ namespace rx
+ {
+
diff --git a/www-client/chromium/files/chromium-88-compiler.patch b/www-client/chromium/files/chromium-88-compiler.patch
new file mode 100644
index 0000000..cb72cf2
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-compiler.patch
@@ -0,0 +1,147 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 9d66490cd..4e79a84f8 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -254,8 +254,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -478,17 +476,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
+@@ -1574,7 +1561,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = [ ]
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1583,10 +1570,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1595,15 +1578,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -2006,7 +1980,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -2041,7 +2016,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2081,7 +2057,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2113,7 +2090,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2138,7 +2116,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2267,7 +2246,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2365,7 +2345,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2418,7 +2399,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-88-compositor-dcheck.patch b/www-client/chromium/files/chromium-88-compositor-dcheck.patch
new file mode 100644
index 0000000..ef51614
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-compositor-dcheck.patch
@@ -0,0 +1,13 @@
+diff --git a/cc/metrics/compositor_frame_reporter.cc b/cc/metrics/compositor_frame_reporter.cc
+index 93d0e2352..7ca5e379c 100644
+--- a/cc/metrics/compositor_frame_reporter.cc
++++ b/cc/metrics/compositor_frame_reporter.cc
+@@ -671,7 +671,7 @@ void CompositorFrameReporter::ReportCompositorLatencyHistogram(
+
+ void CompositorFrameReporter::ReportEventLatencyHistograms() const {
+ for (const auto& event_metrics : events_metrics_) {
+- DCHECK_NE(event_metrics, nullptr);
++ DCHECK_NE(event_metrics.get(), nullptr);
+ const std::string histogram_base_name =
+ GetEventLatencyHistogramBaseName(*event_metrics);
+ const int event_type_index = static_cast<int>(event_metrics->type());
diff --git a/www-client/chromium/files/chromium-88-dawn-include.patch b/www-client/chromium/files/chromium-88-dawn-include.patch
new file mode 100644
index 0000000..3b01546
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-dawn-include.patch
@@ -0,0 +1,12 @@
+diff --git a/third_party/dawn/src/dawn_wire/ChunkedCommandSerializer.h b/third_party/dawn/src/dawn_wire/ChunkedCommandSerializer.h
+index cef4ebba4..db28b87e2 100644
+--- a/third_party/dawn/src/dawn_wire/ChunkedCommandSerializer.h
++++ b/third_party/dawn/src/dawn_wire/ChunkedCommandSerializer.h
+@@ -21,6 +21,7 @@
+
+ #include <algorithm>
+ #include <cstring>
++#include <memory>
+
+ namespace dawn_wire {
+
diff --git a/www-client/chromium/files/chromium-88-dawn-size_t-std.patch b/www-client/chromium/files/chromium-88-dawn-size_t-std.patch
new file mode 100644
index 0000000..f6392e9
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-dawn-size_t-std.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/dawn/src/common/ityp_array.h b/third_party/dawn/src/common/ityp_array.h
+index 48e080fa5..d70d9e2da 100644
+--- a/third_party/dawn/src/common/ityp_array.h
++++ b/third_party/dawn/src/common/ityp_array.h
+@@ -27,7 +27,7 @@ namespace ityp {
+ // indices must be a particular type |Index|. Dawn uses multiple flat maps of
+ // index-->data, and this class helps ensure an indices cannot be passed interchangably
+ // to a flat map of a different type.
+- template <typename Index, typename Value, size_t Size>
++ template <typename Index, typename Value, std::size_t Size>
+ class array : private std::array<Value, Size> {
+ using I = UnderlyingType<Index>;
+ using Base = std::array<Value, Size>;
diff --git a/www-client/chromium/files/chromium-88-gpu-internals-ozone.patch b/www-client/chromium/files/chromium-88-gpu-internals-ozone.patch
new file mode 100644
index 0000000..c74e72b
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-gpu-internals-ozone.patch
@@ -0,0 +1,21 @@
+diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc
+index ce9359413..472d42913 100644
+--- a/content/browser/gpu/gpu_internals_ui.cc
++++ b/content/browser/gpu/gpu_internals_ui.cc
+@@ -69,6 +69,7 @@
+
+ #if defined(USE_OZONE)
+ #include "ui/base/ui_base_features.h"
++#include "ui/ozone/public/ozone_platform.h"
+ #endif
+
+ namespace content {
+@@ -393,7 +394,7 @@ std::unique_ptr<base::ListValue> GpuMemoryBufferInfo(
+ gpu::GpuMemoryBufferSupport gpu_memory_buffer_support;
+
+ gpu::GpuMemoryBufferConfigurationSet native_config;
+-#if defined(USE_X11)
++#if defined(USE_X11) && defined(USE_OZONE)
+ if (!features::IsUsingOzonePlatform()) {
+ for (const auto& config : gpu_extra_info.gpu_memory_buffer_support_x11) {
+ native_config.emplace(config);
diff --git a/www-client/chromium/files/chromium-88-mediasource-uniqptrostream.patch b/www-client/chromium/files/chromium-88-mediasource-uniqptrostream.patch
new file mode 100644
index 0000000..908a993
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-mediasource-uniqptrostream.patch
@@ -0,0 +1,22 @@
+diff --git a/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.cc b/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.cc
+index 4caa0753b..9efe53057 100644
+--- a/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.cc
++++ b/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.cc
+@@ -575,7 +575,7 @@ void CrossThreadMediaSourceAttachment::CompleteAttachingToMediaElement(
+ MediaSourceTracer* /* tracer */,
+ std::unique_ptr<WebMediaSource> web_media_source) {
+ DVLOG(1) << __func__ << " this=" << this
+- << ", web_media_source=" << web_media_source;
++ << ", web_media_source=" << web_media_source.get();
+ DCHECK(web_media_source);
+
+ {
+@@ -618,7 +618,7 @@ void CrossThreadMediaSourceAttachment::
+ DCHECK(worker_runner_->BelongsToCurrentThread());
+
+ DVLOG(1) << __func__ << " this=" << this
+- << ", web_media_source=" << web_media_source;
++ << ", web_media_source=" << web_media_source.get();
+
+ // While awaiting task scheduling, the media element could have begun
+ // detachment or main context could have been destroyed. Return early in
diff --git a/www-client/chromium/files/chromium-88-pcscan-nonfinal.patch b/www-client/chromium/files/chromium-88-pcscan-nonfinal.patch
new file mode 100644
index 0000000..ea7f31f
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-pcscan-nonfinal.patch
@@ -0,0 +1,13 @@
+diff --git a/base/allocator/partition_allocator/pcscan.cc b/base/allocator/partition_allocator/pcscan.cc
+index 5cc93dbbd..69aaa0934 100644
+--- a/base/allocator/partition_allocator/pcscan.cc
++++ b/base/allocator/partition_allocator/pcscan.cc
+@@ -41,7 +41,7 @@ ThreadSafePartitionRoot& PCScanMetadataAllocator() {
+ // STL allocator which is needed to keep internal data structures required by
+ // PCScan.
+ template <typename T>
+-class MetadataAllocator final {
++class MetadataAllocator {
+ public:
+ using value_type = T;
+
diff --git a/www-client/chromium/files/chromium-88-service-worker-registration-crash.patch b/www-client/chromium/files/chromium-88-service-worker-registration-crash.patch
new file mode 100644
index 0000000..e543fca
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-service-worker-registration-crash.patch
@@ -0,0 +1,14 @@
+diff --git a/content/browser/service_worker/service_worker_container_host.cc b/content/browser/service_worker/service_worker_container_host.cc
+index 5cb7b2da2..fa11602ed 100644
+--- a/content/browser/service_worker/service_worker_container_host.cc
++++ b/content/browser/service_worker/service_worker_container_host.cc
+@@ -626,6 +626,9 @@ void ServiceWorkerContainerHost::RemoveServiceWorkerRegistrationObjectHost(
+ int64_t registration_id) {
+ DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
+ DCHECK(base::Contains(registration_object_hosts_, registration_id));
++ std::unique_ptr<ServiceWorkerRegistrationObjectHost> to_be_deleted =
++ std::move(registration_object_hosts_[registration_id]);
++ DCHECK(to_be_deleted);
+ registration_object_hosts_.erase(registration_id);
+ }
+
diff --git a/www-client/chromium/files/chromium-88-system-icu.patch b/www-client/chromium/files/chromium-88-system-icu.patch
new file mode 100644
index 0000000..968143e
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-system-icu.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc b/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc
+index fb8ab0530..5d4ea13e7 100644
+--- a/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc
++++ b/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc
+@@ -432,7 +432,7 @@ String TextCodecICU::Decode(const char* bytes,
+ // ICU decodes it as U+E5E5.
+ if (!strcmp(encoding_.GetName(), "GBK")) {
+ if (EqualIgnoringASCIICase(encoding_.GetName(), "gb18030"))
+- resultString.Replace(0xE5E5, ideographicSpaceCharacter);
++ resultString.Replace(0xE5E5, kIdeographicSpaceCharacter);
+ // Make GBK compliant to the encoding spec and align with GB18030
+ resultString.Replace(0x01F9, 0xE7C8);
+ // FIXME: Once https://www.w3.org/Bugs/Public/show_bug.cgi?id=28740#c3
diff --git a/www-client/chromium/files/chromium-88-tree-formatter-include.patch b/www-client/chromium/files/chromium-88-tree-formatter-include.patch
new file mode 100644
index 0000000..71258c5
--- /dev/null
+++ b/www-client/chromium/files/chromium-88-tree-formatter-include.patch
@@ -0,0 +1,14 @@
+diff --git a/ui/accessibility/platform/inspect/tree_formatter.h b/ui/accessibility/platform/inspect/tree_formatter.h
+index 4a70a4d54..532da613a 100644
+--- a/ui/accessibility/platform/inspect/tree_formatter.h
++++ b/ui/accessibility/platform/inspect/tree_formatter.h
+@@ -5,6 +5,9 @@
+ #ifndef UI_ACCESSIBILITY_PLATFORM_INSPECT_TREE_FORMATTER_H_
+ #define UI_ACCESSIBILITY_PLATFORM_INSPECT_TREE_FORMATTER_H_
+
++#include <vector>
++#include <memory>
++
+ #include "ui/accessibility/platform/inspect/inspect.h"
+
+ #include "ui/gfx/native_widget_types.h"
diff --git a/www-client/chromium/files/chromium-89-CursorFactory-include.patch b/www-client/chromium/files/chromium-89-CursorFactory-include.patch
new file mode 100644
index 0000000..dfce7bc
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-CursorFactory-include.patch
@@ -0,0 +1,20 @@
+diff --git a/chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc b/chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
+index d69bec5b8..0f9a87571 100644
+--- a/chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
++++ b/chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.cc
+@@ -8,6 +8,7 @@
+ #include "chrome/browser/ui/browser_list.h"
+ #include "chrome/browser/ui/views/theme_profile_key.h"
+ #include "ui/base/ime/linux/fake_input_method_context_factory.h"
++#include "ui/base/cursor/cursor_factory.h"
+ #include "ui/display/screen.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+
+@@ -17,7 +18,6 @@
+ #endif
+
+ #if defined(USE_OZONE)
+-#include "ui/base/cursor/cursor_factory.h"
+ #include "ui/base/ime/input_method.h"
+ #include "ui/base/ui_base_features.h"
+ #include "ui/ozone/public/ozone_platform.h"
diff --git a/www-client/chromium/files/chromium-89-EnumTable-crash.patch b/www-client/chromium/files/chromium-89-EnumTable-crash.patch
new file mode 100644
index 0000000..89a5070
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-EnumTable-crash.patch
@@ -0,0 +1,71 @@
+diff --git a/components/cast_channel/enum_table.h b/components/cast_channel/enum_table.h
+index e3130c7..2ad16ea 100644
+--- a/components/cast_channel/enum_table.h
++++ b/components/cast_channel/enum_table.h
+@@ -212,7 +212,7 @@ class
+
+ template <typename E>
+ friend class EnumTable;
+- DISALLOW_COPY_AND_ASSIGN(GenericEnumTableEntry);
++ DISALLOW_ASSIGN(GenericEnumTableEntry);
+ };
+
+ // Yes, these constructors really needs to be inlined. Even though they look
+@@ -250,8 +250,7 @@ class EnumTable {
+ // Constructor for regular entries.
+ constexpr Entry(E value, base::StringPiece str)
+ : GenericEnumTableEntry(static_cast<int32_t>(value), str) {}
+-
+- DISALLOW_COPY_AND_ASSIGN(Entry);
++ DISALLOW_ASSIGN(Entry);
+ };
+
+ static_assert(sizeof(E) <= sizeof(int32_t),
+@@ -306,15 +305,14 @@ class EnumTable {
+ if (is_sorted_) {
+ const std::size_t index = static_cast<std::size_t>(value);
+ if (ANALYZER_ASSUME_TRUE(index < data_.size())) {
+- const auto& entry = data_.begin()[index];
++ const auto& entry = data_[index];
+ if (ANALYZER_ASSUME_TRUE(entry.has_str()))
+ return entry.str();
+ }
+ return base::nullopt;
+ }
+ return GenericEnumTableEntry::FindByValue(
+- reinterpret_cast<const GenericEnumTableEntry*>(data_.begin()),
+- data_.size(), static_cast<int32_t>(value));
++ &data_[0], data_.size(), static_cast<int32_t>(value));
+ }
+
+ // This overload of GetString is designed for cases where the argument is a
+@@ -342,8 +340,7 @@ class EnumTable {
+ // enum value directly.
+ base::Optional<E> GetEnum(base::StringPiece str) const {
+ auto* entry = GenericEnumTableEntry::FindByString(
+- reinterpret_cast<const GenericEnumTableEntry*>(data_.begin()),
+- data_.size(), str);
++ &data_[0], data_.size(), str);
+ return entry ? static_cast<E>(entry->value) : base::Optional<E>();
+ }
+
+@@ -358,7 +355,7 @@ class EnumTable {
+ // Align the data on a cache line boundary.
+ alignas(64)
+ #endif
+- std::initializer_list<Entry> data_;
++ const std::vector<Entry> data_;
+ bool is_sorted_;
+
+ constexpr EnumTable(std::initializer_list<Entry> data, bool is_sorted)
+@@ -370,8 +367,8 @@ class EnumTable {
+
+ for (std::size_t i = 0; i < data.size(); i++) {
+ for (std::size_t j = i + 1; j < data.size(); j++) {
+- const Entry& ei = data.begin()[i];
+- const Entry& ej = data.begin()[j];
++ const Entry& ei = data[i];
++ const Entry& ej = data[j];
+ DCHECK(ei.value != ej.value)
+ << "Found duplicate enum values at indices " << i << " and " << j;
+ DCHECK(!(ei.has_str() && ej.has_str() && ei.str() == ej.str()))
diff --git a/www-client/chromium/files/chromium-89-angle-display.patch b/www-client/chromium/files/chromium-89-angle-display.patch
new file mode 100644
index 0000000..d467ce9
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-angle-display.patch
@@ -0,0 +1,1747 @@
+diff --git a/third_party/angle/scripts/code_generation_hashes/GL_EGL_entry_points.json b/third_party/angle/scripts/code_generation_hashes/GL_EGL_entry_points.json
+index c506d31fb..df8758d30 100644
+--- a/third_party/angle/scripts/code_generation_hashes/GL_EGL_entry_points.json
++++ b/third_party/angle/scripts/code_generation_hashes/GL_EGL_entry_points.json
+@@ -8,7 +8,7 @@
+ "scripts/entry_point_packed_gl_enums.json":
+ "846be5dc8cb36076207699b025633fcc",
+ "scripts/generate_entry_points.py":
+- "95fc7635243122e679e82e1757816ab3",
++ "d15fcd0f5e3296787753ff507f7051d9",
+ "scripts/gl.xml":
+ "f66967f3f3d696b5d8306fd80bbd49a8",
+ "scripts/gl_angle_ext.xml":
+@@ -102,7 +102,7 @@
+ "src/libANGLE/frame_capture_utils_autogen.h":
+ "652b821a877d6eb2c62ba8d151157eea",
+ "src/libANGLE/validationEGL_autogen.h":
+- "b3c0eae46748da68d6833cc40e4bb486",
++ "3927fa260ad183fd9193d65b3f8d82c5",
+ "src/libANGLE/validationES1_autogen.h":
+ "c8edb0a5b26303bf7c4692b9d0b05c1f",
+ "src/libANGLE/validationES2_autogen.h":
+@@ -238,17 +238,17 @@
+ "src/libGL/libGL_autogen.def":
+ "2789d87b05eea9f53d52e2aff499b785",
+ "src/libGLESv2/egl_ext_stubs_autogen.h":
+- "03de6401c1695f8ca4acbde9c3ae1ba2",
++ "aeb007419aaab7b5e52b084d83dda77c",
+ "src/libGLESv2/egl_get_labeled_object_data.json":
+ "2f4148b2ddf34e62670e32c5e6da4937",
+ "src/libGLESv2/egl_stubs_autogen.h":
+- "1c9d160acb1ed9bf5e7c26918d4a039e",
++ "6439daa350c1663e71dd0af37dcc91df",
+ "src/libGLESv2/entry_points_egl_autogen.cpp":
+- "9fd1b2d1e0dbab804e854e33e5bc9ef2",
++ "ba9796b20452dbbe4180480aae02b8a3",
+ "src/libGLESv2/entry_points_egl_autogen.h":
+ "3bc7a8df9deadd7cfd615d0cfad0c6a8",
+ "src/libGLESv2/entry_points_egl_ext_autogen.cpp":
+- "f52756d7a31ce136ea04a67e0ea1b447",
++ "5397ab40e9cbe1d7aa3faf91154a837a",
+ "src/libGLESv2/entry_points_egl_ext_autogen.h":
+ "9154781afd9bd6354ec6fc201b43c790",
+ "src/libGLESv2/entry_points_gles_1_0_autogen.cpp":
+@@ -283,4 +283,4 @@
+ "f93450c1f787f3da53f2525865568989",
+ "src/libGLESv2/libGLESv2_with_capture_autogen.def":
+ "7b78ab59dd1fe360a5d3c1f513c7ce55"
+-}
+\ No newline at end of file
++}
+diff --git a/third_party/angle/scripts/generate_entry_points.py b/third_party/angle/scripts/generate_entry_points.py
+index de26a60ad..0e99f6bf2 100755
+--- a/third_party/angle/scripts/generate_entry_points.py
++++ b/third_party/angle/scripts/generate_entry_points.py
+@@ -1010,7 +1010,8 @@ EGL_PACKED_TYPES = {
+ "EGLContext": "gl::Context *",
+ "EGLConfig": "Config *",
+ "EGLDeviceEXT": "Device *",
+- "EGLDisplay": "Display *",
++ # Needs an explicit namespace to avoid an X11 namespace collision.
++ "EGLDisplay": "egl::Display *",
+ "EGLImage": "Image *",
+ "EGLImageKHR": "Image *",
+ "EGLStreamKHR": "Stream *",
+@@ -2085,7 +2086,7 @@ def get_egl_entry_point_labeled_object(ep_to_object, cmd_stripped, params, packe
+ return just_the_name_packed(param, packed_enums)
+ return None
+
+- display_param = find_param(params, "Display", packed_enums)
++ display_param = find_param(params, "egl::Display", packed_enums)
+
+ # For entry points not listed in the JSON file, they default to an EGLDisplay or nothing.
+ if cmd_stripped not in ep_to_object:
+diff --git a/third_party/angle/src/libANGLE/validationEGL_autogen.h b/third_party/angle/src/libANGLE/validationEGL_autogen.h
+index aa43ab156..869bd86e5 100644
+--- a/third_party/angle/src/libANGLE/validationEGL_autogen.h
++++ b/third_party/angle/src/libANGLE/validationEGL_autogen.h
+@@ -18,47 +18,47 @@ namespace egl
+
+ // EGL 1.0
+ bool ValidateChooseConfig(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const AttributeMap &attrib_listPacked,
+ const EGLConfig *configs,
+ EGLint config_size,
+ const EGLint *num_config);
+ bool ValidateCopyBuffers(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLNativePixmapType target);
+ bool ValidateCreateContext(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ const gl::Context *share_contextPacked,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateCreatePbufferSurface(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateCreatePixmapSurface(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ EGLNativePixmapType pixmap,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateCreateWindowSurface(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ EGLNativeWindowType win,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateDestroyContext(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const gl::Context *ctxPacked);
+ bool ValidateDestroySurface(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked);
+ bool ValidateGetConfigAttrib(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ EGLint attribute,
+ const EGLint *value);
+ bool ValidateGetConfigs(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const EGLConfig *configs,
+ EGLint config_size,
+ const EGLint *num_config);
+@@ -68,52 +68,54 @@ bool ValidateGetDisplay(const ValidationContext *val, EGLNativeDisplayType displ
+ bool ValidateGetError(const ValidationContext *val);
+ bool ValidateGetProcAddress(const ValidationContext *val, const char *procname);
+ bool ValidateInitialize(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const EGLint *major,
+ const EGLint *minor);
+ bool ValidateMakeCurrent(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *drawPacked,
+ const Surface *readPacked,
+ const gl::Context *ctxPacked);
+ bool ValidateQueryContext(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const gl::Context *ctxPacked,
+ EGLint attribute,
+ const EGLint *value);
+-bool ValidateQueryString(const ValidationContext *val, const Display *dpyPacked, EGLint name);
++bool ValidateQueryString(const ValidationContext *val, const egl::Display *dpyPacked, EGLint name);
+ bool ValidateQuerySurface(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLint attribute,
+ const EGLint *value);
+ bool ValidateSwapBuffers(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked);
+-bool ValidateTerminate(const ValidationContext *val, const Display *dpyPacked);
++bool ValidateTerminate(const ValidationContext *val, const egl::Display *dpyPacked);
+ bool ValidateWaitGL(const ValidationContext *val);
+ bool ValidateWaitNative(const ValidationContext *val, EGLint engine);
+
+ // EGL 1.1
+ bool ValidateBindTexImage(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLint buffer);
+ bool ValidateReleaseTexImage(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLint buffer);
+ bool ValidateSurfaceAttrib(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLint attribute,
+ EGLint value);
+-bool ValidateSwapInterval(const ValidationContext *val, const Display *dpyPacked, EGLint interval);
++bool ValidateSwapInterval(const ValidationContext *val,
++ const egl::Display *dpyPacked,
++ EGLint interval);
+
+ // EGL 1.2
+ bool ValidateBindAPI(const ValidationContext *val, EGLenum api);
+ bool ValidateCreatePbufferFromClientBuffer(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLenum buftype,
+ EGLClientBuffer buffer,
+ const Config *configPacked,
+@@ -127,53 +129,53 @@ bool ValidateGetCurrentContext(const ValidationContext *val);
+
+ // EGL 1.5
+ bool ValidateClientWaitSync(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked,
+ EGLint flags,
+ EGLTime timeout);
+ bool ValidateCreateImage(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const gl::Context *ctxPacked,
+ EGLenum target,
+ EGLClientBuffer buffer,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateCreatePlatformPixmapSurface(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ const void *native_pixmap,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateCreatePlatformWindowSurface(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ const void *native_window,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateCreateSync(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLenum type,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateDestroyImage(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Image *imagePacked);
+ bool ValidateDestroySync(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked);
+ bool ValidateGetPlatformDisplay(const ValidationContext *val,
+ EGLenum platform,
+ const void *native_display,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateGetSyncAttrib(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked,
+ EGLint attribute,
+ const EGLAttrib *value);
+ bool ValidateWaitSync(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked,
+ EGLint flags);
+
+ // EGL_ANDROID_blob_cache
+ bool ValidateSetBlobCacheFuncsANDROID(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLSetBlobFuncANDROID set,
+ EGLGetBlobFuncANDROID get);
+
+@@ -183,25 +185,25 @@ bool ValidateCreateNativeClientBufferANDROID(const ValidationContext *val,
+
+ // EGL_ANDROID_get_frame_timestamps
+ bool ValidateGetCompositorTimingSupportedANDROID(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ CompositorTiming namePacked);
+ bool ValidateGetCompositorTimingANDROID(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLint numTimestamps,
+ const EGLint *names,
+ const EGLnsecsANDROID *values);
+ bool ValidateGetNextFrameIdANDROID(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ const EGLuint64KHR *frameId);
+ bool ValidateGetFrameTimestampSupportedANDROID(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ Timestamp timestampPacked);
+ bool ValidateGetFrameTimestampsANDROID(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLuint64KHR frameId,
+ EGLint numTimestamps,
+@@ -214,12 +216,12 @@ bool ValidateGetNativeClientBufferANDROID(const ValidationContext *val,
+
+ // EGL_ANDROID_native_fence_sync
+ bool ValidateDupNativeFenceFDANDROID(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked);
+
+ // EGL_ANDROID_presentation_time
+ bool ValidatePresentationTimeANDROID(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLnsecsANDROID time);
+
+@@ -232,79 +234,79 @@ bool ValidateReleaseDeviceANGLE(const ValidationContext *val, const Device *devi
+
+ // EGL_ANGLE_feature_control
+ bool ValidateQueryStringiANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLint name,
+ EGLint index);
+ bool ValidateQueryDisplayAttribANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLint attribute,
+ const EGLAttrib *value);
+
+ // EGL_ANGLE_power_preference
+ bool ValidateReleaseHighPowerGPUANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const gl::Context *ctxPacked);
+ bool ValidateReacquireHighPowerGPUANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const gl::Context *ctxPacked);
+-bool ValidateHandleGPUSwitchANGLE(const ValidationContext *val, const Display *dpyPacked);
++bool ValidateHandleGPUSwitchANGLE(const ValidationContext *val, const egl::Display *dpyPacked);
+
+ // EGL_ANGLE_program_cache_control
+ bool ValidateProgramCacheGetAttribANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLenum attrib);
+ bool ValidateProgramCacheQueryANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLint index,
+ const void *key,
+ const EGLint *keysize,
+ const void *binary,
+ const EGLint *binarysize);
+ bool ValidateProgramCachePopulateANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const void *key,
+ EGLint keysize,
+ const void *binary,
+ EGLint binarysize);
+ bool ValidateProgramCacheResizeANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLint limit,
+ EGLint mode);
+
+ // EGL_ANGLE_query_surface_pointer
+ bool ValidateQuerySurfacePointerANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLint attribute,
+ void *const *value);
+
+ // EGL_ANGLE_stream_producer_d3d_texture
+ bool ValidateCreateStreamProducerD3DTextureANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateStreamPostD3DTextureANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked,
+ const void *texture,
+ const AttributeMap &attrib_listPacked);
+
+ // EGL_ANGLE_swap_with_frame_token
+ bool ValidateSwapBuffersWithFrameTokenANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLFrameTokenANGLE frametoken);
+
+ // EGL_ANGLE_sync_control_rate
+ bool ValidateGetMscRateANGLE(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ const EGLint *numerator,
+ const EGLint *denominator);
+
+ // EGL_CHROMIUM_sync_control
+ bool ValidateGetSyncValuesCHROMIUM(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ const EGLuint64KHR *ust,
+ const EGLuint64KHR *msc,
+@@ -319,18 +321,18 @@ bool ValidateQueryDeviceStringEXT(const ValidationContext *val,
+ const Device *devicePacked,
+ EGLint name);
+ bool ValidateQueryDisplayAttribEXT(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLint attribute,
+ const EGLAttrib *value);
+
+ // EGL_EXT_platform_base
+ bool ValidateCreatePlatformPixmapSurfaceEXT(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ const void *native_pixmap,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateCreatePlatformWindowSurfaceEXT(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Config *configPacked,
+ const void *native_window,
+ const AttributeMap &attrib_listPacked);
+@@ -344,7 +346,7 @@ bool ValidateDebugMessageControlKHR(const ValidationContext *val,
+ EGLDEBUGPROCKHR callback,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateLabelObjectKHR(const ValidationContext *val,
+- const Display *displayPacked,
++ const egl::Display *displayPacked,
+ ObjectType objectTypePacked,
+ EGLObjectKHR object,
+ EGLLabelKHR label);
+@@ -352,90 +354,90 @@ bool ValidateQueryDebugKHR(const ValidationContext *val, EGLint attribute, const
+
+ // EGL_KHR_fence_sync
+ bool ValidateClientWaitSyncKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked,
+ EGLint flags,
+ EGLTimeKHR timeout);
+ bool ValidateCreateSyncKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ EGLenum type,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateDestroySyncKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked);
+ bool ValidateGetSyncAttribKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked,
+ EGLint attribute,
+ const EGLint *value);
+
+ // EGL_KHR_image
+ bool ValidateCreateImageKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const gl::Context *ctxPacked,
+ EGLenum target,
+ EGLClientBuffer buffer,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateDestroyImageKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Image *imagePacked);
+
+ // EGL_KHR_reusable_sync
+ bool ValidateSignalSyncKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked,
+ EGLenum mode);
+
+ // EGL_KHR_stream
+ bool ValidateCreateStreamKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const AttributeMap &attrib_listPacked);
+ bool ValidateDestroyStreamKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked);
+ bool ValidateQueryStreamKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked,
+ EGLenum attribute,
+ const EGLint *value);
+ bool ValidateQueryStreamu64KHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked,
+ EGLenum attribute,
+ const EGLuint64KHR *value);
+ bool ValidateStreamAttribKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked,
+ EGLenum attribute,
+ EGLint value);
+
+ // EGL_KHR_stream_consumer_gltexture
+ bool ValidateStreamConsumerAcquireKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked);
+ bool ValidateStreamConsumerGLTextureExternalKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked);
+ bool ValidateStreamConsumerReleaseKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked);
+
+ // EGL_KHR_swap_buffers_with_damage
+ bool ValidateSwapBuffersWithDamageKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ const EGLint *rects,
+ EGLint n_rects);
+
+ // EGL_KHR_wait_sync
+ bool ValidateWaitSyncKHR(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Sync *syncPacked,
+ EGLint flags);
+
+ // EGL_NV_post_sub_buffer
+ bool ValidatePostSubBufferNV(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Surface *surfacePacked,
+ EGLint x,
+ EGLint y,
+@@ -444,7 +446,7 @@ bool ValidatePostSubBufferNV(const ValidationContext *val,
+
+ // EGL_NV_stream_consumer_gltexture_yuv
+ bool ValidateStreamConsumerGLTextureExternalAttribsNV(const ValidationContext *val,
+- const Display *dpyPacked,
++ const egl::Display *dpyPacked,
+ const Stream *streamPacked,
+ const AttributeMap &attrib_listPacked);
+ } // namespace egl
+diff --git a/third_party/angle/src/libGLESv2/egl_ext_stubs_autogen.h b/third_party/angle/src/libGLESv2/egl_ext_stubs_autogen.h
+index aecd051d9..404717bde 100644
+--- a/third_party/angle/src/libGLESv2/egl_ext_stubs_autogen.h
++++ b/third_party/angle/src/libGLESv2/egl_ext_stubs_autogen.h
+@@ -33,12 +33,12 @@ class Thread;
+ struct Config;
+
+ EGLint ClientWaitSyncKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Sync *syncPacked,
+ EGLint flags,
+ EGLTimeKHR timeout);
+ EGLImageKHR CreateImageKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ gl::Context *ctxPacked,
+ EGLenum target,
+ EGLClientBuffer buffer,
+@@ -46,75 +46,75 @@ EGLImageKHR CreateImageKHR(Thread *thread,
+ EGLClientBuffer CreateNativeClientBufferANDROID(Thread *thread,
+ const AttributeMap &attrib_listPacked);
+ EGLSurface CreatePlatformPixmapSurfaceEXT(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ void *native_pixmap,
+ const AttributeMap &attrib_listPacked);
+ EGLSurface CreatePlatformWindowSurfaceEXT(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ void *native_window,
+ const AttributeMap &attrib_listPacked);
+ EGLStreamKHR CreateStreamKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ const AttributeMap &attrib_listPacked);
+ EGLSyncKHR CreateSyncKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ EGLenum type,
+ const AttributeMap &attrib_listPacked);
+ EGLint DebugMessageControlKHR(Thread *thread,
+ EGLDEBUGPROCKHR callback,
+ const AttributeMap &attrib_listPacked);
+-EGLBoolean DestroyImageKHR(Thread *thread, Display *dpyPacked, Image *imagePacked);
+-EGLBoolean DestroyStreamKHR(Thread *thread, Display *dpyPacked, Stream *streamPacked);
+-EGLBoolean DestroySyncKHR(Thread *thread, Display *dpyPacked, Sync *syncPacked);
+-EGLint DupNativeFenceFDANDROID(Thread *thread, Display *dpyPacked, Sync *syncPacked);
++EGLBoolean DestroyImageKHR(Thread *thread, egl::Display *dpyPacked, Image *imagePacked);
++EGLBoolean DestroyStreamKHR(Thread *thread, egl::Display *dpyPacked, Stream *streamPacked);
++EGLBoolean DestroySyncKHR(Thread *thread, egl::Display *dpyPacked, Sync *syncPacked);
++EGLint DupNativeFenceFDANDROID(Thread *thread, egl::Display *dpyPacked, Sync *syncPacked);
+ EGLClientBuffer GetNativeClientBufferANDROID(Thread *thread, const struct AHardwareBuffer *buffer);
+ EGLDisplay GetPlatformDisplayEXT(Thread *thread,
+ EGLenum platform,
+ void *native_display,
+ const AttributeMap &attrib_listPacked);
+ EGLBoolean GetSyncAttribKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Sync *syncPacked,
+ EGLint attribute,
+ EGLint *value);
+ EGLint LabelObjectKHR(Thread *thread,
+- Display *displayPacked,
++ egl::Display *displayPacked,
+ ObjectType objectTypePacked,
+ EGLObjectKHR object,
+ EGLLabelKHR label);
+ EGLBoolean PostSubBufferNV(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLint x,
+ EGLint y,
+ EGLint width,
+ EGLint height);
+ EGLBoolean PresentationTimeANDROID(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLnsecsANDROID time);
+ EGLBoolean GetCompositorTimingSupportedANDROID(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ CompositorTiming namePacked);
+ EGLBoolean GetCompositorTimingANDROID(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLint numTimestamps,
+ const EGLint *names,
+ EGLnsecsANDROID *values);
+ EGLBoolean GetNextFrameIdANDROID(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLuint64KHR *frameId);
+ EGLBoolean GetFrameTimestampSupportedANDROID(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ Timestamp timestampPacked);
+ EGLBoolean GetFrameTimestampsANDROID(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLuint64KHR frameId,
+ EGLint numTimestamps,
+@@ -127,99 +127,99 @@ EGLBoolean QueryDeviceAttribEXT(Thread *thread,
+ EGLAttrib *value);
+ const char *QueryDeviceStringEXT(Thread *thread, Device *devicePacked, EGLint name);
+ EGLBoolean QueryDisplayAttribEXT(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ EGLint attribute,
+ EGLAttrib *value);
+ EGLBoolean QueryStreamKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Stream *streamPacked,
+ EGLenum attribute,
+ EGLint *value);
+ EGLBoolean QueryStreamu64KHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Stream *streamPacked,
+ EGLenum attribute,
+ EGLuint64KHR *value);
+ EGLBoolean QuerySurfacePointerANGLE(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLint attribute,
+ void **value);
+ void SetBlobCacheFuncsANDROID(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ EGLSetBlobFuncANDROID set,
+ EGLGetBlobFuncANDROID get);
+-EGLBoolean SignalSyncKHR(Thread *thread, Display *dpyPacked, Sync *syncPacked, EGLenum mode);
++EGLBoolean SignalSyncKHR(Thread *thread, egl::Display *dpyPacked, Sync *syncPacked, EGLenum mode);
+ EGLBoolean StreamAttribKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Stream *streamPacked,
+ EGLenum attribute,
+ EGLint value);
+-EGLBoolean StreamConsumerAcquireKHR(Thread *thread, Display *dpyPacked, Stream *streamPacked);
++EGLBoolean StreamConsumerAcquireKHR(Thread *thread, egl::Display *dpyPacked, Stream *streamPacked);
+ EGLBoolean StreamConsumerGLTextureExternalKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Stream *streamPacked);
+ EGLBoolean StreamConsumerGLTextureExternalAttribsNV(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Stream *streamPacked,
+ const AttributeMap &attrib_listPacked);
+-EGLBoolean StreamConsumerReleaseKHR(Thread *thread, Display *dpyPacked, Stream *streamPacked);
++EGLBoolean StreamConsumerReleaseKHR(Thread *thread, egl::Display *dpyPacked, Stream *streamPacked);
+ EGLBoolean SwapBuffersWithDamageKHR(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLint *rects,
+ EGLint n_rects);
+-EGLint WaitSyncKHR(Thread *thread, Display *dpyPacked, Sync *syncPacked, EGLint flags);
++EGLint WaitSyncKHR(Thread *thread, egl::Display *dpyPacked, Sync *syncPacked, EGLint flags);
+ EGLDeviceEXT CreateDeviceANGLE(Thread *thread,
+ EGLint device_type,
+ void *native_device,
+ const EGLAttrib *attrib_list);
+ EGLBoolean ReleaseDeviceANGLE(Thread *thread, Device *devicePacked);
+ EGLBoolean CreateStreamProducerD3DTextureANGLE(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Stream *streamPacked,
+ const AttributeMap &attrib_listPacked);
+ EGLBoolean StreamPostD3DTextureANGLE(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Stream *streamPacked,
+ void *texture,
+ const AttributeMap &attrib_listPacked);
+ EGLBoolean GetMscRateANGLE(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLint *numerator,
+ EGLint *denominator);
+ EGLBoolean GetSyncValuesCHROMIUM(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLuint64KHR *ust,
+ EGLuint64KHR *msc,
+ EGLuint64KHR *sbc);
+-EGLint ProgramCacheGetAttribANGLE(Thread *thread, Display *dpyPacked, EGLenum attrib);
++EGLint ProgramCacheGetAttribANGLE(Thread *thread, egl::Display *dpyPacked, EGLenum attrib);
+ void ProgramCacheQueryANGLE(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ EGLint index,
+ void *key,
+ EGLint *keysize,
+ void *binary,
+ EGLint *binarysize);
+ void ProgramCachePopulateANGLE(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ const void *key,
+ EGLint keysize,
+ const void *binary,
+ EGLint binarysize);
+-EGLint ProgramCacheResizeANGLE(Thread *thread, Display *dpyPacked, EGLint limit, EGLint mode);
+-const char *QueryStringiANGLE(Thread *thread, Display *dpyPacked, EGLint name, EGLint index);
++EGLint ProgramCacheResizeANGLE(Thread *thread, egl::Display *dpyPacked, EGLint limit, EGLint mode);
++const char *QueryStringiANGLE(Thread *thread, egl::Display *dpyPacked, EGLint name, EGLint index);
+ EGLBoolean SwapBuffersWithFrameTokenANGLE(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLFrameTokenANGLE frametoken);
+-void ReleaseHighPowerGPUANGLE(Thread *thread, Display *dpyPacked, gl::Context *ctxPacked);
+-void ReacquireHighPowerGPUANGLE(Thread *thread, Display *dpyPacked, gl::Context *ctxPacked);
+-void HandleGPUSwitchANGLE(Thread *thread, Display *dpyPacked);
++void ReleaseHighPowerGPUANGLE(Thread *thread, egl::Display *dpyPacked, gl::Context *ctxPacked);
++void ReacquireHighPowerGPUANGLE(Thread *thread, egl::Display *dpyPacked, gl::Context *ctxPacked);
++void HandleGPUSwitchANGLE(Thread *thread, egl::Display *dpyPacked);
+ EGLBoolean QueryDisplayAttribANGLE(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ EGLint attribute,
+ EGLAttrib *value);
+ } // namespace egl
+diff --git a/third_party/angle/src/libGLESv2/egl_stubs_autogen.h b/third_party/angle/src/libGLESv2/egl_stubs_autogen.h
+index 9118495ed..6d7d210d9 100644
+--- a/third_party/angle/src/libGLESv2/egl_stubs_autogen.h
++++ b/third_party/angle/src/libGLESv2/egl_stubs_autogen.h
+@@ -33,78 +33,81 @@ class Thread;
+ struct Config;
+
+ EGLBoolean BindAPI(Thread *thread, EGLenum api);
+-EGLBoolean BindTexImage(Thread *thread, Display *dpyPacked, Surface *surfacePacked, EGLint buffer);
++EGLBoolean BindTexImage(Thread *thread,
++ egl::Display *dpyPacked,
++ Surface *surfacePacked,
++ EGLint buffer);
+ EGLBoolean ChooseConfig(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ const AttributeMap &attrib_listPacked,
+ EGLConfig *configs,
+ EGLint config_size,
+ EGLint *num_config);
+ EGLint ClientWaitSync(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Sync *syncPacked,
+ EGLint flags,
+ EGLTime timeout);
+ EGLBoolean CopyBuffers(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLNativePixmapType target);
+ EGLContext CreateContext(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ gl::Context *share_contextPacked,
+ const AttributeMap &attrib_listPacked);
+ EGLImage CreateImage(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ gl::Context *ctxPacked,
+ EGLenum target,
+ EGLClientBuffer buffer,
+ const AttributeMap &attrib_listPacked);
+ EGLSurface CreatePbufferFromClientBuffer(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ EGLenum buftype,
+ EGLClientBuffer buffer,
+ Config *configPacked,
+ const AttributeMap &attrib_listPacked);
+ EGLSurface CreatePbufferSurface(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ const AttributeMap &attrib_listPacked);
+ EGLSurface CreatePixmapSurface(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ EGLNativePixmapType pixmap,
+ const AttributeMap &attrib_listPacked);
+ EGLSurface CreatePlatformPixmapSurface(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ void *native_pixmap,
+ const AttributeMap &attrib_listPacked);
+ EGLSurface CreatePlatformWindowSurface(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ void *native_window,
+ const AttributeMap &attrib_listPacked);
+ EGLSync CreateSync(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ EGLenum type,
+ const AttributeMap &attrib_listPacked);
+ EGLSurface CreateWindowSurface(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ EGLNativeWindowType win,
+ const AttributeMap &attrib_listPacked);
+-EGLBoolean DestroyContext(Thread *thread, Display *dpyPacked, gl::Context *ctxPacked);
+-EGLBoolean DestroyImage(Thread *thread, Display *dpyPacked, Image *imagePacked);
+-EGLBoolean DestroySurface(Thread *thread, Display *dpyPacked, Surface *surfacePacked);
+-EGLBoolean DestroySync(Thread *thread, Display *dpyPacked, Sync *syncPacked);
++EGLBoolean DestroyContext(Thread *thread, egl::Display *dpyPacked, gl::Context *ctxPacked);
++EGLBoolean DestroyImage(Thread *thread, egl::Display *dpyPacked, Image *imagePacked);
++EGLBoolean DestroySurface(Thread *thread, egl::Display *dpyPacked, Surface *surfacePacked);
++EGLBoolean DestroySync(Thread *thread, egl::Display *dpyPacked, Sync *syncPacked);
+ EGLBoolean GetConfigAttrib(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Config *configPacked,
+ EGLint attribute,
+ EGLint *value);
+ EGLBoolean GetConfigs(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ EGLConfig *configs,
+ EGLint config_size,
+ EGLint *num_config);
+@@ -119,44 +122,44 @@ EGLDisplay GetPlatformDisplay(Thread *thread,
+ const AttributeMap &attrib_listPacked);
+ __eglMustCastToProperFunctionPointerType GetProcAddress(Thread *thread, const char *procname);
+ EGLBoolean GetSyncAttrib(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Sync *syncPacked,
+ EGLint attribute,
+ EGLAttrib *value);
+-EGLBoolean Initialize(Thread *thread, Display *dpyPacked, EGLint *major, EGLint *minor);
++EGLBoolean Initialize(Thread *thread, egl::Display *dpyPacked, EGLint *major, EGLint *minor);
+ EGLBoolean MakeCurrent(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *drawPacked,
+ Surface *readPacked,
+ gl::Context *ctxPacked);
+ EGLenum QueryAPI(Thread *thread);
+ EGLBoolean QueryContext(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ gl::Context *ctxPacked,
+ EGLint attribute,
+ EGLint *value);
+-const char *QueryString(Thread *thread, Display *dpyPacked, EGLint name);
++const char *QueryString(Thread *thread, egl::Display *dpyPacked, EGLint name);
+ EGLBoolean QuerySurface(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLint attribute,
+ EGLint *value);
+ EGLBoolean ReleaseTexImage(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLint buffer);
+ EGLBoolean ReleaseThread(Thread *thread);
+ EGLBoolean SurfaceAttrib(Thread *thread,
+- Display *dpyPacked,
++ egl::Display *dpyPacked,
+ Surface *surfacePacked,
+ EGLint attribute,
+ EGLint value);
+-EGLBoolean SwapBuffers(Thread *thread, Display *dpyPacked, Surface *surfacePacked);
+-EGLBoolean SwapInterval(Thread *thread, Display *dpyPacked, EGLint interval);
+-EGLBoolean Terminate(Thread *thread, Display *dpyPacked);
++EGLBoolean SwapBuffers(Thread *thread, egl::Display *dpyPacked, Surface *surfacePacked);
++EGLBoolean SwapInterval(Thread *thread, egl::Display *dpyPacked, EGLint interval);
++EGLBoolean Terminate(Thread *thread, egl::Display *dpyPacked);
+ EGLBoolean WaitClient(Thread *thread);
+ EGLBoolean WaitGL(Thread *thread);
+ EGLBoolean WaitNative(Thread *thread, EGLint engine);
+-EGLBoolean WaitSync(Thread *thread, Display *dpyPacked, Sync *syncPacked, EGLint flags);
++EGLBoolean WaitSync(Thread *thread, egl::Display *dpyPacked, Sync *syncPacked, EGLint flags);
+ } // namespace egl
+ #endif // LIBGLESV2_EGL_STUBS_AUTOGEN_H_
+diff --git a/third_party/angle/src/libGLESv2/entry_points_egl_autogen.cpp b/third_party/angle/src/libGLESv2/entry_points_egl_autogen.cpp
+index 3e127ee9d..7671cc7ab 100644
+--- a/third_party/angle/src/libGLESv2/entry_points_egl_autogen.cpp
++++ b/third_party/angle/src/libGLESv2/entry_points_egl_autogen.cpp
+@@ -35,7 +35,7 @@ EGLBoolean EGLAPIENTRY EGL_ChooseConfig(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+ ANGLE_EGL_VALIDATE(thread, ChooseConfig, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+@@ -55,8 +55,8 @@ EGLBoolean EGLAPIENTRY EGL_CopyBuffers(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, CopyBuffers, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked, target);
+@@ -77,7 +77,7 @@ EGLContext EGLAPIENTRY EGL_CreateContext(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ gl::Context *share_contextPacked = PackParam<gl::Context *>(share_context);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+@@ -100,7 +100,7 @@ EGLSurface EGLAPIENTRY EGL_CreatePbufferSurface(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -123,7 +123,7 @@ EGLSurface EGLAPIENTRY EGL_CreatePixmapSurface(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -146,7 +146,7 @@ EGLSurface EGLAPIENTRY EGL_CreateWindowSurface(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -164,8 +164,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyContext(EGLDisplay dpy, EGLContext ctx)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
+
+ ANGLE_EGL_VALIDATE(thread, DestroyContext, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ ctxPacked);
+@@ -181,8 +181,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroySurface(EGLDisplay dpy, EGLSurface surface)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, DestroySurface, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked);
+@@ -203,8 +203,8 @@ EGLBoolean EGLAPIENTRY EGL_GetConfigAttrib(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Config *configPacked = PackParam<Config *>(config);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Config *configPacked = PackParam<Config *>(config);
+
+ ANGLE_EGL_VALIDATE(thread, GetConfigAttrib, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ configPacked, attribute, value);
+@@ -225,7 +225,7 @@ EGLBoolean EGLAPIENTRY EGL_GetConfigs(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, GetConfigs, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ configs, config_size, num_config);
+@@ -303,7 +303,7 @@ EGLBoolean EGLAPIENTRY EGL_Initialize(EGLDisplay dpy, EGLint *major, EGLint *min
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, Initialize, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ major, minor);
+@@ -324,10 +324,10 @@ EGLBoolean EGLAPIENTRY EGL_MakeCurrent(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *drawPacked = PackParam<Surface *>(draw);
+- Surface *readPacked = PackParam<Surface *>(read);
+- gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *drawPacked = PackParam<Surface *>(draw);
++ Surface *readPacked = PackParam<Surface *>(read);
++ gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
+
+ ANGLE_EGL_VALIDATE(thread, MakeCurrent, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ drawPacked, readPacked, ctxPacked);
+@@ -348,8 +348,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryContext(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
+
+ ANGLE_EGL_VALIDATE(thread, QueryContext, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ ctxPacked, attribute, value);
+@@ -364,7 +364,7 @@ const char *EGLAPIENTRY EGL_QueryString(EGLDisplay dpy, EGLint name)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, QueryString, GetDisplayIfValid(dpyPacked), const char *, dpyPacked,
+ name);
+@@ -385,8 +385,8 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurface(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, QuerySurface, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked, attribute, value);
+@@ -402,8 +402,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffers(EGLDisplay dpy, EGLSurface surface)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, SwapBuffers, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked);
+@@ -418,7 +418,7 @@ EGLBoolean EGLAPIENTRY EGL_Terminate(EGLDisplay dpy)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, Terminate, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked);
+
+@@ -458,8 +458,8 @@ EGLBoolean EGLAPIENTRY EGL_BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLi
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, BindTexImage, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked, buffer);
+@@ -475,8 +475,8 @@ EGLBoolean EGLAPIENTRY EGL_ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, E
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, ReleaseTexImage, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked, buffer);
+@@ -496,8 +496,8 @@ EGLBoolean EGLAPIENTRY EGL_SurfaceAttrib(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, SurfaceAttrib, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked, attribute, value);
+@@ -512,7 +512,7 @@ EGLBoolean EGLAPIENTRY EGL_SwapInterval(EGLDisplay dpy, EGLint interval)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, SwapInterval, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ interval);
+@@ -548,7 +548,7 @@ EGLSurface EGLAPIENTRY EGL_CreatePbufferFromClientBuffer(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -618,8 +618,8 @@ EGLint EGLAPIENTRY EGL_ClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, ClientWaitSync, GetDisplayIfValid(dpyPacked), EGLint, dpyPacked,
+ syncPacked, flags, timeout);
+@@ -641,7 +641,7 @@ EGLImage EGLAPIENTRY EGL_CreateImage(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -664,7 +664,7 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurface(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -688,7 +688,7 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurface(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -707,7 +707,7 @@ EGLSync EGLAPIENTRY EGL_CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+ ANGLE_EGL_VALIDATE(thread, CreateSync, GetDisplayIfValid(dpyPacked), EGLSync, dpyPacked, type,
+@@ -724,8 +724,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyImage(EGLDisplay dpy, EGLImage image)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Image *imagePacked = PackParam<Image *>(image);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Image *imagePacked = PackParam<Image *>(image);
+
+ ANGLE_EGL_VALIDATE(thread, DestroyImage, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ imagePacked);
+@@ -741,8 +741,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroySync(EGLDisplay dpy, EGLSync sync)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, DestroySync, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ syncPacked);
+@@ -783,8 +783,8 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncAttrib(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, GetSyncAttrib, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ syncPacked, attribute, value);
+@@ -800,8 +800,8 @@ EGLBoolean EGLAPIENTRY EGL_WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, WaitSync, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ syncPacked, flags);
+diff --git a/third_party/angle/src/libGLESv2/entry_points_egl_ext_autogen.cpp b/third_party/angle/src/libGLESv2/entry_points_egl_ext_autogen.cpp
+index d9f4b76ea..76fcf8c17 100644
+--- a/third_party/angle/src/libGLESv2/entry_points_egl_ext_autogen.cpp
++++ b/third_party/angle/src/libGLESv2/entry_points_egl_ext_autogen.cpp
+@@ -31,7 +31,7 @@ void EGLAPIENTRY EGL_SetBlobCacheFuncsANDROID(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE_VOID(thread, SetBlobCacheFuncsANDROID, GetDisplayIfValid(dpyPacked),
+ dpyPacked, set, get);
+@@ -68,7 +68,7 @@ EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingSupportedANDROID(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Surface *surfacePacked = PackParam<Surface *>(surface);
+ CompositorTiming namePacked = PackParam<CompositorTiming>(name);
+
+@@ -93,8 +93,8 @@ EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingANDROID(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, GetCompositorTimingANDROID, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, surfacePacked, numTimestamps, names, values);
+@@ -114,8 +114,8 @@ EGLBoolean EGLAPIENTRY EGL_GetNextFrameIdANDROID(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, GetNextFrameIdANDROID, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, surfacePacked, frameId);
+@@ -134,7 +134,7 @@ EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampSupportedANDROID(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Surface *surfacePacked = PackParam<Surface *>(surface);
+ Timestamp timestampPacked = PackParam<Timestamp>(timestamp);
+
+@@ -161,8 +161,8 @@ EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampsANDROID(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, GetFrameTimestampsANDROID, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, surfacePacked, frameId, numTimestamps, timestamps, values);
+@@ -193,8 +193,8 @@ EGLint EGLAPIENTRY EGL_DupNativeFenceFDANDROID(EGLDisplay dpy, EGLSyncKHR sync)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, DupNativeFenceFDANDROID, GetDisplayIfValid(dpyPacked), EGLint,
+ dpyPacked, syncPacked);
+@@ -214,8 +214,8 @@ EGLBoolean EGLAPIENTRY EGL_PresentationTimeANDROID(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, PresentationTimeANDROID, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, surfacePacked, time);
+@@ -265,7 +265,7 @@ const char *EGLAPIENTRY EGL_QueryStringiANGLE(EGLDisplay dpy, EGLint name, EGLin
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, QueryStringiANGLE, GetDisplayIfValid(dpyPacked), const char *,
+ dpyPacked, name, index);
+@@ -284,7 +284,7 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribANGLE(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, QueryDisplayAttribANGLE, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, attribute, value);
+@@ -301,8 +301,8 @@ void EGLAPIENTRY EGL_ReleaseHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
+
+ ANGLE_EGL_VALIDATE_VOID(thread, ReleaseHighPowerGPUANGLE, GetDisplayIfValid(dpyPacked),
+ dpyPacked, ctxPacked);
+@@ -318,8 +318,8 @@ void EGLAPIENTRY EGL_ReacquireHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
+
+ ANGLE_EGL_VALIDATE_VOID(thread, ReacquireHighPowerGPUANGLE, GetDisplayIfValid(dpyPacked),
+ dpyPacked, ctxPacked);
+@@ -334,7 +334,7 @@ void EGLAPIENTRY EGL_HandleGPUSwitchANGLE(EGLDisplay dpy)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE_VOID(thread, HandleGPUSwitchANGLE, GetDisplayIfValid(dpyPacked), dpyPacked);
+
+@@ -350,7 +350,7 @@ EGLint EGLAPIENTRY EGL_ProgramCacheGetAttribANGLE(EGLDisplay dpy, EGLenum attrib
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, ProgramCacheGetAttribANGLE, GetDisplayIfValid(dpyPacked), EGLint,
+ dpyPacked, attrib);
+@@ -375,7 +375,7 @@ void EGLAPIENTRY EGL_ProgramCacheQueryANGLE(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE_VOID(thread, ProgramCacheQueryANGLE, GetDisplayIfValid(dpyPacked), dpyPacked,
+ index, key, keysize, binary, binarysize);
+@@ -397,7 +397,7 @@ void EGLAPIENTRY EGL_ProgramCachePopulateANGLE(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE_VOID(thread, ProgramCachePopulateANGLE, GetDisplayIfValid(dpyPacked),
+ dpyPacked, key, keysize, binary, binarysize);
+@@ -413,7 +413,7 @@ EGLint EGLAPIENTRY EGL_ProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGL
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, ProgramCacheResizeANGLE, GetDisplayIfValid(dpyPacked), EGLint,
+ dpyPacked, limit, mode);
+@@ -435,8 +435,8 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurfacePointerANGLE(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, QuerySurfacePointerANGLE, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, surfacePacked, attribute, value);
+@@ -457,7 +457,7 @@ EGLBoolean EGLAPIENTRY EGL_CreateStreamProducerD3DTextureANGLE(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Stream *streamPacked = PackParam<Stream *>(stream);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -480,7 +480,7 @@ EGLBoolean EGLAPIENTRY EGL_StreamPostD3DTextureANGLE(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Stream *streamPacked = PackParam<Stream *>(stream);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -502,8 +502,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithFrameTokenANGLE(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, SwapBuffersWithFrameTokenANGLE, GetDisplayIfValid(dpyPacked),
+ EGLBoolean, dpyPacked, surfacePacked, frametoken);
+@@ -525,8 +525,8 @@ EGLBoolean EGLAPIENTRY EGL_GetMscRateANGLE(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, GetMscRateANGLE, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked, numerator, denominator);
+@@ -549,8 +549,8 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncValuesCHROMIUM(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, GetSyncValuesCHROMIUM, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, surfacePacked, ust, msc, sbc);
+@@ -602,7 +602,7 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribut
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+
+ ANGLE_EGL_VALIDATE(thread, QueryDisplayAttribEXT, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, attribute, value);
+@@ -624,7 +624,7 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -648,7 +648,7 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurfaceEXT(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Config *configPacked = PackParam<Config *>(config);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -711,7 +711,7 @@ EGLint EGLAPIENTRY EGL_LabelObjectKHR(EGLDisplay display,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *displayPacked = PackParam<Display *>(display);
++ egl::Display *displayPacked = PackParam<egl::Display *>(display);
+ ObjectType objectTypePacked = PackParam<ObjectType>(objectType);
+
+ ANGLE_EGL_VALIDATE(thread, LabelObjectKHR, GetDisplayIfValid(displayPacked), EGLint,
+@@ -746,8 +746,8 @@ EGLint EGLAPIENTRY EGL_ClientWaitSyncKHR(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, ClientWaitSyncKHR, GetDisplayIfValid(dpyPacked), EGLint, dpyPacked,
+ syncPacked, flags, timeout);
+@@ -764,7 +764,7 @@ EGLSyncKHR EGLAPIENTRY EGL_CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGL
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+ ANGLE_EGL_VALIDATE(thread, CreateSyncKHR, GetDisplayIfValid(dpyPacked), EGLSyncKHR, dpyPacked,
+@@ -781,8 +781,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, DestroySyncKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ syncPacked);
+@@ -803,8 +803,8 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncAttribKHR(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, GetSyncAttribKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, syncPacked, attribute, value);
+@@ -827,7 +827,7 @@ EGLImageKHR EGLAPIENTRY EGL_CreateImageKHR(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ gl::Context *ctxPacked = PackParam<gl::Context *>(ctx);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+@@ -845,8 +845,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Image *imagePacked = PackParam<Image *>(image);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Image *imagePacked = PackParam<Image *>(image);
+
+ ANGLE_EGL_VALIDATE(thread, DestroyImageKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ imagePacked);
+@@ -863,8 +863,8 @@ EGLBoolean EGLAPIENTRY EGL_SignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenu
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, SignalSyncKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ syncPacked, mode);
+@@ -889,7 +889,7 @@ EGLStreamKHR EGLAPIENTRY EGL_CreateStreamKHR(EGLDisplay dpy, const EGLint *attri
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
+ ANGLE_EGL_VALIDATE(thread, CreateStreamKHR, GetDisplayIfValid(dpyPacked), EGLStreamKHR,
+@@ -906,8 +906,8 @@ EGLBoolean EGLAPIENTRY EGL_DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream)
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Stream *streamPacked = PackParam<Stream *>(stream);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Stream *streamPacked = PackParam<Stream *>(stream);
+
+ ANGLE_EGL_VALIDATE(thread, DestroyStreamKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, streamPacked);
+@@ -928,8 +928,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryStreamKHR(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Stream *streamPacked = PackParam<Stream *>(stream);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Stream *streamPacked = PackParam<Stream *>(stream);
+
+ ANGLE_EGL_VALIDATE(thread, QueryStreamKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ streamPacked, attribute, value);
+@@ -950,8 +950,8 @@ EGLBoolean EGLAPIENTRY EGL_QueryStreamu64KHR(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Stream *streamPacked = PackParam<Stream *>(stream);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Stream *streamPacked = PackParam<Stream *>(stream);
+
+ ANGLE_EGL_VALIDATE(thread, QueryStreamu64KHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, streamPacked, attribute, value);
+@@ -971,8 +971,8 @@ EGLBoolean EGLAPIENTRY EGL_StreamAttribKHR(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Stream *streamPacked = PackParam<Stream *>(stream);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Stream *streamPacked = PackParam<Stream *>(stream);
+
+ ANGLE_EGL_VALIDATE(thread, StreamAttribKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ streamPacked, attribute, value);
+@@ -989,8 +989,8 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Stream *streamPacked = PackParam<Stream *>(stream);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Stream *streamPacked = PackParam<Stream *>(stream);
+
+ ANGLE_EGL_VALIDATE(thread, StreamConsumerAcquireKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, streamPacked);
+@@ -1007,8 +1007,8 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EG
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Stream *streamPacked = PackParam<Stream *>(stream);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Stream *streamPacked = PackParam<Stream *>(stream);
+
+ ANGLE_EGL_VALIDATE(thread, StreamConsumerGLTextureExternalKHR, GetDisplayIfValid(dpyPacked),
+ EGLBoolean, dpyPacked, streamPacked);
+@@ -1024,8 +1024,8 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Stream *streamPacked = PackParam<Stream *>(stream);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Stream *streamPacked = PackParam<Stream *>(stream);
+
+ ANGLE_EGL_VALIDATE(thread, StreamConsumerReleaseKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, streamPacked);
+@@ -1047,8 +1047,8 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithDamageKHR(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, SwapBuffersWithDamageKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
+ dpyPacked, surfacePacked, rects, n_rects);
+@@ -1065,8 +1065,8 @@ EGLint EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Sync *syncPacked = PackParam<Sync *>(sync);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Sync *syncPacked = PackParam<Sync *>(sync);
+
+ ANGLE_EGL_VALIDATE(thread, WaitSyncKHR, GetDisplayIfValid(dpyPacked), EGLint, dpyPacked,
+ syncPacked, flags);
+@@ -1090,8 +1090,8 @@ EGLBoolean EGLAPIENTRY EGL_PostSubBufferNV(EGLDisplay dpy,
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
+- Surface *surfacePacked = PackParam<Surface *>(surface);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
++ Surface *surfacePacked = PackParam<Surface *>(surface);
+
+ ANGLE_EGL_VALIDATE(thread, PostSubBufferNV, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
+ surfacePacked, x, y, width, height);
+@@ -1112,7 +1112,7 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalAttribsNV(EGLDisplay d
+
+ Thread *thread = egl::GetCurrentThread();
+
+- Display *dpyPacked = PackParam<Display *>(dpy);
++ egl::Display *dpyPacked = PackParam<egl::Display *>(dpy);
+ Stream *streamPacked = PackParam<Stream *>(stream);
+ const AttributeMap &attrib_listPacked = PackParam<const AttributeMap &>(attrib_list);
+
diff --git a/www-client/chromium/files/chromium-89-compositor-dcheck.patch b/www-client/chromium/files/chromium-89-compositor-dcheck.patch
new file mode 100644
index 0000000..2a12ca9
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-compositor-dcheck.patch
@@ -0,0 +1,13 @@
+diff --git a/cc/metrics/compositor_frame_reporter.cc b/cc/metrics/compositor_frame_reporter.cc
+index bab060123..f3ee60127 100644
+--- a/cc/metrics/compositor_frame_reporter.cc
++++ b/cc/metrics/compositor_frame_reporter.cc
+@@ -767,7 +767,7 @@ void CompositorFrameReporter::ReportCompositorLatencyHistogram(
+
+ void CompositorFrameReporter::ReportEventLatencyHistograms() const {
+ for (const auto& event_metrics : events_metrics_) {
+- DCHECK(event_metrics);
++ DCHECK(event_metrics.get());
+ const std::string histogram_base_name =
+ GetEventLatencyHistogramBaseName(*event_metrics);
+ const int event_type_index = static_cast<int>(event_metrics->type());
diff --git a/www-client/chromium/files/chromium-89-content-dcheck-uniqueptr.patch b/www-client/chromium/files/chromium-89-content-dcheck-uniqueptr.patch
new file mode 100644
index 0000000..2297062
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-content-dcheck-uniqueptr.patch
@@ -0,0 +1,13 @@
+diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc
+index f020be446..d7cb4656e 100644
+--- a/content/browser/renderer_host/render_frame_host_manager.cc
++++ b/content/browser/renderer_host/render_frame_host_manager.cc
+@@ -738,7 +738,7 @@ void RenderFrameHostManager::ValidateSpeculativeRenderFrameHostForBug1146573() {
+ // This should never be true.
+ SCOPED_CRASH_KEY_BOOL(ValidateSpeculative, HostsEqual,
+ speculative_render_frame_host_ == render_frame_host_);
+- DCHECK_NE(speculative_render_frame_host_, render_frame_host_);
++ DCHECK_NE(speculative_render_frame_host_.get(), render_frame_host_.get());
+ SCOPED_CRASH_KEY_BOOL(ValidateSpeculative, Live,
+ render_frame_host_->IsRenderFrameLive());
+ SCOPED_CRASH_KEY_STRING256(
diff --git a/www-client/chromium/files/chromium-89-dawn-string-include.patch b/www-client/chromium/files/chromium-89-dawn-string-include.patch
new file mode 100644
index 0000000..ae0bcc8
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-dawn-string-include.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/dawn/src/dawn_wire/ChunkedCommandHandler.cpp b/third_party/dawn/src/dawn_wire/ChunkedCommandHandler.cpp
+index e91e540fa..502a470e6 100644
+--- a/third_party/dawn/src/dawn_wire/ChunkedCommandHandler.cpp
++++ b/third_party/dawn/src/dawn_wire/ChunkedCommandHandler.cpp
+@@ -14,6 +14,8 @@
+
+ #include "dawn_wire/ChunkedCommandHandler.h"
+
++#include <string.h>
++
+ #include <algorithm>
+
+ namespace dawn_wire {
diff --git a/www-client/chromium/files/chromium-89-pcscan-include.patch b/www-client/chromium/files/chromium-89-pcscan-include.patch
new file mode 100644
index 0000000..96fcfb6
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-pcscan-include.patch
@@ -0,0 +1,12 @@
+diff --git a/base/allocator/partition_allocator/pcscan.cc b/base/allocator/partition_allocator/pcscan.cc
+index b8d96e32d..a802a1fae 100644
+--- a/base/allocator/partition_allocator/pcscan.cc
++++ b/base/allocator/partition_allocator/pcscan.cc
+@@ -7,6 +7,7 @@
+ #include <algorithm>
+ #include <map>
+ #include <mutex>
++#include <condition_variable>
+ #include <numeric>
+ #include <set>
+ #include <thread>
diff --git a/www-client/chromium/files/chromium-89-quiche-uniqueptr.patch b/www-client/chromium/files/chromium-89-quiche-uniqueptr.patch
new file mode 100644
index 0000000..a093522
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-quiche-uniqueptr.patch
@@ -0,0 +1,13 @@
+diff --git a/net/third_party/quiche/src/quic/core/quic_path_validator.cc b/net/third_party/quiche/src/quic/core/quic_path_validator.cc
+index 5d5e7206d..8145252aa 100644
+--- a/net/third_party/quiche/src/quic/core/quic_path_validator.cc
++++ b/net/third_party/quiche/src/quic/core/quic_path_validator.cc
+@@ -66,7 +66,7 @@ void QuicPathValidator::StartValidingPath(
+ std::unique_ptr<QuicPathValidationContext> context,
+ std::unique_ptr<ResultDelegate> result_delegate) {
+ CancelPathValidation();
+- DCHECK_NE(nullptr, context);
++ DCHECK_NE(nullptr, context.get());
+ QUIC_DLOG(INFO) << "Start validating path " << *context
+ << " via writer: " << context->WriterToUse();
+
diff --git a/www-client/chromium/files/chromium-89-quiche-uniqueptr_r1.patch b/www-client/chromium/files/chromium-89-quiche-uniqueptr_r1.patch
new file mode 100644
index 0000000..6872128
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-quiche-uniqueptr_r1.patch
@@ -0,0 +1,13 @@
+diff --git a/net/third_party/quiche/src/quic/core/quic_path_validator.cc b/net/third_party/quiche/src/quic/core/quic_path_validator.cc
+index 0722216a8..834a491e0 100644
+--- a/net/third_party/quiche/src/quic/core/quic_path_validator.cc
++++ b/net/third_party/quiche/src/quic/core/quic_path_validator.cc
+@@ -68,7 +68,7 @@ void QuicPathValidator::OnPathResponse(const QuicPathFrameBuffer& probing_data,
+ void QuicPathValidator::StartPathValidation(
+ std::unique_ptr<QuicPathValidationContext> context,
+ std::unique_ptr<ResultDelegate> result_delegate) {
+- DCHECK_NE(nullptr, context);
++ DCHECK_NE(nullptr, context.get());
+ QUIC_DLOG(INFO) << "Start validating path " << *context
+ << " via writer: " << context->WriterToUse();
+ if (path_context_ != nullptr) {
diff --git a/www-client/chromium/files/chromium-89-sstream.patch b/www-client/chromium/files/chromium-89-sstream.patch
new file mode 100644
index 0000000..8204fe2
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-sstream.patch
@@ -0,0 +1,344 @@
+diff --git a/chrome/browser/ui/webui/internals/web_app/web_app_internals_page_handler_impl.cc b/chrome/browser/ui/webui/internals/web_app/web_app_internals_page_handler_impl.cc
+index 339fc5a6c..5e23be6fb 100644
+--- a/chrome/browser/ui/webui/internals/web_app/web_app_internals_page_handler_impl.cc
++++ b/chrome/browser/ui/webui/internals/web_app/web_app_internals_page_handler_impl.cc
+@@ -23,7 +23,7 @@ namespace {
+
+ template <typename T>
+ std::string ConvertToString(const T& value) {
+- return (std::stringstream() << value).str();
++ return static_cast<const std::stringstream &>(std::stringstream() << value).str();
+ }
+
+ } // namespace
+diff --git a/chrome/browser/web_applications/external_web_app_manager.cc b/chrome/browser/web_applications/external_web_app_manager.cc
+index 3da14c154..64c2e80a9 100644
+--- a/chrome/browser/web_applications/external_web_app_manager.cc
++++ b/chrome/browser/web_applications/external_web_app_manager.cc
+@@ -100,7 +100,7 @@ LoadedConfigs LoadConfigsBlocking(const base::FilePath& config_dir) {
+ deserializer.Deserialize(nullptr, &error_msg);
+ if (!app_config) {
+ result.errors.push_back(
+- (std::stringstream() << file << " was not valid JSON: " << error_msg)
++ static_cast<const std::stringstream &>(std::stringstream() << file << " was not valid JSON: " << error_msg)
+ .str());
+ VLOG(1) << result.errors.back();
+ continue;
+diff --git a/chrome/browser/web_applications/external_web_app_utils.cc b/chrome/browser/web_applications/external_web_app_utils.cc
+index 8b3414d06..6d0718198 100644
+--- a/chrome/browser/web_applications/external_web_app_utils.cc
++++ b/chrome/browser/web_applications/external_web_app_utils.cc
+@@ -158,7 +158,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ options.require_manifest = true;
+
+ if (app_config.type() != base::Value::Type::DICTIONARY) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " was not a dictionary as the top level")
+ .str();
+ }
+@@ -166,18 +166,18 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ // user_type
+ const base::Value* value = app_config.FindListKey(kUserType);
+ if (!value) {
+- return (std::stringstream() << file << " missing " << kUserType).str();
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " missing " << kUserType).str();
+ }
+ for (const auto& item : value->GetList()) {
+ if (!item.is_string()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " has invalid " << kUserType << item)
+ .str();
+ }
+ options.user_type_allowlist.push_back(item.GetString());
+ }
+ if (options.user_type_allowlist.empty()) {
+- return (std::stringstream() << file << " has empty " << kUserType).str();
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " has empty " << kUserType).str();
+ }
+
+ // feature_name
+@@ -188,18 +188,18 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ // app_url
+ value = app_config.FindKeyOfType(kAppUrl, base::Value::Type::STRING);
+ if (!value) {
+- return (std::stringstream() << file << " had a missing " << kAppUrl).str();
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " had a missing " << kAppUrl).str();
+ }
+ options.install_url = GURL(value->GetString());
+ if (!options.install_url.is_valid()) {
+- return (std::stringstream() << file << " had an invalid " << kAppUrl).str();
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " had an invalid " << kAppUrl).str();
+ }
+
+ // only_for_new_users
+ value = app_config.FindKey(kOnlyForNewUsers);
+ if (value) {
+ if (!value->is_bool()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kOnlyForNewUsers)
+ .str();
+ }
+@@ -211,7 +211,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kHideFromUser);
+ if (value) {
+ if (!value->is_bool()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kHideFromUser)
+ .str();
+ }
+@@ -226,7 +226,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kCreateShortcuts);
+ if (value) {
+ if (!value->is_bool()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kCreateShortcuts)
+ .str();
+ }
+@@ -242,7 +242,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kDisableIfArcSupported);
+ if (value) {
+ if (!value->is_bool()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kDisableIfArcSupported)
+ .str();
+ }
+@@ -253,7 +253,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kDisableIfTabletFormFactor);
+ if (value) {
+ if (!value->is_bool()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kDisableIfTabletFormFactor)
+ .str();
+ }
+@@ -263,7 +263,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ // launch_container
+ value = app_config.FindKeyOfType(kLaunchContainer, base::Value::Type::STRING);
+ if (!value) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kLaunchContainer)
+ .str();
+ }
+@@ -273,7 +273,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ } else if (launch_container_str == kLaunchContainerWindow) {
+ options.user_display_mode = DisplayMode::kStandalone;
+ } else {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kLaunchContainer << ": "
+ << launch_container_str)
+ .str();
+@@ -283,7 +283,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kLaunchQueryParams);
+ if (value) {
+ if (!value->is_string()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kLaunchQueryParams)
+ .str();
+ }
+@@ -294,7 +294,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kLoadAndAwaitServiceWorkerRegistration);
+ if (value) {
+ if (!value->is_bool()) {
+- return (std::stringstream() << file << " had an invalid "
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " had an invalid "
+ << kLoadAndAwaitServiceWorkerRegistration)
+ .str();
+ }
+@@ -305,20 +305,20 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kServiceWorkerRegistrationUrl);
+ if (value) {
+ if (!options.load_and_await_service_worker_registration) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " should not specify a "
+ << kServiceWorkerRegistrationUrl << " while "
+ << kLoadAndAwaitServiceWorkerRegistration << " is disabled")
+ .str();
+ }
+ if (!value->is_string()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kServiceWorkerRegistrationUrl)
+ .str();
+ }
+ options.service_worker_registration_url.emplace(value->GetString());
+ if (!options.service_worker_registration_url->is_valid()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kServiceWorkerRegistrationUrl)
+ .str();
+ }
+@@ -328,7 +328,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kUninstallAndReplace);
+ if (value) {
+ if (!value->is_list()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kUninstallAndReplace)
+ .str();
+ }
+@@ -336,7 +336,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+
+ for (const auto& app_id_value : uninstall_and_replace_values) {
+ if (!app_id_value.is_string()) {
+- return (std::stringstream() << file << " had an invalid "
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " had an invalid "
+ << kUninstallAndReplace << " entry")
+ .str();
+ }
+@@ -348,7 +348,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ value = app_config.FindKey(kOnlyUseOfflineManifest);
+ if (value) {
+ if (!value->is_bool()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " had an invalid " << kOnlyUseOfflineManifest)
+ .str();
+ }
+@@ -369,7 +369,7 @@ OptionsOrError ParseConfig(FileUtilsWrapper& file_utils,
+ }
+
+ if (options.only_use_app_info_factory && !options.app_info_factory) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << kOnlyUseOfflineManifest << " set with no "
+ << kOfflineManifest << " available")
+ .str();
+@@ -389,7 +389,7 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ const std::string* name_string =
+ offline_manifest.FindStringKey(kOfflineManifestName);
+ if (!name_string) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " " << kOfflineManifestName
+ << " missing or invalid.")
+ .str();
+@@ -397,7 +397,7 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ if (!base::UTF8ToUTF16(name_string->data(), name_string->size(),
+ &app_info.title) ||
+ app_info.title.empty()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " " << kOfflineManifestName
+ << " invalid: " << *name_string)
+ .str();
+@@ -407,14 +407,14 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ const std::string* start_url_string =
+ offline_manifest.FindStringKey(kOfflineManifestStartUrl);
+ if (!start_url_string) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " "
+ << kOfflineManifestStartUrl << " missing or invalid.")
+ .str();
+ }
+ app_info.start_url = GURL(*start_url_string);
+ if (!app_info.start_url.is_valid()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " "
+ << kOfflineManifestStartUrl << " invalid: " << *start_url_string)
+ .str();
+@@ -424,21 +424,21 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ const std::string* scope_string =
+ offline_manifest.FindStringKey(kOfflineManifestScope);
+ if (!scope_string) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " " << kOfflineManifestScope
+ << " missing or invalid.")
+ .str();
+ }
+ app_info.scope = GURL(*scope_string);
+ if (!app_info.scope.is_valid()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " " << kOfflineManifestScope
+ << " invalid: " << *scope_string)
+ .str();
+ }
+ if (!base::StartsWith(app_info.start_url.path(), app_info.scope.path(),
+ base::CompareCase::SENSITIVE)) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " " << kOfflineManifestScope
+ << " (" << app_info.start_url << ") not within "
+ << kOfflineManifestScope << " (" << app_info.scope << ").")
+@@ -449,14 +449,14 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ const std::string* display_string =
+ offline_manifest.FindStringKey(kOfflineManifestDisplay);
+ if (!display_string) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " " << kOfflineManifestDisplay
+ << " missing or invalid.")
+ .str();
+ }
+ DisplayMode display = blink::DisplayModeFromString(*display_string);
+ if (display == DisplayMode::kUndefined) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " " << kOfflineManifestDisplay
+ << " invalid: " << display_string)
+ .str();
+@@ -467,14 +467,14 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ const base::Value* icon_files =
+ offline_manifest.FindListKey(kOfflineManifestIconAnyPngs);
+ if (!icon_files || icon_files->GetList().empty()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " "
+ << kOfflineManifestIconAnyPngs << " missing, empty or invalid.")
+ .str();
+ }
+ for (const base::Value& icon_file : icon_files->GetList()) {
+ if (!icon_file.is_string()) {
+- return (std::stringstream()
++ return static_cast<const std::stringstream &>(std::stringstream()
+ << file << " " << kOfflineManifest << " "
+ << kOfflineManifestIconAnyPngs << " " << icon_file << " invalid.")
+ .str();
+@@ -483,7 +483,7 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ base::FilePath icon_path = dir.AppendASCII(icon_file.GetString());
+ std::string icon_data;
+ if (!file_utils.ReadFileToString(icon_path, &icon_data)) {
+- return (std::stringstream() << file << " " << kOfflineManifest << " "
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " " << kOfflineManifest << " "
+ << kOfflineManifestIconAnyPngs << " "
+ << icon_file << " failed to read.")
+ .str();
+@@ -493,14 +493,14 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ if (!gfx::PNGCodec::Decode(
+ reinterpret_cast<const unsigned char*>(icon_data.c_str()),
+ icon_data.size(), &bitmap)) {
+- return (std::stringstream() << file << " " << kOfflineManifest << " "
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " " << kOfflineManifest << " "
+ << kOfflineManifestIconAnyPngs << " "
+ << icon_file << " failed to decode.")
+ .str();
+ }
+
+ if (bitmap.width() != bitmap.height()) {
+- return (std::stringstream() << file << " " << kOfflineManifest << " "
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " " << kOfflineManifest << " "
+ << kOfflineManifestIconAnyPngs << " "
+ << icon_file << " must be square: "
+ << bitmap.width() << "x" << bitmap.height())
+@@ -521,7 +521,7 @@ WebApplicationInfoFactoryOrError ParseOfflineManifest(
+ SkColor theme_color;
+ if (!theme_color_argb_hex ||
+ !base::HexStringToUInt(*theme_color_argb_hex, &theme_color)) {
+- return (std::stringstream() << file << " " << kOfflineManifest << " "
++ return static_cast<const std::stringstream &>(std::stringstream() << file << " " << kOfflineManifest << " "
+ << kOfflineManifestThemeColorArgbHex
+ << " invalid: " << *theme_color_value)
+ .str();
diff --git a/www-client/chromium/files/chromium-89-uigfx-image-skia.patch b/www-client/chromium/files/chromium-89-uigfx-image-skia.patch
new file mode 100644
index 0000000..a96dd00
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-uigfx-image-skia.patch
@@ -0,0 +1,22 @@
+diff --git a/ui/gfx/image/image_skia.cc b/ui/gfx/image/image_skia.cc
+index 6d2748d67..31dfdf5d2 100644
+--- a/ui/gfx/image/image_skia.cc
++++ b/ui/gfx/image/image_skia.cc
+@@ -125,7 +125,7 @@ class ImageSkiaStorage : public base::RefCountedThreadSafe<ImageSkiaStorage> {
+ // one and rescale the image.
+ // Right now only Windows uses 2 and other platforms use 1 by default.
+ // TODO(mukai, oshima): abandon 1 code path and use 2 for every platforms.
+- std::vector<const ImageSkiaRep>::iterator FindRepresentation(
++ std::vector<ImageSkiaRep>::const_iterator FindRepresentation(
+ float scale,
+ bool fetch_new_image) const;
+
+@@ -211,7 +211,7 @@ bool ImageSkiaStorage::HasRepresentationAtAllScales() const {
+ return source_ && source_->HasRepresentationAtAllScales();
+ }
+
+-std::vector<const ImageSkiaRep>::iterator ImageSkiaStorage::FindRepresentation(
++std::vector<ImageSkiaRep>::const_iterator ImageSkiaStorage::FindRepresentation(
+ float scale,
+ bool fetch_new_image) const {
+ auto closest_iter = image_reps_.end();
diff --git a/www-client/chromium/files/chromium-89-webui-config-include.patch b/www-client/chromium/files/chromium-89-webui-config-include.patch
new file mode 100644
index 0000000..5ed2bd5
--- /dev/null
+++ b/www-client/chromium/files/chromium-89-webui-config-include.patch
@@ -0,0 +1,12 @@
+diff --git a/ui/webui/webui_config.h b/ui/webui/webui_config.h
+index 29990bd5a..44918fa34 100644
+--- a/ui/webui/webui_config.h
++++ b/ui/webui/webui_config.h
+@@ -6,6 +6,7 @@
+ #define UI_WEBUI_WEBUI_CONFIG_H_
+
+ #include <string>
++#include <memory>
+
+ #include "base/strings/string_piece.h"
+
diff --git a/www-client/chromium/files/chromium-90-blink-disable-clang-format.patch b/www-client/chromium/files/chromium-90-blink-disable-clang-format.patch
new file mode 100644
index 0000000..2d8ea05
--- /dev/null
+++ b/www-client/chromium/files/chromium-90-blink-disable-clang-format.patch
@@ -0,0 +1,19 @@
+diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py
+index e24764c13..7c5add8f4 100644
+--- a/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py
++++ b/third_party/blink/renderer/bindings/scripts/bind_gen/codegen_utils.py
+@@ -171,13 +171,5 @@ def write_code_node_to_file(code_node, filepath):
+
+ rendered_text = render_code_node(code_node)
+
+- format_result = style_format.auto_format(rendered_text, filename=filepath)
+- if not format_result.did_succeed:
+- raise RuntimeError("Style-formatting failed: filename = {filename}\n"
+- "---- stderr ----\n"
+- "{stderr}:".format(
+- filename=format_result.filename,
+- stderr=format_result.error_message))
+-
+ web_idl.file_io.write_to_file_if_changed(
+- filepath, format_result.contents.encode('utf-8'))
++ filepath, rendered_text.encode('utf-8'))
diff --git a/www-client/chromium/files/chromium-90-compositor-dcheck.patch b/www-client/chromium/files/chromium-90-compositor-dcheck.patch
new file mode 100644
index 0000000..d718a68
--- /dev/null
+++ b/www-client/chromium/files/chromium-90-compositor-dcheck.patch
@@ -0,0 +1,13 @@
+diff --git a/cc/metrics/compositor_frame_reporter.cc b/cc/metrics/compositor_frame_reporter.cc
+index fcad7a8cd..152b724c8 100644
+--- a/cc/metrics/compositor_frame_reporter.cc
++++ b/cc/metrics/compositor_frame_reporter.cc
+@@ -960,7 +960,7 @@ void CompositorFrameReporter::ReportEventLatencyHistograms() const {
+ "EventLatency." + total_latency_stage_name;
+
+ for (const auto& event_metrics : events_metrics_) {
+- DCHECK(event_metrics);
++ DCHECK(event_metrics.get());
+ const std::string histogram_base_name =
+ GetEventLatencyHistogramBaseName(*event_metrics);
+ const int event_type_index = static_cast<int>(event_metrics->type());
diff --git a/www-client/chromium/files/chromium-90-disable-nomerge.patch b/www-client/chromium/files/chromium-90-disable-nomerge.patch
new file mode 100644
index 0000000..fc4049f
--- /dev/null
+++ b/www-client/chromium/files/chromium-90-disable-nomerge.patch
@@ -0,0 +1,13 @@
+diff --git a/base/compiler_specific.h b/base/compiler_specific.h
+index 14a5d6870..b4d31d77e 100644
+--- a/base/compiler_specific.h
++++ b/base/compiler_specific.h
+@@ -334,7 +334,7 @@ inline constexpr bool AnalyzerAssumeTrue(bool arg) {
+
+ // Use nomerge attribute to disable optimization of merging multiple same calls.
+ #if defined(__clang__) && __has_attribute(nomerge) && !defined(OS_CHROMEOS)
+-#define NOMERGE [[clang::nomerge]]
++#define NOMERGE //[[clang::nomerge]]
+ #else
+ #define NOMERGE
+ #endif
diff --git a/www-client/chromium/files/chromium-90-langdetect-include.patch b/www-client/chromium/files/chromium-90-langdetect-include.patch
new file mode 100644
index 0000000..39cd0a8
--- /dev/null
+++ b/www-client/chromium/files/chromium-90-langdetect-include.patch
@@ -0,0 +1,12 @@
+diff --git a/components/translate/core/language_detection/ngram_hash_ops_utils.cc b/components/translate/core/language_detection/ngram_hash_ops_utils.cc
+index cf9103358..dd03a3db4 100644
+--- a/components/translate/core/language_detection/ngram_hash_ops_utils.cc
++++ b/components/translate/core/language_detection/ngram_hash_ops_utils.cc
+@@ -4,6 +4,7 @@
+
+ #include "components/translate/core/language_detection/ngram_hash_ops_utils.h"
+
++#include <cstring>
+ #include <vector>
+
+ #include "third_party/utf/src/include/utf.h"
diff --git a/www-client/chromium/files/chromium-90-quantization-util-stdint.patch b/www-client/chromium/files/chromium-90-quantization-util-stdint.patch
new file mode 100644
index 0000000..060763a
--- /dev/null
+++ b/www-client/chromium/files/chromium-90-quantization-util-stdint.patch
@@ -0,0 +1,12 @@
+diff --git a/components/translate/core/language_detection/quantization_utils.h b/components/translate/core/language_detection/quantization_utils.h
+index eb8f6d1e9..699a48897 100644
+--- a/components/translate/core/language_detection/quantization_utils.h
++++ b/components/translate/core/language_detection/quantization_utils.h
+@@ -7,6 +7,7 @@
+
+ #include <algorithm>
+ #include <cmath>
++#include <cstdint>
+
+ namespace translate {
+
diff --git a/www-client/chromium/files/chromium-90-quiche-uniqueptr.patch b/www-client/chromium/files/chromium-90-quiche-uniqueptr.patch
new file mode 100644
index 0000000..21183a6
--- /dev/null
+++ b/www-client/chromium/files/chromium-90-quiche-uniqueptr.patch
@@ -0,0 +1,13 @@
+diff --git a/net/third_party/quiche/src/quic/core/quic_path_validator.cc b/net/third_party/quiche/src/quic/core/quic_path_validator.cc
+index f2abef054..b419c9070 100644
+--- a/net/third_party/quiche/src/quic/core/quic_path_validator.cc
++++ b/net/third_party/quiche/src/quic/core/quic_path_validator.cc
+@@ -68,7 +68,7 @@ void QuicPathValidator::OnPathResponse(const QuicPathFrameBuffer& probing_data,
+ void QuicPathValidator::StartPathValidation(
+ std::unique_ptr<QuicPathValidationContext> context,
+ std::unique_ptr<ResultDelegate> result_delegate) {
+- QUICHE_DCHECK(context);
++ QUICHE_DCHECK(context.get());
+ QUIC_DLOG(INFO) << "Start validating path " << *context
+ << " via writer: " << context->WriterToUse();
+ if (path_context_ != nullptr) {
diff --git a/www-client/chromium/files/chromium-90-ruy-include.patch b/www-client/chromium/files/chromium-90-ruy-include.patch
new file mode 100644
index 0000000..81d5367
--- /dev/null
+++ b/www-client/chromium/files/chromium-90-ruy-include.patch
@@ -0,0 +1,24 @@
+From 714092f336bb14d2fcc27396ec323b3d843bb962 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Thu, 4 Mar 2021 15:05:46 +0000
+Subject: [PATCH] IWYU: include limits for std::numeric_limits
+
+---
+ third_party/ruy/src/ruy/block_map.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/third_party/ruy/src/ruy/block_map.cc b/third_party/ruy/src/ruy/block_map.cc
+index 44e5039..a7a7559 100644
+--- a/third_party/ruy/src/ruy/block_map.cc
++++ b/third_party/ruy/src/ruy/block_map.cc
+@@ -17,6 +17,7 @@ limitations under the License.
+
+ #include <algorithm>
+ #include <cstdint>
++#include <limits>
+
+ #ifdef RUY_MAKEBLOCKMAP_DEBUG
+ #include <cstdio>
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-91-clipboard-ozone.patch b/www-client/chromium/files/chromium-91-clipboard-ozone.patch
new file mode 100644
index 0000000..5aac0ee
--- /dev/null
+++ b/www-client/chromium/files/chromium-91-clipboard-ozone.patch
@@ -0,0 +1,48 @@
+diff --git a/ui/base/clipboard/clipboard_factory_ozone.cc b/ui/base/clipboard/clipboard_factory_ozone.cc
+index e2a061df8..5463e6bf9 100644
+--- a/ui/base/clipboard/clipboard_factory_ozone.cc
++++ b/ui/base/clipboard/clipboard_factory_ozone.cc
+@@ -50,7 +50,8 @@ Clipboard* Clipboard::Create() {
+ #if defined(USE_X11) && BUILDFLAG(IS_CHROMEOS_LACROS)
+ NOTREACHED() << "System clipboard integration should be in place.";
+ #endif
+- return new ClipboardNonBacked;
++ return nullptr;
++ //return new ClipboardNonBacked;
+ }
+
+ } // namespace ui
+diff --git a/ui/base/clipboard/clipboard_non_backed.cc b/ui/base/clipboard/clipboard_non_backed.cc
+index a6e85cd2f..734c7e961 100644
+--- a/ui/base/clipboard/clipboard_non_backed.cc
++++ b/ui/base/clipboard/clipboard_non_backed.cc
+@@ -688,6 +688,7 @@ void ClipboardNonBacked::ReadData(const ClipboardFormatType& format,
+ #endif
+ }
+
++#if defined(USE_OZONE)
+ bool ClipboardNonBacked::IsSelectionBufferAvailable() const {
+ #if BUILDFLAG(IS_CHROMEOS_ASH)
+ return false;
+@@ -695,6 +696,7 @@ bool ClipboardNonBacked::IsSelectionBufferAvailable() const {
+ return true;
+ #endif
+ }
++#endif // defined(USE_OZONE)
+
+ void ClipboardNonBacked::WritePortableRepresentations(
+ ClipboardBuffer buffer,
+diff --git a/ui/base/clipboard/clipboard_non_backed.h b/ui/base/clipboard/clipboard_non_backed.h
+index d14ff0ff6..702f02a84 100644
+--- a/ui/base/clipboard/clipboard_non_backed.h
++++ b/ui/base/clipboard/clipboard_non_backed.h
+@@ -97,7 +97,9 @@ class COMPONENT_EXPORT(UI_BASE_CLIPBOARD) ClipboardNonBacked
+ void ReadData(const ClipboardFormatType& format,
+ const DataTransferEndpoint* data_dst,
+ std::string* result) const override;
++#if defined(USE_OZONE)
+ bool IsSelectionBufferAvailable() const override;
++#endif // defined(USE_OZONE)
+ void WritePortableRepresentations(
+ ClipboardBuffer buffer,
+ const ObjectMap& objects,
diff --git a/www-client/chromium/files/chromium-91-compiler-r1.patch b/www-client/chromium/files/chromium-91-compiler-r1.patch
new file mode 100644
index 0000000..8724c6b
--- /dev/null
+++ b/www-client/chromium/files/chromium-91-compiler-r1.patch
@@ -0,0 +1,165 @@
+From f4d0b0eb899005b4b8b6388e1d8bb82cc0018fc8 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Wed, 7 Apr 2021 08:50:04 +0000
+Subject: [PATCH] Disable various compiler configs
+
+---
+ build/config/compiler/BUILD.gn | 59 ++++++++++------------------------
+ 1 file changed, 17 insertions(+), 42 deletions(-)
+
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 72ea590..539672d 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -273,8 +273,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -518,24 +516,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- cflags += [
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- if (!is_debug && use_thin_lto && is_a_target_toolchain) {
+- if (is_win) {
+- ldflags += [ "-mllvm:-instcombine-lower-dbg-declare=0" ]
+- } else {
+- ldflags += [ "-Wl,-mllvm,-instcombine-lower-dbg-declare=0" ]
+- }
+- }
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
+@@ -1643,7 +1623,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1652,10 +1632,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1664,15 +1640,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -2068,7 +2035,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -2103,7 +2071,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2143,7 +2112,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2175,7 +2145,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2200,7 +2171,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2319,7 +2291,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2422,7 +2395,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2481,7 +2455,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
+--
+2.26.3
diff --git a/www-client/chromium/files/chromium-91-compiler.patch b/www-client/chromium/files/chromium-91-compiler.patch
new file mode 100644
index 0000000..e45d4a3
--- /dev/null
+++ b/www-client/chromium/files/chromium-91-compiler.patch
@@ -0,0 +1,154 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 72ea590d6..bc23dce78 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -273,8 +273,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -518,24 +516,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- cflags += [
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- if (!is_debug && use_thin_lto && is_a_target_toolchain) {
+- if (is_win) {
+- ldflags += [ "-mllvm:-instcombine-lower-dbg-declare=0" ]
+- } else {
+- ldflags += [ "-Wl,-mllvm,-instcombine-lower-dbg-declare=0" ]
+- }
+- }
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
+@@ -1643,7 +1623,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = [ ]
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1652,10 +1632,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1664,15 +1640,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -2068,7 +2035,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -2103,7 +2071,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2143,7 +2112,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2175,7 +2145,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2200,7 +2171,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2319,7 +2291,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2422,7 +2395,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2481,7 +2455,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-91-disable-nomerge.patch b/www-client/chromium/files/chromium-91-disable-nomerge.patch
new file mode 100644
index 0000000..11dc66a
--- /dev/null
+++ b/www-client/chromium/files/chromium-91-disable-nomerge.patch
@@ -0,0 +1,13 @@
+diff --git a/base/compiler_specific.h b/base/compiler_specific.h
+index d662305dc..8e99145da 100644
+--- a/base/compiler_specific.h
++++ b/base/compiler_specific.h
+@@ -341,7 +341,7 @@ inline constexpr bool AnalyzerAssumeTrue(bool arg) {
+
+ // Use nomerge attribute to disable optimization of merging multiple same calls.
+ #if defined(__clang__) && __has_attribute(nomerge)
+-#define NOMERGE [[clang::nomerge]]
++#define NOMERGE //[[clang::nomerge]]
+ #else
+ #define NOMERGE
+ #endif
diff --git a/www-client/chromium/files/chromium-91-libyuv-aarch64.patch b/www-client/chromium/files/chromium-91-libyuv-aarch64.patch
new file mode 100644
index 0000000..77b8f4c
--- /dev/null
+++ b/www-client/chromium/files/chromium-91-libyuv-aarch64.patch
@@ -0,0 +1,91 @@
+diff --git a/third_party/libyuv/source/row_neon64.cc b/third_party/libyuv/source/row_neon64.cc
+index 350c964..2aab413 100644
+--- a/third_party/libyuv/source/row_neon64.cc
++++ b/third_party/libyuv/source/row_neon64.cc
+@@ -1835,7 +1835,7 @@ void ARGBToAB64Row_NEON(const uint8_t* src_argb,
+ : "+r"(src_argb), // %0
+ "+r"(dst_ab64), // %1
+ "+r"(width) // %2
+- : "m"(kShuffleARGBToABGR) // %3
++ : "Q"(kShuffleARGBToABGR) // %3
+ : "cc", "memory", "v0", "v1", "v2", "v3", "v4");
+ }
+
+@@ -1859,7 +1859,7 @@ void AR64ToARGBRow_NEON(const uint16_t* src_ar64,
+ : "+r"(src_ar64), // %0
+ "+r"(dst_argb), // %1
+ "+r"(width) // %2
+- : "m"(kShuffleAR64ToARGB) // %3
++ : "Q"(kShuffleAR64ToARGB) // %3
+ : "cc", "memory", "v0", "v1", "v2", "v3", "v4");
+ }
+
+@@ -1883,7 +1883,7 @@ void AB64ToARGBRow_NEON(const uint16_t* src_ab64,
+ : "+r"(src_ab64), // %0
+ "+r"(dst_argb), // %1
+ "+r"(width) // %2
+- : "m"(kShuffleAB64ToARGB) // %3
++ : "Q"(kShuffleAB64ToARGB) // %3
+ : "cc", "memory", "v0", "v1", "v2", "v3", "v4");
+ }
+
+diff --git a/third_party/libyuv/source/scale_neon64.cc b/third_party/libyuv/source/scale_neon64.cc
+index 8656fec..9f9636e 100644
+--- a/third_party/libyuv/source/scale_neon64.cc
++++ b/third_party/libyuv/source/scale_neon64.cc
+@@ -601,8 +601,8 @@ void ScaleRowUp2_Bilinear_NEON(const uint8_t* src_ptr,
+ "umlal v4.8h, v1.8b, v31.8b \n" // 3*near+far (2, odd)
+ "umlal v5.8h, v0.8b, v31.8b \n" // 3*near+far (2, even)
+
+- "mov v0.8h, v4.8h \n"
+- "mov v1.8h, v5.8h \n"
++ "mov v0.16b, v4.16b \n"
++ "mov v1.16b, v5.16b \n"
+ "mla v4.8h, v2.8h, v30.8h \n" // 9 3 3 1 (1, odd)
+ "mla v5.8h, v3.8h, v30.8h \n" // 9 3 3 1 (1, even)
+ "mla v2.8h, v0.8h, v30.8h \n" // 9 3 3 1 (2, odd)
+@@ -642,7 +642,7 @@ void ScaleRowUp2_Linear_12_NEON(const uint16_t* src_ptr,
+ "ld1 {v1.8h}, [%1], #16 \n" // 12345678 (16b)
+ "prfm pldl1keep, [%0, 448] \n" // prefetch 7 lines ahead
+
+- "mov v2.8h, v0.8h \n"
++ "mov v2.16b, v0.16b \n"
+ "mla v0.8h, v1.8h, v31.8h \n" // 3*near+far (odd)
+ "mla v1.8h, v2.8h, v31.8h \n" // 3*near+far (even)
+
+@@ -679,7 +679,7 @@ void ScaleRowUp2_Bilinear_12_NEON(const uint16_t* src_ptr,
+ "ld1 {v3.8h}, [%2], #16 \n" // 12345678 (16b)
+ "prfm pldl1keep, [%0, 448] \n" // prefetch 7 lines ahead
+
+- "mov v0.8h, v2.8h \n"
++ "mov v0.16b, v2.16b \n"
+ "mla v2.8h, v3.8h, v31.8h \n" // 3*near+far (odd)
+ "mla v3.8h, v0.8h, v31.8h \n" // 3*near+far (even)
+
+@@ -687,12 +687,12 @@ void ScaleRowUp2_Bilinear_12_NEON(const uint16_t* src_ptr,
+ "ld1 {v5.8h}, [%3], #16 \n" // 12345678 (16b)
+ "prfm pldl1keep, [%1, 448] \n" // prefetch 7 lines ahead
+
+- "mov v0.8h, v4.8h \n"
++ "mov v0.16b, v4.16b \n"
+ "mla v4.8h, v5.8h, v31.8h \n" // 3*near+far (odd)
+ "mla v5.8h, v0.8h, v31.8h \n" // 3*near+far (even)
+
+- "mov v0.8h, v4.8h \n"
+- "mov v1.8h, v5.8h \n"
++ "mov v0.16b, v4.16b \n"
++ "mov v1.16b, v5.16b \n"
+ "mla v4.8h, v2.8h, v31.8h \n" // 9 3 3 1 (1, odd)
+ "mla v5.8h, v3.8h, v31.8h \n" // 9 3 3 1 (1, even)
+ "mla v2.8h, v0.8h, v31.8h \n" // 9 3 3 1 (2, odd)
+@@ -887,8 +887,8 @@ void ScaleUVRowUp2_Bilinear_NEON(const uint8_t* src_ptr,
+ "umlal v4.8h, v1.8b, v31.8b \n" // 3*near+far (2, odd)
+ "umlal v5.8h, v0.8b, v31.8b \n" // 3*near+far (2, even)
+
+- "mov v0.8h, v4.8h \n"
+- "mov v1.8h, v5.8h \n"
++ "mov v0.16b, v4.16b \n"
++ "mov v1.16b, v5.16b \n"
+ "mla v4.8h, v2.8h, v30.8h \n" // 9 3 3 1 (1, odd)
+ "mla v5.8h, v3.8h, v30.8h \n" // 9 3 3 1 (1, even)
+ "mla v2.8h, v0.8h, v30.8h \n" // 9 3 3 1 (2, odd)
diff --git a/www-client/chromium/files/chromium-92-ClassPropertyCaster-namespace.patch b/www-client/chromium/files/chromium-92-ClassPropertyCaster-namespace.patch
new file mode 100644
index 0000000..08d7416
--- /dev/null
+++ b/www-client/chromium/files/chromium-92-ClassPropertyCaster-namespace.patch
@@ -0,0 +1,46 @@
+From 546b72d3b31e5d42e4d6cb783def2c89c977c5a6 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 7 May 2021 14:34:29 +0000
+Subject: [PATCH] GCC: drop anonymous namespace from ClassPropertyCaster
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Explicit template specialization is done for ui::ElementIdentifier
+in another header. GCC fails to compile this with:
+
+../../ui/base/interaction/element_identifier.h:208:7: error:
+ explicit specialization of ‘template<class T>
+ class ui::{anonymous}::ClassPropertyCaster’ outside its
+ namespace must use a nested-name-specifier
+
+This is a known GCC bug (https://gcc.gnu.org/PR92598).
+---
+ ui/base/class_property.h | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/ui/base/class_property.h b/ui/base/class_property.h
+index 4af52ae..25c00e7 100644
+--- a/ui/base/class_property.h
++++ b/ui/base/class_property.h
+@@ -137,8 +137,6 @@ class COMPONENT_EXPORT(UI_BASE) PropertyHandler {
+ std::map<const void*, Value> prop_map_;
+ };
+
+-namespace {
+-
+ // No single new-style cast works for every conversion to/from int64_t, so we
+ // need this helper class.
+ template<typename T>
+@@ -162,8 +160,6 @@ class ClassPropertyCaster<base::TimeDelta> {
+ }
+ };
+
+-} // namespace
+-
+ namespace subtle {
+
+ class COMPONENT_EXPORT(UI_BASE) PropertyHelper {
+--
+2.26.3
+
diff --git a/www-client/chromium/files/chromium-92-base_atomic_include.patch b/www-client/chromium/files/chromium-92-base_atomic_include.patch
new file mode 100644
index 0000000..e6faf77
--- /dev/null
+++ b/www-client/chromium/files/chromium-92-base_atomic_include.patch
@@ -0,0 +1,12 @@
+diff --git a/base/threading/platform_thread.cc b/base/threading/platform_thread.cc
+index 3dc218163..f167af4ff 100644
+--- a/base/threading/platform_thread.cc
++++ b/base/threading/platform_thread.cc
+@@ -4,6 +4,7 @@
+
+ #include "base/threading/platform_thread.h"
+
++#include <atomic>
+ #include <memory>
+
+ #include "base/feature_list.h"
diff --git a/www-client/chromium/files/chromium-92-glibc-2.33.patch b/www-client/chromium/files/chromium-92-glibc-2.33.patch
new file mode 100644
index 0000000..3b2ec6b
--- /dev/null
+++ b/www-client/chromium/files/chromium-92-glibc-2.33.patch
@@ -0,0 +1,146 @@
+diff --git a/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc b/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+index 05c39f0f5..3a9d6f359 100644
+--- a/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
++++ b/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+@@ -280,6 +280,18 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
+ return RestrictKillTarget(current_pid, sysno);
+ }
+
++#if defined(__NR_newfstatat)
++ if (sysno == __NR_newfstatat) {
++ return RewriteFstatatSIGSYS();
++ }
++#endif
++
++#if defined(__NR_fstatat64)
++ if (sysno == __NR_fstatat64) {
++ return RewriteFstatatSIGSYS();
++ }
++#endif
++
+ // memfd_create is considered a file system syscall which below will be denied
+ // with fs_denied_errno, we need memfd_create for Mojo shared memory channels.
+ if (sysno == __NR_memfd_create) {
+diff --git a/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc b/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
+index 76eb32493..09aa3f0b1 100644
+--- a/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
++++ b/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
+@@ -6,6 +6,8 @@
+
+ #include "sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h"
+
++#include <errno.h>
++#include <fcntl.h>
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
+@@ -355,6 +357,35 @@ intptr_t SIGSYSSchedHandler(const struct arch_seccomp_data& args,
+ return -ENOSYS;
+ }
+
++intptr_t SIGSYSFstatatHandler(const struct arch_seccomp_data& args,
++ void* aux) {
++ switch (args.nr) {
++#if defined(__NR_newfstatat)
++ case __NR_newfstatat:
++#endif
++#if defined(__NR_fstatat64)
++ case __NR_fstatat64:
++#endif
++#if defined(__NR_newfstatat) || defined(__NR_fstatat64)
++ if (*reinterpret_cast<const char *>(args.args[1]) == '\0'
++ && args.args[3] == static_cast<uint64_t>(AT_EMPTY_PATH)) {
++ return sandbox::sys_fstat64(static_cast<int>(args.args[0]),
++ reinterpret_cast<struct stat64 *>(args.args[2]));
++ } else {
++ errno = EACCES;
++ return -1;
++ }
++ break;
++#endif
++ }
++
++ CrashSIGSYS_Handler(args, aux);
++
++ // Should never be reached.
++ RAW_CHECK(false);
++ return -ENOSYS;
++}
++
+ bpf_dsl::ResultExpr CrashSIGSYS() {
+ return bpf_dsl::Trap(CrashSIGSYS_Handler, NULL);
+ }
+@@ -387,6 +418,10 @@ bpf_dsl::ResultExpr RewriteSchedSIGSYS() {
+ return bpf_dsl::Trap(SIGSYSSchedHandler, NULL);
+ }
+
++bpf_dsl::ResultExpr RewriteFstatatSIGSYS() {
++ return bpf_dsl::Trap(SIGSYSFstatatHandler, NULL);
++}
++
+ void AllocateCrashKeys() {
+ #if !defined(OS_NACL_NONSFI)
+ if (seccomp_crash_key)
+diff --git a/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h b/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
+index 7a958b93b..d0bfab74b 100644
+--- a/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
++++ b/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
+@@ -62,6 +62,10 @@ SANDBOX_EXPORT intptr_t SIGSYSPtraceFailure(const arch_seccomp_data& args,
+ // sched_setparam(), sched_setscheduler()
+ SANDBOX_EXPORT intptr_t SIGSYSSchedHandler(const arch_seccomp_data& args,
+ void* aux);
++// If the fstatat syscall is actually a disguised fstat, calls the regular fstat
++// syscall, otherwise, crashes in the same way as CrashSIGSYS_Handler.
++SANDBOX_EXPORT intptr_t SIGSYSFstatatHandler(const struct arch_seccomp_data& args,
++ void* aux);
+
+ // Variants of the above functions for use with bpf_dsl.
+ SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYS();
+@@ -72,6 +76,7 @@ SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYSKill();
+ SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYSFutex();
+ SANDBOX_EXPORT bpf_dsl::ResultExpr CrashSIGSYSPtrace();
+ SANDBOX_EXPORT bpf_dsl::ResultExpr RewriteSchedSIGSYS();
++SANDBOX_EXPORT bpf_dsl::ResultExpr RewriteFstatatSIGSYS();
+
+ // Allocates a crash key so that Seccomp information can be recorded.
+ void AllocateCrashKeys();
+diff --git a/sandbox/linux/services/syscall_wrappers.cc b/sandbox/linux/services/syscall_wrappers.cc
+index fcfd2aa12..5396b36da 100644
+--- a/sandbox/linux/services/syscall_wrappers.cc
++++ b/sandbox/linux/services/syscall_wrappers.cc
+@@ -261,4 +261,13 @@ int sys_sigaction(int signum,
+
+ #endif // defined(MEMORY_SANITIZER)
+
++SANDBOX_EXPORT int sys_fstat64(int fd, struct stat64 *buf)
++{
++#if defined(__NR_fstat64)
++ return syscall(__NR_fstat64, fd, buf);
++#else
++ return syscall(__NR_fstat, fd, buf);
++#endif
++}
++
+ } // namespace sandbox
+diff --git a/sandbox/linux/services/syscall_wrappers.h b/sandbox/linux/services/syscall_wrappers.h
+index 1975bfbd8..ed7ee5a1c 100644
+--- a/sandbox/linux/services/syscall_wrappers.h
++++ b/sandbox/linux/services/syscall_wrappers.h
+@@ -17,6 +17,7 @@ struct sock_fprog;
+ struct rlimit64;
+ struct cap_hdr;
+ struct cap_data;
++struct stat64;
+
+ namespace sandbox {
+
+@@ -84,6 +85,9 @@ SANDBOX_EXPORT int sys_sigaction(int signum,
+ const struct sigaction* act,
+ struct sigaction* oldact);
+
++// Recent glibc rewrites fstat to fstatat.
++SANDBOX_EXPORT int sys_fstat64(int fd, struct stat64 *buf);
++
+ } // namespace sandbox
+
+ #endif // SANDBOX_LINUX_SERVICES_SYSCALL_WRAPPERS_H_
diff --git a/www-client/chromium/files/chromium-92-platform_thread-include.patch b/www-client/chromium/files/chromium-92-platform_thread-include.patch
new file mode 100644
index 0000000..881a2a0
--- /dev/null
+++ b/www-client/chromium/files/chromium-92-platform_thread-include.patch
@@ -0,0 +1,24 @@
+From 49c9ab14152b52edc9f0d8f1245039792f270315 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 7 May 2021 09:53:18 +0000
+Subject: [PATCH] IWYU: include atomic for std::atomic
+
+---
+ base/threading/platform_thread.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/base/threading/platform_thread.cc b/base/threading/platform_thread.cc
+index 3dc2181..f167af4 100644
+--- a/base/threading/platform_thread.cc
++++ b/base/threading/platform_thread.cc
+@@ -4,6 +4,7 @@
+
+ #include "base/threading/platform_thread.h"
+
++#include <atomic>
+ #include <memory>
+
+ #include "base/feature_list.h"
+--
+2.26.3
+
diff --git a/www-client/chromium/files/chromium-92-sql-cursor.patch b/www-client/chromium/files/chromium-92-sql-cursor.patch
new file mode 100644
index 0000000..a4864ba
--- /dev/null
+++ b/www-client/chromium/files/chromium-92-sql-cursor.patch
@@ -0,0 +1,231 @@
+From 80368f8ba7a8bab13440463a254888311efe3986 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Tue, 04 May 2021 15:00:19 +0000
+Subject: [PATCH] sql: make VirtualCursor standard layout type
+
+sql::recover::VirtualCursor needs to be a standard layout type, but
+has members of type std::unique_ptr. However, std::unique_ptr is not
+guaranteed to be standard layout. Compiling with clang combined with
+gcc-11 libstdc++ fails because of this. Replace std::unique_ptr with
+raw pointers.
+
+Bug: 1189788
+Change-Id: Ia6dc388cc5ef1c0f2afc75f8ca45b9f12687ca9c
+---
+
+diff --git a/sql/recover_module/btree.cc b/sql/recover_module/btree.cc
+index 9ecaafe..839318a 100644
+--- a/sql/recover_module/btree.cc
++++ b/sql/recover_module/btree.cc
+@@ -135,16 +135,25 @@
+ "Move the destructor to the .cc file if it's non-trival");
+ #endif // !DCHECK_IS_ON()
+
+-LeafPageDecoder::LeafPageDecoder(DatabasePageReader* db_reader) noexcept
+- : page_id_(db_reader->page_id()),
+- db_reader_(db_reader),
+- cell_count_(ComputeCellCount(db_reader)),
+- next_read_index_(0),
+- last_record_size_(0) {
++void LeafPageDecoder::Initialize(DatabasePageReader* db_reader) {
++ DCHECK(db_reader);
+ DCHECK(IsOnValidPage(db_reader));
++ page_id_ = db_reader->page_id();
++ db_reader_ = db_reader;
++ cell_count_ = ComputeCellCount(db_reader);
++ next_read_index_ = 0;
++ last_record_size_ = 0;
+ DCHECK(DatabasePageReader::IsValidPageId(page_id_));
+ }
+
++void LeafPageDecoder::Reset() {
++ db_reader_ = nullptr;
++ page_id_ = 0;
++ cell_count_ = 0;
++ next_read_index_ = 0;
++ last_record_size_ = 0;
++}
++
+ bool LeafPageDecoder::TryAdvance() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(CanAdvance());
+diff --git a/sql/recover_module/btree.h b/sql/recover_module/btree.h
+index d76d076..33114b0 100644
+--- a/sql/recover_module/btree.h
++++ b/sql/recover_module/btree.h
+@@ -102,7 +102,7 @@
+ //
+ // |db_reader| must have been used to read an inner page of a table B-tree.
+ // |db_reader| must outlive this instance.
+- explicit LeafPageDecoder(DatabasePageReader* db_reader) noexcept;
++ explicit LeafPageDecoder() noexcept = default;
+ ~LeafPageDecoder() noexcept = default;
+
+ LeafPageDecoder(const LeafPageDecoder&) = delete;
+@@ -150,6 +150,15 @@
+ // read as long as CanAdvance() returns true.
+ bool TryAdvance();
+
++ // Initialize with DatabasePageReader
++ void Initialize(DatabasePageReader* db_reader);
++
++ // Reset internal DatabasePageReader
++ void Reset();
++
++ // True if DatabasePageReader is valid
++ bool IsValid() { return (db_reader_ != nullptr); }
++
+ // True if the given reader may point to an inner page in a table B-tree.
+ //
+ // The last ReadPage() call on |db_reader| must have succeeded.
+@@ -163,14 +172,14 @@
+ static int ComputeCellCount(DatabasePageReader* db_reader);
+
+ // The number of the B-tree page this reader is reading.
+- const int64_t page_id_;
++ int64_t page_id_;
+ // Used to read the tree page.
+ //
+ // Raw pointer usage is acceptable because this instance's owner is expected
+ // to ensure that the DatabasePageReader outlives this.
+- DatabasePageReader* const db_reader_;
++ DatabasePageReader* db_reader_;
+ // Caches the ComputeCellCount() value for this reader's page.
+- const int cell_count_ = ComputeCellCount(db_reader_);
++ int cell_count_;
+
+ // The reader's cursor state.
+ //
+diff --git a/sql/recover_module/cursor.cc b/sql/recover_module/cursor.cc
+index 0029ff9..42548bc 100644
+--- a/sql/recover_module/cursor.cc
++++ b/sql/recover_module/cursor.cc
+@@ -26,7 +26,7 @@
+ int VirtualCursor::First() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ inner_decoders_.clear();
+- leaf_decoder_ = nullptr;
++ leaf_decoder_.Reset();
+
+ AppendPageDecoder(table_->root_page_id());
+ return Next();
+@@ -36,18 +36,18 @@
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ record_reader_.Reset();
+
+- while (!inner_decoders_.empty() || leaf_decoder_.get()) {
+- if (leaf_decoder_.get()) {
+- if (!leaf_decoder_->CanAdvance()) {
++ while (!inner_decoders_.empty() || leaf_decoder_.IsValid()) {
++ if (leaf_decoder_.IsValid()) {
++ if (!leaf_decoder_.CanAdvance()) {
+ // The leaf has been exhausted. Remove it from the DFS stack.
+- leaf_decoder_ = nullptr;
++ leaf_decoder_.Reset();
+ continue;
+ }
+- if (!leaf_decoder_->TryAdvance())
++ if (!leaf_decoder_.TryAdvance())
+ continue;
+
+- if (!payload_reader_.Initialize(leaf_decoder_->last_record_size(),
+- leaf_decoder_->last_record_offset())) {
++ if (!payload_reader_.Initialize(leaf_decoder_.last_record_size(),
++ leaf_decoder_.last_record_offset())) {
+ continue;
+ }
+ if (!record_reader_.Initialize())
+@@ -99,13 +99,13 @@
+ int64_t VirtualCursor::RowId() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(record_reader_.IsInitialized());
+- DCHECK(leaf_decoder_.get());
+- return leaf_decoder_->last_record_rowid();
++ DCHECK(leaf_decoder_.IsValid());
++ return leaf_decoder_.last_record_rowid();
+ }
+
+ void VirtualCursor::AppendPageDecoder(int page_id) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+- DCHECK(leaf_decoder_.get() == nullptr)
++ DCHECK(!leaf_decoder_.IsValid())
+ << __func__
+ << " must only be called when the current path has no leaf decoder";
+
+@@ -113,7 +113,7 @@
+ return;
+
+ if (LeafPageDecoder::IsOnValidPage(&db_reader_)) {
+- leaf_decoder_ = std::make_unique<LeafPageDecoder>(&db_reader_);
++ leaf_decoder_.Initialize(&db_reader_);
+ return;
+ }
+
+diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h
+index afcd690..b15c31d 100644
+--- a/sql/recover_module/cursor.h
++++ b/sql/recover_module/cursor.h
+@@ -129,7 +129,7 @@
+ std::vector<std::unique_ptr<InnerPageDecoder>> inner_decoders_;
+
+ // Decodes the leaf page containing records.
+- std::unique_ptr<LeafPageDecoder> leaf_decoder_;
++ LeafPageDecoder leaf_decoder_;
+
+ SEQUENCE_CHECKER(sequence_checker_);
+ };
+diff --git a/sql/recover_module/pager.cc b/sql/recover_module/pager.cc
+index 58e75de..5fe9620 100644
+--- a/sql/recover_module/pager.cc
++++ b/sql/recover_module/pager.cc
+@@ -23,8 +23,7 @@
+ "ints are not appropriate for representing page IDs");
+
+ DatabasePageReader::DatabasePageReader(VirtualTable* table)
+- : page_data_(std::make_unique<uint8_t[]>(table->page_size())),
+- table_(table) {
++ : page_data_(), table_(table) {
+ DCHECK(table != nullptr);
+ DCHECK(IsValidPageSize(table->page_size()));
+ }
+@@ -57,8 +56,8 @@
+ std::numeric_limits<int64_t>::max(),
+ "The |read_offset| computation above may overflow");
+
+- int sqlite_status =
+- RawRead(sqlite_file, read_size, read_offset, page_data_.get());
++ int sqlite_status = RawRead(sqlite_file, read_size, read_offset,
++ const_cast<uint8_t*>(page_data_.data()));
+
+ // |page_id_| needs to be set to kInvalidPageId if the read failed.
+ // Otherwise, future ReadPage() calls with the previous |page_id_| value
+diff --git a/sql/recover_module/pager.h b/sql/recover_module/pager.h
+index 0e388ddc..99314e3 100644
+--- a/sql/recover_module/pager.h
++++ b/sql/recover_module/pager.h
+@@ -5,6 +5,7 @@
+ #ifndef SQL_RECOVER_MODULE_PAGER_H_
+ #define SQL_RECOVER_MODULE_PAGER_H_
+
++#include <array>
+ #include <cstdint>
+ #include <memory>
+
+@@ -70,7 +71,7 @@
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK_NE(page_id_, kInvalidPageId)
+ << "Successful ReadPage() required before accessing pager state";
+- return page_data_.get();
++ return page_data_.data();
+ }
+
+ // The number of bytes in the page read by the last ReadPage() call.
+@@ -137,7 +138,7 @@
+ int page_id_ = kInvalidPageId;
+ // Stores the bytes of the last page successfully read by ReadPage().
+ // The content is undefined if the last call to ReadPage() did not succeed.
+- const std::unique_ptr<uint8_t[]> page_data_;
++ const std::array<uint8_t, kMaxPageSize> page_data_;
+ // Raw pointer usage is acceptable because this instance's owner is expected
+ // to ensure that the VirtualTable outlives this.
+ VirtualTable* const table_;
diff --git a/www-client/chromium/files/chromium-93-AXPropertyNode-private.patch b/www-client/chromium/files/chromium-93-AXPropertyNode-private.patch
new file mode 100644
index 0000000..f184af6
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-AXPropertyNode-private.patch
@@ -0,0 +1,43 @@
+From 0cdb42df76598037785ca33eb66bdc9ac2c16fd9 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Sat, 5 Jun 2021 11:16:29 +0000
+Subject: [PATCH] libstdc++: make constructors public in AXPropertyNode
+
+Making std::allocator<AXPropertyNode> friend of AXPropertyNode is
+useless, because std::allocator is free to delegate the task of
+construction to a free function or class which is not friend of
+AXPropertyNode. libstdc++ uses __gnu_cxx::new_allocator<T> for
+construction and fails if constructors of AXPropertyNode are
+private.
+---
+ ui/accessibility/platform/inspect/ax_property_node.h | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/ui/accessibility/platform/inspect/ax_property_node.h b/ui/accessibility/platform/inspect/ax_property_node.h
+index 35b8309..78bafa5 100644
+--- a/ui/accessibility/platform/inspect/ax_property_node.h
++++ b/ui/accessibility/platform/inspect/ax_property_node.h
+@@ -93,7 +93,6 @@ class AX_EXPORT AXPropertyNode final {
+ // Returns a tree-like string representation of the node.
+ std::string ToTreeString(const std::string& indent = "") const;
+
+- private:
+ using iterator = std::string::const_iterator;
+
+ explicit AXPropertyNode(iterator key_begin,
+@@ -105,11 +104,10 @@ class AX_EXPORT AXPropertyNode final {
+ iterator value_begin,
+ iterator value_end);
+
++ private:
+ // Builds a property node struct for a string of NAME(ARG1, ..., ARGN) format,
+ // where each ARG is a scalar value or a string of the same format.
+ static iterator Parse(AXPropertyNode* node, iterator begin, iterator end);
+-
+- friend class std::allocator<AXPropertyNode>;
+ };
+
+ } // namespace ui
+--
+2.31.1
+
diff --git a/www-client/chromium/files/chromium-93-EnumTable-crash.patch b/www-client/chromium/files/chromium-93-EnumTable-crash.patch
new file mode 100644
index 0000000..a5c2def
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-EnumTable-crash.patch
@@ -0,0 +1,79 @@
+diff --git a/components/cast_channel/enum_table.h b/components/cast_channel/enum_table.h
+index a63ae86..83ada65 100644
+--- a/components/cast_channel/enum_table.h
++++ b/components/cast_channel/enum_table.h
+@@ -8,6 +8,7 @@
+ #include <cstdint>
+ #include <cstring>
+ #include <ostream>
++#include <vector>
+
+ #include "base/check_op.h"
+ #include "base/macros.h"
+@@ -213,7 +214,7 @@ class
+
+ template <typename E>
+ friend class EnumTable;
+- DISALLOW_COPY_AND_ASSIGN(GenericEnumTableEntry);
++ DISALLOW_ASSIGN(GenericEnumTableEntry);
+ };
+
+ // Yes, these constructors really needs to be inlined. Even though they look
+@@ -251,8 +252,7 @@ class EnumTable {
+ // Constructor for regular entries.
+ constexpr Entry(E value, base::StringPiece str)
+ : GenericEnumTableEntry(static_cast<int32_t>(value), str) {}
+-
+- DISALLOW_COPY_AND_ASSIGN(Entry);
++ DISALLOW_ASSIGN(Entry);
+ };
+
+ static_assert(sizeof(E) <= sizeof(int32_t),
+@@ -307,15 +307,14 @@ class EnumTable {
+ if (is_sorted_) {
+ const std::size_t index = static_cast<std::size_t>(value);
+ if (ANALYZER_ASSUME_TRUE(index < data_.size())) {
+- const auto& entry = data_.begin()[index];
++ const auto& entry = data_[index];
+ if (ANALYZER_ASSUME_TRUE(entry.has_str()))
+ return entry.str();
+ }
+ return absl::nullopt;
+ }
+ return GenericEnumTableEntry::FindByValue(
+- reinterpret_cast<const GenericEnumTableEntry*>(data_.begin()),
+- data_.size(), static_cast<int32_t>(value));
++ &data_[0], data_.size(), static_cast<int32_t>(value));
+ }
+
+ // This overload of GetString is designed for cases where the argument is a
+@@ -343,8 +342,7 @@ class EnumTable {
+ // enum value directly.
+ absl::optional<E> GetEnum(base::StringPiece str) const {
+ auto* entry = GenericEnumTableEntry::FindByString(
+- reinterpret_cast<const GenericEnumTableEntry*>(data_.begin()),
+- data_.size(), str);
++ &data_[0], data_.size(), str);
+ return entry ? static_cast<E>(entry->value) : absl::optional<E>();
+ }
+
+@@ -359,7 +357,7 @@ class EnumTable {
+ // Align the data on a cache line boundary.
+ alignas(64)
+ #endif
+- std::initializer_list<Entry> data_;
++ const std::vector<Entry> data_;
+ bool is_sorted_;
+
+ constexpr EnumTable(std::initializer_list<Entry> data, bool is_sorted)
+@@ -371,8 +369,8 @@ class EnumTable {
+
+ for (std::size_t i = 0; i < data.size(); i++) {
+ for (std::size_t j = i + 1; j < data.size(); j++) {
+- const Entry& ei = data.begin()[i];
+- const Entry& ej = data.begin()[j];
++ const Entry& ei = data[i];
++ const Entry& ej = data[j];
+ DCHECK(ei.value != ej.value)
+ << "Found duplicate enum values at indices " << i << " and " << j;
+ DCHECK(!(ei.has_str() && ej.has_str() && ei.str() == ej.str()))
diff --git a/www-client/chromium/files/chromium-93-InkDropHost-crash.patch b/www-client/chromium/files/chromium-93-InkDropHost-crash.patch
new file mode 100644
index 0000000..54d16db
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-InkDropHost-crash.patch
@@ -0,0 +1,25 @@
+diff --git a/ui/views/animation/ink_drop_host_view.h b/ui/views/animation/ink_drop_host_view.h
+index bd0975b..e5df288 100644
+--- a/ui/views/animation/ink_drop_host_view.h
++++ b/ui/views/animation/ink_drop_host_view.h
+@@ -238,6 +238,11 @@ class VIEWS_EXPORT InkDropHost {
+ // Used to observe View and inform the InkDrop of host-transform changes.
+ ViewLayerTransformObserver host_view_transform_observer_;
+
++ // Declared before |ink_drop_|, because InkDropImpl may call
++ // RemoveInkDropLayer on partly destructed InkDropHost. In
++ // that case |ink_drop_mask_| must be still valid.
++ std::unique_ptr<views::InkDropMask> ink_drop_mask_;
++
+ // Should not be accessed directly. Use GetInkDrop() instead.
+ std::unique_ptr<InkDrop> ink_drop_;
+
+@@ -261,8 +266,6 @@ class VIEWS_EXPORT InkDropHost {
+ int ink_drop_small_corner_radius_ = 2;
+ int ink_drop_large_corner_radius_ = 4;
+
+- std::unique_ptr<views::InkDropMask> ink_drop_mask_;
+-
+ base::RepeatingCallback<std::unique_ptr<InkDrop>()> create_ink_drop_callback_;
+ base::RepeatingCallback<std::unique_ptr<InkDropRipple>()>
+ create_ink_drop_ripple_callback_;
diff --git a/www-client/chromium/files/chromium-93-cart-include.patch b/www-client/chromium/files/chromium-93-cart-include.patch
new file mode 100644
index 0000000..82ca038
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-cart-include.patch
@@ -0,0 +1,13 @@
+diff --git a/chrome/browser/cart/cart_db.h b/chrome/browser/cart/cart_db.h
+index 82b2a56c3..0f8472f3e 100644
+--- a/chrome/browser/cart/cart_db.h
++++ b/chrome/browser/cart/cart_db.h
+@@ -5,6 +5,8 @@
+ #ifndef CHROME_BROWSER_CART_CART_DB_H_
+ #define CHROME_BROWSER_CART_CART_DB_H_
+
++#include <vector>
++
+ #include "base/callback_helpers.h"
+ #include "base/memory/weak_ptr.h"
+
diff --git a/www-client/chromium/files/chromium-93-devtools-msg-dispatcher-include.patch b/www-client/chromium/files/chromium-93-devtools-msg-dispatcher-include.patch
new file mode 100644
index 0000000..ddb94cf
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-devtools-msg-dispatcher-include.patch
@@ -0,0 +1,12 @@
+diff --git a/chrome/browser/devtools/devtools_embedder_message_dispatcher.h b/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
+index 12f8500b7..4007112f3 100644
+--- a/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
++++ b/chrome/browser/devtools/devtools_embedder_message_dispatcher.h
+@@ -8,6 +8,7 @@
+ #include <map>
+ #include <memory>
+ #include <string>
++#include <vector>
+
+ #include "base/callback.h"
+ #include "ui/gfx/geometry/insets.h"
diff --git a/www-client/chromium/files/chromium-93-dnsprefetch-include.patch b/www-client/chromium/files/chromium-93-dnsprefetch-include.patch
new file mode 100644
index 0000000..c8d63b6
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-dnsprefetch-include.patch
@@ -0,0 +1,12 @@
+diff --git a/components/network_hints/renderer/renderer_dns_prefetch.h b/components/network_hints/renderer/renderer_dns_prefetch.h
+index 87f1bb1bb..3ead6b3a6 100644
+--- a/components/network_hints/renderer/renderer_dns_prefetch.h
++++ b/components/network_hints/renderer/renderer_dns_prefetch.h
+@@ -25,6 +25,7 @@
+
+ #include <map>
+ #include <string>
++#include <vector>
+
+ #include "base/callback.h"
+ #include "base/macros.h"
diff --git a/www-client/chromium/files/chromium-93-ext-autoconfirm-include.patch b/www-client/chromium/files/chromium-93-ext-autoconfirm-include.patch
new file mode 100644
index 0000000..6bf4fcf
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-ext-autoconfirm-include.patch
@@ -0,0 +1,12 @@
+diff --git a/extensions/browser/extension_dialog_auto_confirm.cc b/extensions/browser/extension_dialog_auto_confirm.cc
+index adb4ac3f9..be8b161bc 100644
+--- a/extensions/browser/extension_dialog_auto_confirm.cc
++++ b/extensions/browser/extension_dialog_auto_confirm.cc
+@@ -4,6 +4,7 @@
+
+ #include "extensions/browser/extension_dialog_auto_confirm.h"
+
++#include <cstring>
+ #include <utility>
+
+ #include "base/check.h"
diff --git a/www-client/chromium/files/chromium-93-gpu-ipc-include.patch b/www-client/chromium/files/chromium-93-gpu-ipc-include.patch
new file mode 100644
index 0000000..24793fa
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-gpu-ipc-include.patch
@@ -0,0 +1,13 @@
+diff --git a/gpu/ipc/gpu_task_scheduler_helper.h b/gpu/ipc/gpu_task_scheduler_helper.h
+index 4315277b2..01c9c8ed9 100644
+--- a/gpu/ipc/gpu_task_scheduler_helper.h
++++ b/gpu/ipc/gpu_task_scheduler_helper.h
+@@ -5,6 +5,8 @@
+ #ifndef GPU_IPC_GPU_TASK_SCHEDULER_HELPER_H_
+ #define GPU_IPC_GPU_TASK_SCHEDULER_HELPER_H_
+
++#include <vector>
++
+ #include "base/callback.h"
+ #include "gpu/command_buffer/common/sync_token.h"
+ #include "gpu/command_buffer/service/sequence_id.h"
diff --git a/www-client/chromium/files/chromium-93-hid-chooser-include.patch b/www-client/chromium/files/chromium-93-hid-chooser-include.patch
new file mode 100644
index 0000000..7ae8938
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-hid-chooser-include.patch
@@ -0,0 +1,13 @@
+diff --git a/content/public/browser/hid_chooser.h b/content/public/browser/hid_chooser.h
+index d40cf59be..b2b9613cf 100644
+--- a/content/public/browser/hid_chooser.h
++++ b/content/public/browser/hid_chooser.h
+@@ -5,6 +5,8 @@
+ #ifndef CONTENT_PUBLIC_BROWSER_HID_CHOOSER_H_
+ #define CONTENT_PUBLIC_BROWSER_HID_CHOOSER_H_
+
++#include <vector>
++
+ #include "base/callback_forward.h"
+ #include "base/macros.h"
+ #include "content/common/content_export.h"
diff --git a/www-client/chromium/files/chromium-93-lang-prefs-include.patch b/www-client/chromium/files/chromium-93-lang-prefs-include.patch
new file mode 100644
index 0000000..7b1829d
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-lang-prefs-include.patch
@@ -0,0 +1,12 @@
+diff --git a/components/language/core/browser/language_prefs.h b/components/language/core/browser/language_prefs.h
+index 28c89546c..617d1ed91 100644
+--- a/components/language/core/browser/language_prefs.h
++++ b/components/language/core/browser/language_prefs.h
+@@ -7,6 +7,7 @@
+
+ #include <set>
+ #include <string>
++#include <vector>
+
+ #include "base/macros.h"
+ #include "base/strings/string_piece.h"
diff --git a/www-client/chromium/files/chromium-93-login-detection-include.patch b/www-client/chromium/files/chromium-93-login-detection-include.patch
new file mode 100644
index 0000000..e2a6aa3
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-login-detection-include.patch
@@ -0,0 +1,12 @@
+diff --git a/chrome/browser/login_detection/oauth_login_detector.h b/chrome/browser/login_detection/oauth_login_detector.h
+index 6844529c7..c0c3b185f 100644
+--- a/chrome/browser/login_detection/oauth_login_detector.h
++++ b/chrome/browser/login_detection/oauth_login_detector.h
+@@ -7,6 +7,7 @@
+
+ #include <set>
+ #include <string>
++#include <vector>
+
+ #include "third_party/abseil-cpp/absl/types/optional.h"
+ #include "url/gurl.h"
diff --git a/www-client/chromium/files/chromium-93-media-ffmpeg-type.patch b/www-client/chromium/files/chromium-93-media-ffmpeg-type.patch
new file mode 100644
index 0000000..ca8b98f
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-media-ffmpeg-type.patch
@@ -0,0 +1,36 @@
+diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
+index ac4713b07..492a9a37d 100644
+--- a/media/filters/ffmpeg_demuxer.cc
++++ b/media/filters/ffmpeg_demuxer.cc
+@@ -427,11 +427,11 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
+ scoped_refptr<DecoderBuffer> buffer;
+
+ if (type() == DemuxerStream::TEXT) {
+- size_t id_size = 0;
++ int id_size = 0;
+ uint8_t* id_data = av_packet_get_side_data(
+ packet.get(), AV_PKT_DATA_WEBVTT_IDENTIFIER, &id_size);
+
+- size_t settings_size = 0;
++ int settings_size = 0;
+ uint8_t* settings_data = av_packet_get_side_data(
+ packet.get(), AV_PKT_DATA_WEBVTT_SETTINGS, &settings_size);
+
+@@ -443,7 +443,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
+ buffer = DecoderBuffer::CopyFrom(packet->data, packet->size,
+ side_data.data(), side_data.size());
+ } else {
+- size_t side_data_size = 0;
++ int side_data_size = 0;
+ uint8_t* side_data = av_packet_get_side_data(
+ packet.get(), AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, &side_data_size);
+
+@@ -504,7 +504,7 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
+ packet->size - data_offset);
+ }
+
+- size_t skip_samples_size = 0;
++ int skip_samples_size = 0;
+ const uint32_t* skip_samples_ptr =
+ reinterpret_cast<const uint32_t*>(av_packet_get_side_data(
+ packet.get(), AV_PKT_DATA_SKIP_SAMPLES, &skip_samples_size));
diff --git a/www-client/chromium/files/chromium-93-media-history-include.patch b/www-client/chromium/files/chromium-93-media-history-include.patch
new file mode 100644
index 0000000..4253fd7
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-media-history-include.patch
@@ -0,0 +1,12 @@
+diff --git a/chrome/browser/media/history/media_history_origin_table.h b/chrome/browser/media/history/media_history_origin_table.h
+index c28d5e3a8..32e1757de 100644
+--- a/chrome/browser/media/history/media_history_origin_table.h
++++ b/chrome/browser/media/history/media_history_origin_table.h
+@@ -6,6 +6,7 @@
+ #define CHROME_BROWSER_MEDIA_HISTORY_MEDIA_HISTORY_ORIGIN_TABLE_H_
+
+ #include <string>
++#include <vector>
+
+ #include "base/updateable_sequenced_task_runner.h"
+ #include "chrome/browser/media/history/media_history_table_base.h"
diff --git a/www-client/chromium/files/chromium-93-net-http-include.patch b/www-client/chromium/files/chromium-93-net-http-include.patch
new file mode 100644
index 0000000..fe64bb7
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-net-http-include.patch
@@ -0,0 +1,12 @@
+diff --git a/net/http/http_basic_state.h b/net/http/http_basic_state.h
+index 5fd1ee514..06c46df6b 100644
+--- a/net/http/http_basic_state.h
++++ b/net/http/http_basic_state.h
+@@ -10,6 +10,7 @@
+
+ #include <memory>
+ #include <string>
++#include <vector>
+
+ #include "base/macros.h"
+ #include "base/memory/ref_counted.h"
diff --git a/www-client/chromium/files/chromium-93-payment-include.patch b/www-client/chromium/files/chromium-93-payment-include.patch
new file mode 100644
index 0000000..588931f
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-payment-include.patch
@@ -0,0 +1,12 @@
+diff --git a/components/payments/core/journey_logger.h b/components/payments/core/journey_logger.h
+index 026b38e7e..e63673de3 100644
+--- a/components/payments/core/journey_logger.h
++++ b/components/payments/core/journey_logger.h
+@@ -6,6 +6,7 @@
+ #define COMPONENTS_PAYMENTS_CORE_JOURNEY_LOGGER_H_
+
+ #include <string>
++#include <vector>
+
+ #include "base/macros.h"
+ #include "base/time/time.h"
diff --git a/www-client/chromium/files/chromium-93-pdfium-include.patch b/www-client/chromium/files/chromium-93-pdfium-include.patch
new file mode 100644
index 0000000..2f601ed
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-pdfium-include.patch
@@ -0,0 +1,12 @@
+diff --git a/third_party/pdfium/core/fxcodec/jpx/cjpx_decoder.cpp b/third_party/pdfium/core/fxcodec/jpx/cjpx_decoder.cpp
+index c66985a7f..83a9ba132 100644
+--- a/third_party/pdfium/core/fxcodec/jpx/cjpx_decoder.cpp
++++ b/third_party/pdfium/core/fxcodec/jpx/cjpx_decoder.cpp
+@@ -6,6 +6,7 @@
+
+ #include "core/fxcodec/jpx/cjpx_decoder.h"
+
++#include <cstring>
+ #include <algorithm>
+ #include <limits>
+ #include <utility>
diff --git a/www-client/chromium/files/chromium-93-phishing-classifier-include.patch b/www-client/chromium/files/chromium-93-phishing-classifier-include.patch
new file mode 100644
index 0000000..64a95fe
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-phishing-classifier-include.patch
@@ -0,0 +1,12 @@
+diff --git a/components/safe_browsing/content/renderer/phishing_classifier/phishing_classifier.h b/components/safe_browsing/content/renderer/phishing_classifier/phishing_classifier.h
+index e86d14e8d..b3e74406c 100644
+--- a/components/safe_browsing/content/renderer/phishing_classifier/phishing_classifier.h
++++ b/components/safe_browsing/content/renderer/phishing_classifier/phishing_classifier.h
+@@ -23,6 +23,7 @@
+ #include <memory>
+ #include <set>
+ #include <string>
++#include <vector>
+
+ #include "base/callback.h"
+ #include "base/macros.h"
diff --git a/www-client/chromium/files/chromium-93-pwdmgr-include-r1.patch b/www-client/chromium/files/chromium-93-pwdmgr-include-r1.patch
new file mode 100644
index 0000000..6721b8b
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-pwdmgr-include-r1.patch
@@ -0,0 +1,12 @@
+diff --git a/components/password_manager/core/browser/hash_password_manager.h b/components/password_manager/core/browser/hash_password_manager.h
+index c762c5a8c..85e656edc 100644
+--- a/components/password_manager/core/browser/hash_password_manager.h
++++ b/components/password_manager/core/browser/hash_password_manager.h
+@@ -6,6 +6,7 @@
+ #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_HASH_PASSWORD_MANAGER_H_
+
+ #include <string>
++#include <vector>
+
+ #include "base/callback.h"
+ #include "base/callback_list.h"
diff --git a/www-client/chromium/files/chromium-93-pwdmgr-include.patch b/www-client/chromium/files/chromium-93-pwdmgr-include.patch
new file mode 100644
index 0000000..041be9f
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-pwdmgr-include.patch
@@ -0,0 +1,25 @@
+diff --git a/components/password_manager/core/browser/field_info_table.h b/components/password_manager/core/browser/field_info_table.h
+index fb6d84005..e4c88aab3 100644
+--- a/components/password_manager/core/browser/field_info_table.h
++++ b/components/password_manager/core/browser/field_info_table.h
+@@ -5,6 +5,8 @@
+ #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_FIELD_INFO_TABLE_H_
+ #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_FIELD_INFO_TABLE_H_
+
++#include <vector>
++
+ #include "base/macros.h"
+ #include "base/time/time.h"
+ #include "components/autofill/core/browser/field_types.h"
+diff --git a/components/password_manager/core/browser/hash_password_manager.h b/components/password_manager/core/browser/hash_password_manager.h
+index c762c5a8c..85e656edc 100644
+--- a/components/password_manager/core/browser/hash_password_manager.h
++++ b/components/password_manager/core/browser/hash_password_manager.h
+@@ -6,6 +6,7 @@
+ #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_HASH_PASSWORD_MANAGER_H_
+
+ #include <string>
++#include <vector>
+
+ #include "base/callback.h"
+ #include "base/callback_list.h"
diff --git a/www-client/chromium/files/chromium-93-quiche-logging-include.patch b/www-client/chromium/files/chromium-93-quiche-logging-include.patch
new file mode 100644
index 0000000..405a6ae
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-quiche-logging-include.patch
@@ -0,0 +1,13 @@
+diff --git a/net/third_party/quiche/overrides/quiche_platform_impl/quiche_logging_impl.h b/net/third_party/quiche/overrides/quiche_platform_impl/quiche_logging_impl.h
+index 8ff5e27f8..326ed9307 100644
+--- a/net/third_party/quiche/overrides/quiche_platform_impl/quiche_logging_impl.h
++++ b/net/third_party/quiche/overrides/quiche_platform_impl/quiche_logging_impl.h
+@@ -5,6 +5,8 @@
+ #ifndef NET_THIRD_PARTY_QUICHE_OVERRIDES_QUICHE_PLATFORM_IMPL_QUICHE_LOGGING_IMPL_H_
+ #define NET_THIRD_PARTY_QUICHE_OVERRIDES_QUICHE_PLATFORM_IMPL_QUICHE_LOGGING_IMPL_H_
+
++#include <vector>
++
+ #include "base/check_op.h"
+ #include "base/logging.h"
+ #include "base/notreached.h"
diff --git a/www-client/chromium/files/chromium-93-site_settings_helper-initialzation.patch b/www-client/chromium/files/chromium-93-site_settings_helper-initialzation.patch
new file mode 100644
index 0000000..6551b31
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-site_settings_helper-initialzation.patch
@@ -0,0 +1,37 @@
+From 7ef6d4ad7ddc7f0c4124bc538c4bd3a8efdd37cd Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 4 Jun 2021 06:52:30 +0000
+Subject: [PATCH] GCC: fix brace-initialization with NoDestructor
+
+GCC requires brace-initialization for NoDestructor and
+std::vector<T> for base_types. Therefore change to double
+brace-initialzation.
+---
+ chrome/browser/ui/webui/settings/site_settings_helper.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc
+index 7831684..4478800 100644
+--- a/chrome/browser/ui/webui/settings/site_settings_helper.cc
++++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc
+@@ -410,7 +410,7 @@ const std::vector<ContentSettingsType>& GetVisiblePermissionCategories() {
+ // First build the list of permissions that will be shown regardless of
+ // `origin`. Some categories such as COOKIES store their data in a custom way,
+ // so are not included here.
+- static base::NoDestructor<std::vector<ContentSettingsType>> base_types({
++ static base::NoDestructor<std::vector<ContentSettingsType>> base_types{{
+ ContentSettingsType::AR, ContentSettingsType::AUTOMATIC_DOWNLOADS,
+ ContentSettingsType::BACKGROUND_SYNC,
+ ContentSettingsType::CLIPBOARD_READ_WRITE,
+@@ -429,7 +429,7 @@ const std::vector<ContentSettingsType>& GetVisiblePermissionCategories() {
+ ContentSettingsType::SENSORS, ContentSettingsType::SERIAL_GUARD,
+ ContentSettingsType::SOUND, ContentSettingsType::USB_GUARD,
+ ContentSettingsType::VR,
+- });
++ }};
+ static bool initialized = false;
+ if (!initialized) {
+ // The permission categories in this block are only shown when running with
+--
+2.31.1
+
diff --git a/www-client/chromium/files/chromium-93-sms-fetcher-include.patch b/www-client/chromium/files/chromium-93-sms-fetcher-include.patch
new file mode 100644
index 0000000..91d92de
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-sms-fetcher-include.patch
@@ -0,0 +1,24 @@
+diff --git a/chrome/browser/sharing/sms/sms_remote_fetcher.h b/chrome/browser/sharing/sms/sms_remote_fetcher.h
+index 2cbe6acdd..678c1b2e5 100644
+--- a/chrome/browser/sharing/sms/sms_remote_fetcher.h
++++ b/chrome/browser/sharing/sms/sms_remote_fetcher.h
+@@ -6,6 +6,7 @@
+ #define CHROME_BROWSER_SHARING_SMS_SMS_REMOTE_FETCHER_H_
+
+ #include <string>
++#include <vector>
+
+ #include "base/callback.h"
+ #include "third_party/abseil-cpp/absl/types/optional.h"
+diff --git a/content/public/browser/sms_fetcher.h b/content/public/browser/sms_fetcher.h
+index 13f683243..983d81891 100644
+--- a/content/public/browser/sms_fetcher.h
++++ b/content/public/browser/sms_fetcher.h
+@@ -6,6 +6,7 @@
+ #define CONTENT_PUBLIC_BROWSER_SMS_FETCHER_H_
+
+ #include <string>
++#include <vector>
+
+ #include "base/observer_list_types.h"
+ #include "content/common/content_export.h"
diff --git a/www-client/chromium/files/chromium-93-sql-virtual-cursor.patch b/www-client/chromium/files/chromium-93-sql-virtual-cursor.patch
new file mode 100644
index 0000000..a4864ba
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-sql-virtual-cursor.patch
@@ -0,0 +1,231 @@
+From 80368f8ba7a8bab13440463a254888311efe3986 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Tue, 04 May 2021 15:00:19 +0000
+Subject: [PATCH] sql: make VirtualCursor standard layout type
+
+sql::recover::VirtualCursor needs to be a standard layout type, but
+has members of type std::unique_ptr. However, std::unique_ptr is not
+guaranteed to be standard layout. Compiling with clang combined with
+gcc-11 libstdc++ fails because of this. Replace std::unique_ptr with
+raw pointers.
+
+Bug: 1189788
+Change-Id: Ia6dc388cc5ef1c0f2afc75f8ca45b9f12687ca9c
+---
+
+diff --git a/sql/recover_module/btree.cc b/sql/recover_module/btree.cc
+index 9ecaafe..839318a 100644
+--- a/sql/recover_module/btree.cc
++++ b/sql/recover_module/btree.cc
+@@ -135,16 +135,25 @@
+ "Move the destructor to the .cc file if it's non-trival");
+ #endif // !DCHECK_IS_ON()
+
+-LeafPageDecoder::LeafPageDecoder(DatabasePageReader* db_reader) noexcept
+- : page_id_(db_reader->page_id()),
+- db_reader_(db_reader),
+- cell_count_(ComputeCellCount(db_reader)),
+- next_read_index_(0),
+- last_record_size_(0) {
++void LeafPageDecoder::Initialize(DatabasePageReader* db_reader) {
++ DCHECK(db_reader);
+ DCHECK(IsOnValidPage(db_reader));
++ page_id_ = db_reader->page_id();
++ db_reader_ = db_reader;
++ cell_count_ = ComputeCellCount(db_reader);
++ next_read_index_ = 0;
++ last_record_size_ = 0;
+ DCHECK(DatabasePageReader::IsValidPageId(page_id_));
+ }
+
++void LeafPageDecoder::Reset() {
++ db_reader_ = nullptr;
++ page_id_ = 0;
++ cell_count_ = 0;
++ next_read_index_ = 0;
++ last_record_size_ = 0;
++}
++
+ bool LeafPageDecoder::TryAdvance() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(CanAdvance());
+diff --git a/sql/recover_module/btree.h b/sql/recover_module/btree.h
+index d76d076..33114b0 100644
+--- a/sql/recover_module/btree.h
++++ b/sql/recover_module/btree.h
+@@ -102,7 +102,7 @@
+ //
+ // |db_reader| must have been used to read an inner page of a table B-tree.
+ // |db_reader| must outlive this instance.
+- explicit LeafPageDecoder(DatabasePageReader* db_reader) noexcept;
++ explicit LeafPageDecoder() noexcept = default;
+ ~LeafPageDecoder() noexcept = default;
+
+ LeafPageDecoder(const LeafPageDecoder&) = delete;
+@@ -150,6 +150,15 @@
+ // read as long as CanAdvance() returns true.
+ bool TryAdvance();
+
++ // Initialize with DatabasePageReader
++ void Initialize(DatabasePageReader* db_reader);
++
++ // Reset internal DatabasePageReader
++ void Reset();
++
++ // True if DatabasePageReader is valid
++ bool IsValid() { return (db_reader_ != nullptr); }
++
+ // True if the given reader may point to an inner page in a table B-tree.
+ //
+ // The last ReadPage() call on |db_reader| must have succeeded.
+@@ -163,14 +172,14 @@
+ static int ComputeCellCount(DatabasePageReader* db_reader);
+
+ // The number of the B-tree page this reader is reading.
+- const int64_t page_id_;
++ int64_t page_id_;
+ // Used to read the tree page.
+ //
+ // Raw pointer usage is acceptable because this instance's owner is expected
+ // to ensure that the DatabasePageReader outlives this.
+- DatabasePageReader* const db_reader_;
++ DatabasePageReader* db_reader_;
+ // Caches the ComputeCellCount() value for this reader's page.
+- const int cell_count_ = ComputeCellCount(db_reader_);
++ int cell_count_;
+
+ // The reader's cursor state.
+ //
+diff --git a/sql/recover_module/cursor.cc b/sql/recover_module/cursor.cc
+index 0029ff9..42548bc 100644
+--- a/sql/recover_module/cursor.cc
++++ b/sql/recover_module/cursor.cc
+@@ -26,7 +26,7 @@
+ int VirtualCursor::First() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ inner_decoders_.clear();
+- leaf_decoder_ = nullptr;
++ leaf_decoder_.Reset();
+
+ AppendPageDecoder(table_->root_page_id());
+ return Next();
+@@ -36,18 +36,18 @@
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ record_reader_.Reset();
+
+- while (!inner_decoders_.empty() || leaf_decoder_.get()) {
+- if (leaf_decoder_.get()) {
+- if (!leaf_decoder_->CanAdvance()) {
++ while (!inner_decoders_.empty() || leaf_decoder_.IsValid()) {
++ if (leaf_decoder_.IsValid()) {
++ if (!leaf_decoder_.CanAdvance()) {
+ // The leaf has been exhausted. Remove it from the DFS stack.
+- leaf_decoder_ = nullptr;
++ leaf_decoder_.Reset();
+ continue;
+ }
+- if (!leaf_decoder_->TryAdvance())
++ if (!leaf_decoder_.TryAdvance())
+ continue;
+
+- if (!payload_reader_.Initialize(leaf_decoder_->last_record_size(),
+- leaf_decoder_->last_record_offset())) {
++ if (!payload_reader_.Initialize(leaf_decoder_.last_record_size(),
++ leaf_decoder_.last_record_offset())) {
+ continue;
+ }
+ if (!record_reader_.Initialize())
+@@ -99,13 +99,13 @@
+ int64_t VirtualCursor::RowId() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(record_reader_.IsInitialized());
+- DCHECK(leaf_decoder_.get());
+- return leaf_decoder_->last_record_rowid();
++ DCHECK(leaf_decoder_.IsValid());
++ return leaf_decoder_.last_record_rowid();
+ }
+
+ void VirtualCursor::AppendPageDecoder(int page_id) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+- DCHECK(leaf_decoder_.get() == nullptr)
++ DCHECK(!leaf_decoder_.IsValid())
+ << __func__
+ << " must only be called when the current path has no leaf decoder";
+
+@@ -113,7 +113,7 @@
+ return;
+
+ if (LeafPageDecoder::IsOnValidPage(&db_reader_)) {
+- leaf_decoder_ = std::make_unique<LeafPageDecoder>(&db_reader_);
++ leaf_decoder_.Initialize(&db_reader_);
+ return;
+ }
+
+diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h
+index afcd690..b15c31d 100644
+--- a/sql/recover_module/cursor.h
++++ b/sql/recover_module/cursor.h
+@@ -129,7 +129,7 @@
+ std::vector<std::unique_ptr<InnerPageDecoder>> inner_decoders_;
+
+ // Decodes the leaf page containing records.
+- std::unique_ptr<LeafPageDecoder> leaf_decoder_;
++ LeafPageDecoder leaf_decoder_;
+
+ SEQUENCE_CHECKER(sequence_checker_);
+ };
+diff --git a/sql/recover_module/pager.cc b/sql/recover_module/pager.cc
+index 58e75de..5fe9620 100644
+--- a/sql/recover_module/pager.cc
++++ b/sql/recover_module/pager.cc
+@@ -23,8 +23,7 @@
+ "ints are not appropriate for representing page IDs");
+
+ DatabasePageReader::DatabasePageReader(VirtualTable* table)
+- : page_data_(std::make_unique<uint8_t[]>(table->page_size())),
+- table_(table) {
++ : page_data_(), table_(table) {
+ DCHECK(table != nullptr);
+ DCHECK(IsValidPageSize(table->page_size()));
+ }
+@@ -57,8 +56,8 @@
+ std::numeric_limits<int64_t>::max(),
+ "The |read_offset| computation above may overflow");
+
+- int sqlite_status =
+- RawRead(sqlite_file, read_size, read_offset, page_data_.get());
++ int sqlite_status = RawRead(sqlite_file, read_size, read_offset,
++ const_cast<uint8_t*>(page_data_.data()));
+
+ // |page_id_| needs to be set to kInvalidPageId if the read failed.
+ // Otherwise, future ReadPage() calls with the previous |page_id_| value
+diff --git a/sql/recover_module/pager.h b/sql/recover_module/pager.h
+index 0e388ddc..99314e3 100644
+--- a/sql/recover_module/pager.h
++++ b/sql/recover_module/pager.h
+@@ -5,6 +5,7 @@
+ #ifndef SQL_RECOVER_MODULE_PAGER_H_
+ #define SQL_RECOVER_MODULE_PAGER_H_
+
++#include <array>
+ #include <cstdint>
+ #include <memory>
+
+@@ -70,7 +71,7 @@
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK_NE(page_id_, kInvalidPageId)
+ << "Successful ReadPage() required before accessing pager state";
+- return page_data_.get();
++ return page_data_.data();
+ }
+
+ // The number of bytes in the page read by the last ReadPage() call.
+@@ -137,7 +138,7 @@
+ int page_id_ = kInvalidPageId;
+ // Stores the bytes of the last page successfully read by ReadPage().
+ // The content is undefined if the last call to ReadPage() did not succeed.
+- const std::unique_ptr<uint8_t[]> page_data_;
++ const std::array<uint8_t, kMaxPageSize> page_data_;
+ // Raw pointer usage is acceptable because this instance's owner is expected
+ // to ensure that the VirtualTable outlives this.
+ VirtualTable* const table_;
diff --git a/www-client/chromium/files/chromium-93-tint-include.patch b/www-client/chromium/files/chromium-93-tint-include.patch
new file mode 100644
index 0000000..4bfd448
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-tint-include.patch
@@ -0,0 +1,24 @@
+From 014e1fb4c7d05f853a24bfa4b4188b99ba9f3907 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 4 Jun 2021 21:11:05 +0000
+Subject: [PATCH] IWYU: add cstddef for size_t
+
+---
+ third_party/dawn/third_party/tint/src/sem/block_statement.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/third_party/dawn/third_party/tint/src/sem/block_statement.h b/third_party/dawn/third_party/tint/src/sem/block_statement.h
+index f8c8113..9cbd64d 100644
+--- a/third_party/dawn/third_party/tint/src/sem/block_statement.h
++++ b/third_party/dawn/third_party/tint/src/sem/block_statement.h
+@@ -15,6 +15,7 @@
+ #ifndef SRC_SEM_BLOCK_STATEMENT_H_
+ #define SRC_SEM_BLOCK_STATEMENT_H_
+
++#include <cstddef>
+ #include <vector>
+
+ #include "src/sem/statement.h"
+--
+2.31.1
+
diff --git a/www-client/chromium/files/chromium-93-ui-event-include.patch b/www-client/chromium/files/chromium-93-ui-event-include.patch
new file mode 100644
index 0000000..8431b6b
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-ui-event-include.patch
@@ -0,0 +1,13 @@
+diff --git a/ui/events/event_handler.h b/ui/events/event_handler.h
+index 3870be355..81ebc0e7f 100644
+--- a/ui/events/event_handler.h
++++ b/ui/events/event_handler.h
+@@ -5,6 +5,8 @@
+ #ifndef UI_EVENTS_EVENT_HANDLER_H_
+ #define UI_EVENTS_EVENT_HANDLER_H_
+
++#include <vector>
++
+ #include "base/containers/stack.h"
+ #include "base/strings/string_piece.h"
+ #include "ui/events/events_export.h"
diff --git a/www-client/chromium/files/chromium-93-url-loader-throttles-include.patch b/www-client/chromium/files/chromium-93-url-loader-throttles-include.patch
new file mode 100644
index 0000000..d4be13f
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-url-loader-throttles-include.patch
@@ -0,0 +1,13 @@
+diff --git a/content/public/browser/url_loader_throttles.h b/content/public/browser/url_loader_throttles.h
+index 0e67d38f7..aa0290118 100644
+--- a/content/public/browser/url_loader_throttles.h
++++ b/content/public/browser/url_loader_throttles.h
+@@ -5,6 +5,8 @@
+ #ifndef CONTENT_PUBLIC_BROWSER_URL_LOADER_THROTTLES_H_
+ #define CONTENT_PUBLIC_BROWSER_URL_LOADER_THROTTLES_H_
+
++#include <vector>
++
+ #include "base/callback.h"
+ #include "content/common/content_export.h"
+
diff --git a/www-client/chromium/files/chromium-93-webapp-include.patch b/www-client/chromium/files/chromium-93-webapp-include.patch
new file mode 100644
index 0000000..39f6058
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-webapp-include.patch
@@ -0,0 +1,12 @@
+diff --git a/chrome/browser/web_applications/components/web_app_shortcut_linux.h b/chrome/browser/web_applications/components/web_app_shortcut_linux.h
+index 4f1e5b93e..3d28e8b52 100644
+--- a/chrome/browser/web_applications/components/web_app_shortcut_linux.h
++++ b/chrome/browser/web_applications/components/web_app_shortcut_linux.h
+@@ -6,6 +6,7 @@
+ #define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_SHORTCUT_LINUX_H_
+
+ #include <string>
++#include <vector>
+
+ #include "base/callback.h"
+
diff --git a/www-client/chromium/files/chromium-93-worksp-ext-include.patch b/www-client/chromium/files/chromium-93-worksp-ext-include.patch
new file mode 100644
index 0000000..c91b9b2
--- /dev/null
+++ b/www-client/chromium/files/chromium-93-worksp-ext-include.patch
@@ -0,0 +1,37 @@
+diff --git a/device/bluetooth/bluetooth_low_energy_scan_filter.h b/device/bluetooth/bluetooth_low_energy_scan_filter.h
+index 0af0b3108..cfec68cb1 100644
+--- a/device/bluetooth/bluetooth_low_energy_scan_filter.h
++++ b/device/bluetooth/bluetooth_low_energy_scan_filter.h
+@@ -7,6 +7,7 @@
+
+ #include <stddef.h>
+ #include <stdint.h>
++#include <memory>
+ #include <vector>
+
+ #include "base/time/time.h"
+diff --git a/ui/base/class_property.h b/ui/base/class_property.h
+index f7b2f5598..88b49386a 100644
+--- a/ui/base/class_property.h
++++ b/ui/base/class_property.h
+@@ -8,6 +8,7 @@
+ #include <stdint.h>
+
+ #include <map>
++#include <memory>
+ #include <set>
+ #include <type_traits>
+
+diff --git a/ui/platform_window/extensions/workspace_extension.cc b/ui/platform_window/extensions/workspace_extension.cc
+index b4e21e0f2..78b5d6562 100644
+--- a/ui/platform_window/extensions/workspace_extension.cc
++++ b/ui/platform_window/extensions/workspace_extension.cc
+@@ -4,6 +4,8 @@
+
+ #include "ui/platform_window/extensions/workspace_extension.h"
+
++#include <memory>
++
+ #include "ui/base/class_property.h"
+ #include "ui/platform_window/platform_window.h"
+
diff --git a/www-client/chromium/files/chromium-94-ConversionStorageSql-lambda.patch b/www-client/chromium/files/chromium-94-ConversionStorageSql-lambda.patch
new file mode 100644
index 0000000..6746fec
--- /dev/null
+++ b/www-client/chromium/files/chromium-94-ConversionStorageSql-lambda.patch
@@ -0,0 +1,31 @@
+From 45bea088d3771c7ff9f77173e451422452c031b3 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Mon, 02 Aug 2021 16:57:05 +0000
+Subject: [PATCH] GCC: drop WARN_USED_RESULT in lambda in ConversionStorageSql
+
+GCC 9.3 only allows GNU attributes between [] and () in lambda
+expressions. See https://gcc.gnu.org/PR90333 for details. However,
+clang only allows attributes after () only. Seems not strictly
+necessary to enforce the attribute here.
+
+Bug: 819294
+Change-Id: I342deb25239837dea0f6f5e7709b1467789e342b
+---
+
+diff --git a/content/browser/conversions/conversion_storage_sql.cc b/content/browser/conversions/conversion_storage_sql.cc
+index 84bc897..b6fc4e9 100644
+--- a/content/browser/conversions/conversion_storage_sql.cc
++++ b/content/browser/conversions/conversion_storage_sql.cc
+@@ -688,9 +688,11 @@
+ bool ConversionStorageSql::DeleteExpiredImpressions() {
+ const int kMaxDeletesPerBatch = 100;
+
++ // GCC accepts attribute between [] and () only
++ // clang accepts attribute after () only
+ auto delete_impressions_from_paged_select =
+ [this](sql::Statement& statement)
+- VALID_CONTEXT_REQUIRED(sequence_checker_) WARN_UNUSED_RESULT -> bool {
++ VALID_CONTEXT_REQUIRED(sequence_checker_) -> bool {
+ while (true) {
+ std::vector<int64_t> impression_ids;
+ while (statement.Step()) {
diff --git a/www-client/chromium/files/chromium-94-CustomSpaces-include.patch b/www-client/chromium/files/chromium-94-CustomSpaces-include.patch
new file mode 100644
index 0000000..0175775
--- /dev/null
+++ b/www-client/chromium/files/chromium-94-CustomSpaces-include.patch
@@ -0,0 +1,24 @@
+From 4eeacdaa57b29a079fe09315eb22557c06aa522e Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 13 Aug 2021 12:57:42 +0000
+Subject: [PATCH] IWYU: add memory for std::unique_ptr in blink::CustomSpaces
+
+---
+ .../blink/renderer/platform/heap/v8_wrapper/custom_spaces.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h b/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h
+index df0465a..640cb33 100644
+--- a/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h
++++ b/third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h
+@@ -5,6 +5,7 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_WRAPPER_CUSTOM_SPACES_H_
+ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_V8_WRAPPER_CUSTOM_SPACES_H_
+
++#include <memory>
+ #include <vector>
+
+ #include "third_party/blink/renderer/platform/platform_export.h"
+--
+2.31.1
+
diff --git a/www-client/chromium/files/chromium-94-compiler.patch b/www-client/chromium/files/chromium-94-compiler.patch
new file mode 100644
index 0000000..2b63b3b
--- /dev/null
+++ b/www-client/chromium/files/chromium-94-compiler.patch
@@ -0,0 +1,218 @@
+From f4d0b0eb899005b4b8b6388e1d8bb82cc0018fc8 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Sun, 8 Aug 2021 08:50:00 +0000
+Subject: [PATCH] Disable various compiler configs
+
+---
+ build/config/compiler/BUILD.gn | 105 ++++++---------------------------
+ 1 file changed, 17 insertions(+), 88 deletions(-)
+
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 0bb155a..e95c023 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -291,8 +291,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -530,31 +528,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- cflags += [
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- if (!is_debug && use_thin_lto && is_a_target_toolchain) {
+- if (is_win) {
+- ldflags += [ "-mllvm:-instcombine-lower-dbg-declare=0" ]
+- } else {
+- ldflags += [ "-Wl,-mllvm,-instcombine-lower-dbg-declare=0" ]
+- }
+- }
+-
+- # TODO(crbug.com/1235145): Investigate why/if this should be needed.
+- if (is_win) {
+- cflags += [ "/clang:-ffp-contract=off" ]
+- } else {
+- cflags += [ "-ffp-contract=off" ]
+- }
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
+@@ -1216,45 +1189,6 @@ config("compiler_deterministic") {
+ }
+ }
+
+- # Makes builds independent of absolute file path.
+- if (is_clang && strip_absolute_paths_from_debug_symbols) {
+- # If debug option is given, clang includes $cwd in debug info by default.
+- # For such build, this flag generates reproducible obj files even we use
+- # different build directory like "out/feature_a" and "out/feature_b" if
+- # we build same files with same compile flag.
+- # Other paths are already given in relative, no need to normalize them.
+- if (is_nacl) {
+- # TODO(https://crbug.com/1231236): Use -ffile-compilation-dir= here.
+- cflags += [
+- "-Xclang",
+- "-fdebug-compilation-dir",
+- "-Xclang",
+- ".",
+- ]
+- } else {
+- # -ffile-compilation-dir is an alias for both -fdebug-compilation-dir=
+- # and -fcoverage-compilation-dir=.
+- cflags += [ "-ffile-compilation-dir=." ]
+- }
+- if (!is_win) {
+- # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
+- asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
+- }
+-
+- if (is_win && use_lld) {
+- if (symbol_level == 2 || (is_clang && using_sanitizer)) {
+- # Absolutize source file paths for PDB. Pass the real build directory
+- # if the pdb contains source-level debug information and if linker
+- # reproducibility is not critical.
+- ldflags += [ "/PDBSourcePath:" + rebase_path(root_build_dir) ]
+- } else {
+- # Use a fake fixed base directory for paths in the pdb to make the pdb
+- # output fully deterministic and independent of the build directory.
+- ldflags += [ "/PDBSourcePath:o:\fake\prefix" ]
+- }
+- }
+- }
+-
+ # Tells the compiler not to use absolute paths when passing the default
+ # paths to the tools it invokes. We don't want this because we don't
+ # really need it and it can mess up the goma cache entries.
+@@ -1658,7 +1592,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1667,10 +1601,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1679,15 +1609,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -2077,7 +1998,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -2112,7 +2034,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2152,7 +2075,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2184,7 +2108,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2209,7 +2134,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2328,7 +2254,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2431,7 +2358,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2496,7 +2424,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
+--
+2.31.1
diff --git a/www-client/chromium/files/chromium-94-sql-virtual-cursor.patch b/www-client/chromium/files/chromium-94-sql-virtual-cursor.patch
new file mode 100644
index 0000000..47b276d
--- /dev/null
+++ b/www-client/chromium/files/chromium-94-sql-virtual-cursor.patch
@@ -0,0 +1,216 @@
+diff --git a/sql/recover_module/btree.cc b/sql/recover_module/btree.cc
+index cc9420e5c..62fcaaf79 100644
+--- a/sql/recover_module/btree.cc
++++ b/sql/recover_module/btree.cc
+@@ -136,16 +136,25 @@ static_assert(std::is_trivially_destructible<LeafPageDecoder>::value,
+ "Move the destructor to the .cc file if it's non-trival");
+ #endif // !DCHECK_IS_ON()
+
+-LeafPageDecoder::LeafPageDecoder(DatabasePageReader* db_reader) noexcept
+- : page_id_(db_reader->page_id()),
+- db_reader_(db_reader),
+- cell_count_(ComputeCellCount(db_reader)),
+- next_read_index_(0),
+- last_record_size_(0) {
++void LeafPageDecoder::Initialize(DatabasePageReader* db_reader) {
++ DCHECK(db_reader);
+ DCHECK(IsOnValidPage(db_reader));
++ page_id_ = db_reader->page_id();
++ db_reader_ = db_reader;
++ cell_count_ = ComputeCellCount(db_reader);
++ next_read_index_ = 0;
++ last_record_size_ = 0;
+ DCHECK(DatabasePageReader::IsValidPageId(page_id_));
+ }
+
++void LeafPageDecoder::Reset() {
++ db_reader_ = nullptr;
++ page_id_ = 0;
++ cell_count_ = 0;
++ next_read_index_ = 0;
++ last_record_size_ = 0;
++}
++
+ bool LeafPageDecoder::TryAdvance() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(CanAdvance());
+diff --git a/sql/recover_module/btree.h b/sql/recover_module/btree.h
+index eaa087a5c..78ce00e05 100644
+--- a/sql/recover_module/btree.h
++++ b/sql/recover_module/btree.h
+@@ -103,7 +103,7 @@ class LeafPageDecoder {
+ //
+ // |db_reader| must have been used to read an inner page of a table B-tree.
+ // |db_reader| must outlive this instance.
+- explicit LeafPageDecoder(DatabasePageReader* db_reader) noexcept;
++ explicit LeafPageDecoder() noexcept = default;
+ ~LeafPageDecoder() noexcept = default;
+
+ LeafPageDecoder(const LeafPageDecoder&) = delete;
+@@ -151,6 +151,15 @@ class LeafPageDecoder {
+ // read as long as CanAdvance() returns true.
+ bool TryAdvance();
+
++ // Initialize with DatabasePageReader
++ void Initialize(DatabasePageReader* db_reader);
++
++ // Reset internal DatabasePageReader
++ void Reset();
++
++ // True if DatabasePageReader is valid
++ bool IsValid() { return (db_reader_ != nullptr); }
++
+ // True if the given reader may point to an inner page in a table B-tree.
+ //
+ // The last ReadPage() call on |db_reader| must have succeeded.
+@@ -164,14 +173,14 @@ class LeafPageDecoder {
+ static int ComputeCellCount(DatabasePageReader* db_reader);
+
+ // The number of the B-tree page this reader is reading.
+- const int64_t page_id_;
++ int64_t page_id_;
+ // Used to read the tree page.
+ //
+ // Raw pointer usage is acceptable because this instance's owner is expected
+ // to ensure that the DatabasePageReader outlives this.
+- DatabasePageReader* const db_reader_;
++ DatabasePageReader* db_reader_;
+ // Caches the ComputeCellCount() value for this reader's page.
+- const int cell_count_ = ComputeCellCount(db_reader_);
++ int cell_count_;
+
+ // The reader's cursor state.
+ //
+diff --git a/sql/recover_module/cursor.cc b/sql/recover_module/cursor.cc
+index 4f827edf1..240de4999 100644
+--- a/sql/recover_module/cursor.cc
++++ b/sql/recover_module/cursor.cc
+@@ -28,7 +28,7 @@ VirtualCursor::~VirtualCursor() {
+ int VirtualCursor::First() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ inner_decoders_.clear();
+- leaf_decoder_ = nullptr;
++ leaf_decoder_.Reset();
+
+ AppendPageDecoder(table_->root_page_id());
+ return Next();
+@@ -38,18 +38,18 @@ int VirtualCursor::Next() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ record_reader_.Reset();
+
+- while (!inner_decoders_.empty() || leaf_decoder_.get()) {
+- if (leaf_decoder_.get()) {
+- if (!leaf_decoder_->CanAdvance()) {
++ while (!inner_decoders_.empty() || leaf_decoder_.IsValid()) {
++ if (leaf_decoder_.IsValid()) {
++ if (!leaf_decoder_.CanAdvance()) {
+ // The leaf has been exhausted. Remove it from the DFS stack.
+- leaf_decoder_ = nullptr;
++ leaf_decoder_.Reset();
+ continue;
+ }
+- if (!leaf_decoder_->TryAdvance())
++ if (!leaf_decoder_.TryAdvance())
+ continue;
+
+- if (!payload_reader_.Initialize(leaf_decoder_->last_record_size(),
+- leaf_decoder_->last_record_offset())) {
++ if (!payload_reader_.Initialize(leaf_decoder_.last_record_size(),
++ leaf_decoder_.last_record_offset())) {
+ continue;
+ }
+ if (!record_reader_.Initialize())
+@@ -101,13 +101,13 @@ int VirtualCursor::ReadColumn(int column_index,
+ int64_t VirtualCursor::RowId() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(record_reader_.IsInitialized());
+- DCHECK(leaf_decoder_.get());
+- return leaf_decoder_->last_record_rowid();
++ DCHECK(leaf_decoder_.IsValid());
++ return leaf_decoder_.last_record_rowid();
+ }
+
+ void VirtualCursor::AppendPageDecoder(int page_id) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+- DCHECK(leaf_decoder_.get() == nullptr)
++ DCHECK(!leaf_decoder_.IsValid())
+ << __func__
+ << " must only be called when the current path has no leaf decoder";
+
+@@ -115,7 +115,7 @@ void VirtualCursor::AppendPageDecoder(int page_id) {
+ return;
+
+ if (LeafPageDecoder::IsOnValidPage(&db_reader_)) {
+- leaf_decoder_ = std::make_unique<LeafPageDecoder>(&db_reader_);
++ leaf_decoder_.Initialize(&db_reader_);
+ return;
+ }
+
+diff --git a/sql/recover_module/cursor.h b/sql/recover_module/cursor.h
+index afcd6900e..b15c31d42 100644
+--- a/sql/recover_module/cursor.h
++++ b/sql/recover_module/cursor.h
+@@ -129,7 +129,7 @@ class VirtualCursor {
+ std::vector<std::unique_ptr<InnerPageDecoder>> inner_decoders_;
+
+ // Decodes the leaf page containing records.
+- std::unique_ptr<LeafPageDecoder> leaf_decoder_;
++ LeafPageDecoder leaf_decoder_;
+
+ SEQUENCE_CHECKER(sequence_checker_);
+ };
+diff --git a/sql/recover_module/pager.cc b/sql/recover_module/pager.cc
+index 58e75de27..5fe96204e 100644
+--- a/sql/recover_module/pager.cc
++++ b/sql/recover_module/pager.cc
+@@ -23,8 +23,7 @@ static_assert(DatabasePageReader::kMaxPageId <= std::numeric_limits<int>::max(),
+ "ints are not appropriate for representing page IDs");
+
+ DatabasePageReader::DatabasePageReader(VirtualTable* table)
+- : page_data_(std::make_unique<uint8_t[]>(table->page_size())),
+- table_(table) {
++ : page_data_(), table_(table) {
+ DCHECK(table != nullptr);
+ DCHECK(IsValidPageSize(table->page_size()));
+ }
+@@ -57,8 +56,8 @@ int DatabasePageReader::ReadPage(int page_id) {
+ std::numeric_limits<int64_t>::max(),
+ "The |read_offset| computation above may overflow");
+
+- int sqlite_status =
+- RawRead(sqlite_file, read_size, read_offset, page_data_.get());
++ int sqlite_status = RawRead(sqlite_file, read_size, read_offset,
++ const_cast<uint8_t*>(page_data_.data()));
+
+ // |page_id_| needs to be set to kInvalidPageId if the read failed.
+ // Otherwise, future ReadPage() calls with the previous |page_id_| value
+diff --git a/sql/recover_module/pager.h b/sql/recover_module/pager.h
+index 5976d2167..8dcffa3f2 100644
+--- a/sql/recover_module/pager.h
++++ b/sql/recover_module/pager.h
+@@ -5,6 +5,7 @@
+ #ifndef SQL_RECOVER_MODULE_PAGER_H_
+ #define SQL_RECOVER_MODULE_PAGER_H_
+
++#include <array>
+ #include <cstdint>
+ #include <memory>
+ #include <ostream>
+@@ -71,7 +72,7 @@ class DatabasePageReader {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK_NE(page_id_, kInvalidPageId)
+ << "Successful ReadPage() required before accessing pager state";
+- return page_data_.get();
++ return page_data_.data();
+ }
+
+ // The number of bytes in the page read by the last ReadPage() call.
+@@ -138,7 +139,7 @@ class DatabasePageReader {
+ int page_id_ = kInvalidPageId;
+ // Stores the bytes of the last page successfully read by ReadPage().
+ // The content is undefined if the last call to ReadPage() did not succeed.
+- const std::unique_ptr<uint8_t[]> page_data_;
++ const std::array<uint8_t, kMaxPageSize> page_data_;
+ // Raw pointer usage is acceptable because this instance's owner is expected
+ // to ensure that the VirtualTable outlives this.
+ VirtualTable* const table_;
diff --git a/www-client/chromium/files/chromium-94-translate.patch b/www-client/chromium/files/chromium-94-translate.patch
new file mode 100644
index 0000000..507e7c9
--- /dev/null
+++ b/www-client/chromium/files/chromium-94-translate.patch
@@ -0,0 +1,98 @@
+From 7cfc45880ce2b181c318fff2a336f655e294644f Mon Sep 17 00:00:00 2001
+From: mcrouse <mcrouse@google.com>
+Date: Fri, 20 Aug 2021 17:58:16 -0700
+Subject: [PATCH] [Translate] Fix migration of deprecated pref.
+
+This migrates old prefs to use a default time rather than a value.
+
+Bug: 1241228
+Change-Id: I07efec68aa0c06b0bbb13b51657a1c60b2bfcf7e
+---
+
+diff --git a/components/translate/core/browser/translate_prefs.cc b/components/translate/core/browser/translate_prefs.cc
+index f599ec6..375f805 100644
+--- a/components/translate/core/browser/translate_prefs.cc
++++ b/components/translate/core/browser/translate_prefs.cc
+@@ -944,8 +944,7 @@
+ // Migration should only be necessary once but there could still be old
+ // Chrome instances that sync the old preference, so do it once per
+ // startup.
+- static bool migrated = false;
+- if (migrated)
++ if (migrated_)
+ return;
+ DictionaryPrefUpdate never_prompt_list_update(prefs_,
+ kPrefNeverPromptSitesWithTime);
+@@ -954,11 +953,16 @@
+ const base::Value* list = prefs_->GetList(kPrefNeverPromptSitesDeprecated);
+ for (auto& site : list->GetList()) {
+ if (!never_prompt_list->FindKey(site.GetString())) {
+- never_prompt_list->SetKey(site.GetString(), base::Value(0));
++ never_prompt_list->SetKey(site.GetString(),
++ base::TimeToValue(base::Time::Now()));
+ }
+ }
+ }
+- migrated = true;
++ migrated_ = true;
++}
++
++void TranslatePrefs::ResetMigrationForTesting() {
++ migrated_ = false;
+ }
+
+ bool TranslatePrefs::IsValueOnNeverPromptList(const char* pref_id,
+diff --git a/components/translate/core/browser/translate_prefs.h b/components/translate/core/browser/translate_prefs.h
+index b822bed..6d58fd7 100644
+--- a/components/translate/core/browser/translate_prefs.h
++++ b/components/translate/core/browser/translate_prefs.h
+@@ -339,6 +339,9 @@
+
+ static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
+
++ // Reset |migrated_| to enable testing of pref migrations.
++ void ResetMigrationForTesting();
++
+ private:
+ FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest,
+ UpdateLanguageListFeatureEnabled);
+@@ -356,6 +359,7 @@
+ FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest, MoveLanguageUp);
+ FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest, MoveLanguageDown);
+ FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest, ResetBlockedLanguagesToDefault);
++ FRIEND_TEST_ALL_PREFIXES(TranslatePrefsTest, MigrateNeverPromptSites);
+ friend class TranslatePrefsTest;
+
+ void ClearNeverPromptSiteList();
+@@ -385,6 +389,9 @@
+
+ std::unique_ptr<language::LanguagePrefs> language_prefs_;
+
++ // Whether any deprecated prefs have been successfully migrated.
++ bool migrated_ = false;
++
+ DISALLOW_COPY_AND_ASSIGN(TranslatePrefs);
+ };
+
+diff --git a/components/translate/core/browser/translate_prefs_unittest.cc b/components/translate/core/browser/translate_prefs_unittest.cc
+index 601b834..3feb232c 100644
+--- a/components/translate/core/browser/translate_prefs_unittest.cc
++++ b/components/translate/core/browser/translate_prefs_unittest.cc
+@@ -931,6 +931,17 @@
+ accept_languages_tester_->ExpectAcceptLanguagePrefs("en,it,es,zh,fr");
+ }
+
++TEST_F(TranslatePrefsTest, MigrateNeverPromptSites) {
++ translate_prefs_->AddValueToNeverPromptList(
++ TranslatePrefs::kPrefNeverPromptSitesDeprecated, "unmigrated.com");
++ translate_prefs_->ResetMigrationForTesting();
++ translate_prefs_->MigrateNeverPromptSites();
++ EXPECT_EQ(
++ std::vector<std::string>({"unmigrated.com"}),
++ translate_prefs_->GetNeverPromptSitesBetween(
++ base::Time::Now() - base::TimeDelta::FromDays(1), base::Time::Max()));
++}
++
+ TEST_F(TranslatePrefsTest, SiteNeverPromptList) {
+ translate_prefs_->AddSiteToNeverPromptList("a.com");
+ base::Time t = base::Time::Now();
diff --git a/www-client/chromium/files/chromium-95-hash_traits-include.patch b/www-client/chromium/files/chromium-95-hash_traits-include.patch
new file mode 100644
index 0000000..62e559d
--- /dev/null
+++ b/www-client/chromium/files/chromium-95-hash_traits-include.patch
@@ -0,0 +1,30 @@
+From 45441a733187d7462f30b433a663ef7403990d87 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 3 Sep 2021 16:19:32 +0000
+Subject: [PATCH] IWYU: add string.h for memset in hash_traits
+
+---
+ third_party/blink/renderer/platform/wtf/hash_traits.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/third_party/blink/renderer/platform/wtf/hash_traits.h b/third_party/blink/renderer/platform/wtf/hash_traits.h
+index ca5ed2a..67d1724 100644
+--- a/third_party/blink/renderer/platform/wtf/hash_traits.h
++++ b/third_party/blink/renderer/platform/wtf/hash_traits.h
+@@ -22,10 +22,13 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_HASH_TRAITS_H_
+ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_HASH_TRAITS_H_
+
++#include <string.h>
++
+ #include <limits>
+ #include <memory>
+ #include <type_traits>
+ #include <utility>
++
+ #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
+ #include "third_party/blink/renderer/platform/wtf/forward.h"
+ #include "third_party/blink/renderer/platform/wtf/hash_functions.h"
+--
+2.32.0
+
diff --git a/www-client/chromium/files/chromium-95-libyuv-aarch64.patch b/www-client/chromium/files/chromium-95-libyuv-aarch64.patch
new file mode 100644
index 0000000..8efbaff
--- /dev/null
+++ b/www-client/chromium/files/chromium-95-libyuv-aarch64.patch
@@ -0,0 +1,31 @@
+diff --git a/third_party/libyuv/source/row_neon64.cc b/third_party/libyuv/source/row_neon64.cc
+index 350c964..2aab413 100644
+--- a/third_party/libyuv/source/row_neon64.cc
++++ b/third_party/libyuv/source/row_neon64.cc
+@@ -1835,7 +1835,7 @@ void ARGBToAB64Row_NEON(const uint8_t* src_argb,
+ : "+r"(src_argb), // %0
+ "+r"(dst_ab64), // %1
+ "+r"(width) // %2
+- : "m"(kShuffleARGBToABGR) // %3
++ : "Q"(kShuffleARGBToABGR) // %3
+ : "cc", "memory", "v0", "v1", "v2", "v3", "v4");
+ }
+
+@@ -1859,7 +1859,7 @@ void AR64ToARGBRow_NEON(const uint16_t* src_ar64,
+ : "+r"(src_ar64), // %0
+ "+r"(dst_argb), // %1
+ "+r"(width) // %2
+- : "m"(kShuffleAR64ToARGB) // %3
++ : "Q"(kShuffleAR64ToARGB) // %3
+ : "cc", "memory", "v0", "v1", "v2", "v3", "v4");
+ }
+
+@@ -1883,7 +1883,7 @@ void AB64ToARGBRow_NEON(const uint16_t* src_ab64,
+ : "+r"(src_ab64), // %0
+ "+r"(dst_argb), // %1
+ "+r"(width) // %2
+- : "m"(kShuffleAB64ToARGB) // %3
++ : "Q"(kShuffleAB64ToARGB) // %3
+ : "cc", "memory", "v0", "v1", "v2", "v3", "v4");
+ }
+
diff --git a/www-client/chromium/files/chromium-95-text_fragments_utils-include.patch b/www-client/chromium/files/chromium-95-text_fragments_utils-include.patch
new file mode 100644
index 0000000..e2d6160
--- /dev/null
+++ b/www-client/chromium/files/chromium-95-text_fragments_utils-include.patch
@@ -0,0 +1,37 @@
+From f48b39ee129132337b93e905c8f304c65766742a Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Tue, 31 Aug 2021 12:22:35 +0000
+Subject: [PATCH] IWYU: add string.h for strlen in text_fragments_utils
+
+Remove namespace std from strlen to avoid including cstring as well.
+---
+ .../shared_highlighting/core/common/text_fragments_utils.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/components/shared_highlighting/core/common/text_fragments_utils.cc b/components/shared_highlighting/core/common/text_fragments_utils.cc
+index 9f39ce6..389c09c 100644
+--- a/components/shared_highlighting/core/common/text_fragments_utils.cc
++++ b/components/shared_highlighting/core/common/text_fragments_utils.cc
+@@ -4,6 +4,8 @@
+
+ #include "components/shared_highlighting/core/common/text_fragments_utils.h"
+
++#include <string.h>
++
+ #include <sstream>
+
+ #include "base/json/json_writer.h"
+@@ -54,8 +56,8 @@ bool SplitUrlTextFragmentDirective(const std::string& full_url,
+
+ // We only want to keep what's after the delimiter.
+ *highlight_directive =
+- full_url.substr(pos + std::strlen(kFragmentsUrlDelimiter) +
+- std::strlen(kFragmentParameterName));
++ full_url.substr(pos + strlen(kFragmentsUrlDelimiter) +
++ strlen(kFragmentParameterName));
+ return true;
+ }
+
+--
+2.31.1
+
diff --git a/www-client/chromium/files/chromium-96-AppliedTextDecoration-include.patch b/www-client/chromium/files/chromium-96-AppliedTextDecoration-include.patch
new file mode 100644
index 0000000..26b7d0b
--- /dev/null
+++ b/www-client/chromium/files/chromium-96-AppliedTextDecoration-include.patch
@@ -0,0 +1,25 @@
+From 7387c3ccedb190a8d971762b89e1a75c2289537d Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Sat, 25 Sep 2021 20:52:05 +0000
+Subject: [PATCH] IWYU: add memory for std::unique_ptr in AppliedTextDecoration
+
+---
+ third_party/blink/renderer/core/style/applied_text_decoration.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/third_party/blink/renderer/core/style/applied_text_decoration.h b/third_party/blink/renderer/core/style/applied_text_decoration.h
+index b79dc4d..cc050ff 100644
+--- a/third_party/blink/renderer/core/style/applied_text_decoration.h
++++ b/third_party/blink/renderer/core/style/applied_text_decoration.h
+@@ -5,6 +5,8 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_APPLIED_TEXT_DECORATION_H_
+ #define THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_APPLIED_TEXT_DECORATION_H_
+
++#include <memory>
++
+ #include "third_party/blink/renderer/core/style/computed_style_constants.h"
+ #include "third_party/blink/renderer/core/style/text_decoration_thickness.h"
+ #include "third_party/blink/renderer/platform/geometry/length.h"
+--
+2.32.0
+
diff --git a/www-client/chromium/files/chromium-96-EnumTable-crash.patch b/www-client/chromium/files/chromium-96-EnumTable-crash.patch
new file mode 100644
index 0000000..9736739
--- /dev/null
+++ b/www-client/chromium/files/chromium-96-EnumTable-crash.patch
@@ -0,0 +1,76 @@
+diff --git a/components/cast_channel/enum_table.h b/components/cast_channel/enum_table.h
+index aad9e08..2f3fcad 100644
+--- a/components/cast_channel/enum_table.h
++++ b/components/cast_channel/enum_table.h
+@@ -8,6 +8,7 @@
+ #include <cstdint>
+ #include <cstring>
+ #include <ostream>
++#include <vector>
+
+ #include "base/check_op.h"
+ #include "base/macros.h"
+@@ -188,7 +189,6 @@ class
+ inline constexpr GenericEnumTableEntry(int32_t value);
+ inline constexpr GenericEnumTableEntry(int32_t value, base::StringPiece str);
+
+- GenericEnumTableEntry(const GenericEnumTableEntry&) = delete;
+ GenericEnumTableEntry& operator=(const GenericEnumTableEntry&) = delete;
+
+ private:
+@@ -254,7 +254,6 @@ class EnumTable {
+ constexpr Entry(E value, base::StringPiece str)
+ : GenericEnumTableEntry(static_cast<int32_t>(value), str) {}
+
+- Entry(const Entry&) = delete;
+ Entry& operator=(const Entry&) = delete;
+ };
+
+@@ -313,15 +312,14 @@ class EnumTable {
+ if (is_sorted_) {
+ const std::size_t index = static_cast<std::size_t>(value);
+ if (ANALYZER_ASSUME_TRUE(index < data_.size())) {
+- const auto& entry = data_.begin()[index];
++ const auto& entry = data_[index];
+ if (ANALYZER_ASSUME_TRUE(entry.has_str()))
+ return entry.str();
+ }
+ return absl::nullopt;
+ }
+ return GenericEnumTableEntry::FindByValue(
+- reinterpret_cast<const GenericEnumTableEntry*>(data_.begin()),
+- data_.size(), static_cast<int32_t>(value));
++ &data_[0], data_.size(), static_cast<int32_t>(value));
+ }
+
+ // This overload of GetString is designed for cases where the argument is a
+@@ -349,8 +347,7 @@ class EnumTable {
+ // enum value directly.
+ absl::optional<E> GetEnum(base::StringPiece str) const {
+ auto* entry = GenericEnumTableEntry::FindByString(
+- reinterpret_cast<const GenericEnumTableEntry*>(data_.begin()),
+- data_.size(), str);
++ &data_[0], data_.size(), str);
+ return entry ? static_cast<E>(entry->value) : absl::optional<E>();
+ }
+
+@@ -365,7 +362,7 @@ class EnumTable {
+ // Align the data on a cache line boundary.
+ alignas(64)
+ #endif
+- std::initializer_list<Entry> data_;
++ const std::vector<Entry> data_;
+ bool is_sorted_;
+
+ constexpr EnumTable(std::initializer_list<Entry> data, bool is_sorted)
+@@ -377,8 +374,8 @@ class EnumTable {
+
+ for (std::size_t i = 0; i < data.size(); i++) {
+ for (std::size_t j = i + 1; j < data.size(); j++) {
+- const Entry& ei = data.begin()[i];
+- const Entry& ej = data.begin()[j];
++ const Entry& ei = data[i];
++ const Entry& ej = data[j];
+ DCHECK(ei.value != ej.value)
+ << "Found duplicate enum values at indices " << i << " and " << j;
+ DCHECK(!(ei.has_str() && ej.has_str() && ei.str() == ej.str()))
diff --git a/www-client/chromium/files/chromium-96-ax_platform-list-init.patch b/www-client/chromium/files/chromium-96-ax_platform-list-init.patch
new file mode 100644
index 0000000..49adba4
--- /dev/null
+++ b/www-client/chromium/files/chromium-96-ax_platform-list-init.patch
@@ -0,0 +1,15 @@
+diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc
+index aff693dea..834c328d1 100644
+--- a/ui/accessibility/platform/ax_platform_node_auralinux.cc
++++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
+@@ -5136,8 +5136,8 @@ std::pair<int, int> AXPlatformNodeAuraLinux::GetSelectionOffsetsForAtk() {
+ std::vector<ax::mojom::Action> AXPlatformNodeAuraLinux::GetSupportedActions()
+ const {
+ static const base::NoDestructor<std::vector<ax::mojom::Action>>
+- kActionsThatCanBeExposedViaAtkAction(
+- {ax::mojom::Action::kDecrement, ax::mojom::Action::kIncrement});
++ kActionsThatCanBeExposedViaAtkAction{
++ {ax::mojom::Action::kDecrement, ax::mojom::Action::kIncrement}};
+
+ // The default action is always included and exposed at the first index.
+ std::vector<ax::mojom::Action> supported_actions = {
diff --git a/www-client/chromium/files/chromium-96-compiler.patch b/www-client/chromium/files/chromium-96-compiler.patch
new file mode 100644
index 0000000..9b4b408
--- /dev/null
+++ b/www-client/chromium/files/chromium-96-compiler.patch
@@ -0,0 +1,200 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 67b7097dd..f21f7435a 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -292,8 +292,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -532,24 +530,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- cflags += [
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- if (!is_debug && use_thin_lto && is_a_target_toolchain) {
+- if (is_win) {
+- ldflags += [ "-mllvm:-instcombine-lower-dbg-declare=0" ]
+- } else {
+- ldflags += [ "-Wl,-mllvm,-instcombine-lower-dbg-declare=0" ]
+- }
+- }
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
+@@ -1240,45 +1220,6 @@ config("compiler_deterministic") {
+ }
+ }
+
+- # Makes builds independent of absolute file path.
+- if (is_clang && strip_absolute_paths_from_debug_symbols) {
+- # If debug option is given, clang includes $cwd in debug info by default.
+- # For such build, this flag generates reproducible obj files even we use
+- # different build directory like "out/feature_a" and "out/feature_b" if
+- # we build same files with same compile flag.
+- # Other paths are already given in relative, no need to normalize them.
+- if (is_nacl) {
+- # TODO(https://crbug.com/1231236): Use -ffile-compilation-dir= here.
+- cflags += [
+- "-Xclang",
+- "-fdebug-compilation-dir",
+- "-Xclang",
+- ".",
+- ]
+- } else {
+- # -ffile-compilation-dir is an alias for both -fdebug-compilation-dir=
+- # and -fcoverage-compilation-dir=.
+- cflags += [ "-ffile-compilation-dir=." ]
+- }
+- if (!is_win) {
+- # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
+- asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
+- }
+-
+- if (is_win && use_lld) {
+- if (symbol_level == 2 || (is_clang && using_sanitizer)) {
+- # Absolutize source file paths for PDB. Pass the real build directory
+- # if the pdb contains source-level debug information and if linker
+- # reproducibility is not critical.
+- ldflags += [ "/PDBSourcePath:" + rebase_path(root_build_dir) ]
+- } else {
+- # Use a fake fixed base directory for paths in the pdb to make the pdb
+- # output fully deterministic and independent of the build directory.
+- ldflags += [ "/PDBSourcePath:o:\fake\prefix" ]
+- }
+- }
+- }
+-
+ # Tells the compiler not to use absolute paths when passing the default
+ # paths to the tools it invokes. We don't want this because we don't
+ # really need it and it can mess up the goma cache entries.
+@@ -1558,7 +1499,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1567,10 +1508,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1579,15 +1516,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1955,7 +1883,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -1995,7 +1924,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2035,7 +1965,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2068,7 +1999,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2094,7 +2026,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ rustflags = [ "-Copt-level=1" ]
+ ldflags = common_optimize_on_ldflags
+@@ -2214,7 +2147,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2328,7 +2262,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2400,7 +2335,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-96-coupondb-include.patch b/www-client/chromium/files/chromium-96-coupondb-include.patch
new file mode 100644
index 0000000..d0938d2
--- /dev/null
+++ b/www-client/chromium/files/chromium-96-coupondb-include.patch
@@ -0,0 +1,13 @@
+diff --git a/chrome/browser/commerce/coupons/coupon_db.h b/chrome/browser/commerce/coupons/coupon_db.h
+index f0758f43d..93e2dd3b5 100644
+--- a/chrome/browser/commerce/coupons/coupon_db.h
++++ b/chrome/browser/commerce/coupons/coupon_db.h
+@@ -5,6 +5,8 @@
+ #ifndef CHROME_BROWSER_COMMERCE_COUPONS_COUPON_DB_H_
+ #define CHROME_BROWSER_COMMERCE_COUPONS_COUPON_DB_H_
+
++#include <vector>
++
+ #include "base/callback_helpers.h"
+ #include "base/memory/weak_ptr.h"
+ #include "url/gurl.h"
diff --git a/www-client/chromium/files/chromium-96-template-friend.patch b/www-client/chromium/files/chromium-96-template-friend.patch
new file mode 100644
index 0000000..4b8a5e4
--- /dev/null
+++ b/www-client/chromium/files/chromium-96-template-friend.patch
@@ -0,0 +1,34 @@
+diff --git a/base/memory/safe_ref.h b/base/memory/safe_ref.h
+index 7189f8786..162c6744f 100644
+--- a/base/memory/safe_ref.h
++++ b/base/memory/safe_ref.h
+@@ -88,9 +88,10 @@ class SafeRef {
+ private:
+ template <typename U>
+ friend class SafeRef;
+- friend SafeRef internal::MakeSafeRefFromWeakPtrInternals(
++ template <typename U>
++ friend SafeRef<U> internal::MakeSafeRefFromWeakPtrInternals(
+ const internal::WeakReference& ref,
+- T* ptr);
++ U* ptr);
+
+ // Construction from a from WeakPtr. Will CHECK() if the WeakPtr is already
+ // invalid.
+diff --git a/base/memory/weak_ptr.h b/base/memory/weak_ptr.h
+index 17f7b8f87..d042ecff2 100644
+--- a/base/memory/weak_ptr.h
++++ b/base/memory/weak_ptr.h
+@@ -289,9 +289,10 @@ class WeakPtr : public internal::WeakPtrBase {
+ template <typename U> friend class WeakPtr;
+ friend class SupportsWeakPtr<T>;
+ friend class WeakPtrFactory<T>;
+- friend SafeRef<T> internal::MakeSafeRefFromWeakPtrInternals(
++ template <typename U>
++ friend SafeRef<U> internal::MakeSafeRefFromWeakPtrInternals(
+ const internal::WeakReference& ref,
+- T* ptr);
++ U* ptr);
+
+ WeakPtr(const internal::WeakReference& ref, T* ptr)
+ : WeakPtrBase(ref, reinterpret_cast<uintptr_t>(ptr)) {}
diff --git a/www-client/chromium/files/chromium-angle-inline.patch b/www-client/chromium/files/chromium-angle-inline.patch
new file mode 100644
index 0000000..e8975d7
--- /dev/null
+++ b/www-client/chromium/files/chromium-angle-inline.patch
@@ -0,0 +1,118 @@
+From 4c0a23611b3906855db7b93da2f34aec57930cdf Mon Sep 17 00:00:00 2001
+From: Geoff Lang <geofflang@chromium.org>
+Date: Tue, 25 Jun 2019 10:56:29 -0400
+Subject: [PATCH] Update ValidateSamplerParameterBase to use const parameters.
+
+ValidateSamplerParameterBase is called with both const and non-const
+parameter pointers which caused our explicit template instantiations to
+not cover all cases resulting in link errors. Force the parameters to
+always be const so that our instantiations cover everything.
+
+BUG=angleproject:3555
+
+Change-Id: Ibf92572ba80a689c75dcdc70e5153d9941da76f3
+Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1676305
+Reviewed-by: Jonah Ryan-Davis <jonahr@google.com>
+Commit-Queue: Geoff Lang <geofflang@chromium.org>
+---
+
+diff --git a/third_party/angle/src/libANGLE/validationES.cpp b/third_party/angle/src/libANGLE/validationES.cpp
+index 041803a..3f402f6 100644
+--- a/third_party/angle/src/libANGLE/validationES.cpp
++++ b/third_party/angle/src/libANGLE/validationES.cpp
+@@ -189,7 +189,9 @@
+ }
+
+ template <typename ParamType>
+-bool ValidateTextureWrapModeValue(Context *context, ParamType *params, bool restrictedWrapModes)
++bool ValidateTextureWrapModeValue(Context *context,
++ const ParamType *params,
++ bool restrictedWrapModes)
+ {
+ switch (ConvertToGLenum(params[0]))
+ {
+@@ -223,7 +225,9 @@
+ }
+
+ template <typename ParamType>
+-bool ValidateTextureMinFilterValue(Context *context, ParamType *params, bool restrictedMinFilter)
++bool ValidateTextureMinFilterValue(Context *context,
++ const ParamType *params,
++ bool restrictedMinFilter)
+ {
+ switch (ConvertToGLenum(params[0]))
+ {
+@@ -252,7 +256,7 @@
+ }
+
+ template <typename ParamType>
+-bool ValidateTextureMagFilterValue(Context *context, ParamType *params)
++bool ValidateTextureMagFilterValue(Context *context, const ParamType *params)
+ {
+ switch (ConvertToGLenum(params[0]))
+ {
+@@ -269,7 +273,7 @@
+ }
+
+ template <typename ParamType>
+-bool ValidateTextureCompareModeValue(Context *context, ParamType *params)
++bool ValidateTextureCompareModeValue(Context *context, const ParamType *params)
+ {
+ // Acceptable mode parameters from GLES 3.0.2 spec, table 3.17
+ switch (ConvertToGLenum(params[0]))
+@@ -287,7 +291,7 @@
+ }
+
+ template <typename ParamType>
+-bool ValidateTextureCompareFuncValue(Context *context, ParamType *params)
++bool ValidateTextureCompareFuncValue(Context *context, const ParamType *params)
+ {
+ // Acceptable function parameters from GLES 3.0.2 spec, table 3.17
+ switch (ConvertToGLenum(params[0]))
+@@ -311,7 +315,7 @@
+ }
+
+ template <typename ParamType>
+-bool ValidateTextureSRGBDecodeValue(Context *context, ParamType *params)
++bool ValidateTextureSRGBDecodeValue(Context *context, const ParamType *params)
+ {
+ if (!context->getExtensions().textureSRGBDecode)
+ {
+@@ -5996,7 +6000,7 @@
+ GLenum pname,
+ GLsizei bufSize,
+ bool vectorParams,
+- ParamType *params)
++ const ParamType *params)
+ {
+ if (context->getClientMajorVersion() < 3)
+ {
+@@ -6099,8 +6103,13 @@
+ return true;
+ }
+
+-template bool ValidateSamplerParameterBase(Context *, GLuint, GLenum, GLsizei, bool, GLfloat *);
+-template bool ValidateSamplerParameterBase(Context *, GLuint, GLenum, GLsizei, bool, GLint *);
++template bool ValidateSamplerParameterBase(Context *,
++ GLuint,
++ GLenum,
++ GLsizei,
++ bool,
++ const GLfloat *);
++template bool ValidateSamplerParameterBase(Context *, GLuint, GLenum, GLsizei, bool, const GLint *);
+ template bool ValidateSamplerParameterBase(Context *,
+ GLuint,
+ GLenum,
+diff --git a/third_party/angle/src/libANGLE/validationES.h b/third_party/angle/src/libANGLE/validationES.h
+index c61bda6..4b06d28 100644
+--- a/third_party/angle/src/libANGLE/validationES.h
++++ b/third_party/angle/src/libANGLE/validationES.h
+@@ -584,7 +584,7 @@
+ GLenum pname,
+ GLsizei bufSize,
+ bool vectorParams,
+- ParamType *params);
++ const ParamType *params);
+
+ bool ValidateGetInternalFormativBase(Context *context,
+ GLenum target,
diff --git a/www-client/chromium/files/chromium-axobj-ancestoriter-cat-84.patch b/www-client/chromium/files/chromium-axobj-ancestoriter-cat-84.patch
new file mode 100644
index 0000000..d554334
--- /dev/null
+++ b/www-client/chromium/files/chromium-axobj-ancestoriter-cat-84.patch
@@ -0,0 +1,33 @@
+Make blink::AXObject::AncestorsIterator STL compatible.
+
+Commit 31e5188ffc9a04295997d22bfdb68fc367bef047, "Used some methods from
+AXRoleProperties in AXObject" started using std::any_of with this custom
+iterator type. Unfortunately this iterator does not provide traits
+mandated by the standard. This works fine for libcxx, but fails when
+compiling the code against libstdc++.
+
+Bug: 819294
+Change-Id: I78fe25475593d73ce255f1de955aa41e936dff86
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2207112
+Reviewed-by: Kentaro Hara <haraken@chromium.org>
+Commit-Queue: Piotr Tworek <ptworek@vewd.com>
+Cr-Commit-Position: refs/heads/master@{#769713}
+
+diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h
+index 841715b..fbb87bf 100644
+--- a/third_party/blink/renderer/modules/accessibility/ax_object.h
++++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
+@@ -274,6 +274,12 @@
+ class MODULES_EXPORT AncestorsIterator final
+ : public GarbageCollected<AncestorsIterator> {
+ public:
++ using iterator_category = std::forward_iterator_tag;
++ using value_type = AXObject;
++ using difference_type = ptrdiff_t;
++ using pointer = value_type*;
++ using reference = value_type&;
++
+ ~AncestorsIterator() = default;
+
+ AncestorsIterator(const AncestorsIterator& other)
+
diff --git a/www-client/chromium/files/chromium-axtree-incomplete-type-83.patch b/www-client/chromium/files/chromium-axtree-incomplete-type-83.patch
new file mode 100644
index 0000000..7a8061a
--- /dev/null
+++ b/www-client/chromium/files/chromium-axtree-incomplete-type-83.patch
@@ -0,0 +1,41 @@
+diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
+index e90256109..76fa091e2 100644
+--- a/ui/accessibility/ax_tree.cc
++++ b/ui/accessibility/ax_tree.cc
+@@ -567,15 +567,6 @@ struct AXTreeUpdateState {
+ const AXTree& tree;
+ };
+
+-struct AXTree::NodeSetSizePosInSetInfo {
+- NodeSetSizePosInSetInfo() = default;
+- ~NodeSetSizePosInSetInfo() = default;
+-
+- int32_t pos_in_set = 0;
+- int32_t set_size = 0;
+- base::Optional<int> lowest_hierarchical_level;
+-};
+-
+ struct AXTree::OrderedSetContent {
+ explicit OrderedSetContent(const AXNode* ordered_set = nullptr)
+ : ordered_set_(ordered_set) {}
+diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h
+index a51ca8de4..ef1633212 100644
+--- a/ui/accessibility/ax_tree.h
++++ b/ui/accessibility/ax_tree.h
+@@ -328,7 +328,15 @@ class AX_EXPORT AXTree : public AXNode::OwnerTree {
+ bool enable_extra_mac_nodes_ = false;
+
+ // Contains pos_in_set and set_size data for an AXNode.
+- struct NodeSetSizePosInSetInfo;
++ struct NodeSetSizePosInSetInfo {
++ NodeSetSizePosInSetInfo() = default;
++ ~NodeSetSizePosInSetInfo() = default;
++
++ int32_t pos_in_set = 0;
++ int32_t set_size = 0;
++ base::Optional<int> lowest_hierarchical_level;
++ };
++
+
+ // Represents the content of an ordered set which includes the ordered set
+ // items and the ordered set container if it exists.
diff --git a/www-client/chromium/files/chromium-base-include-84-r1.patch b/www-client/chromium/files/chromium-base-include-84-r1.patch
new file mode 100644
index 0000000..1a17ed2
--- /dev/null
+++ b/www-client/chromium/files/chromium-base-include-84-r1.patch
@@ -0,0 +1,24 @@
+diff --git a/base/check_op.h b/base/check_op.h
+index 0943d0cc2..c16df8705 100644
+--- a/base/check_op.h
++++ b/base/check_op.h
+@@ -6,6 +6,7 @@
+ #define BASE_CHECK_OP_H_
+
+ #include <cstddef>
++#include <cstring>
+ #include <type_traits>
+
+ #include "base/check.h"
+diff --git a/base/debug/elf_reader.cc b/base/debug/elf_reader.cc
+index aea4f3b03..1cf7bf50d 100644
+--- a/base/debug/elf_reader.cc
++++ b/base/debug/elf_reader.cc
+@@ -4,6 +4,7 @@
+
+ #include "base/debug/elf_reader.h"
+
++#include <string.h>
+ #include <arpa/inet.h>
+ #include <elf.h>
+
diff --git a/www-client/chromium/files/chromium-base-include-84-r2.patch b/www-client/chromium/files/chromium-base-include-84-r2.patch
new file mode 100644
index 0000000..9ac745a
--- /dev/null
+++ b/www-client/chromium/files/chromium-base-include-84-r2.patch
@@ -0,0 +1,12 @@
+diff --git a/base/check_op.h b/base/check_op.h
+index 4816df4e8..0087dfe40 100644
+--- a/base/check_op.h
++++ b/base/check_op.h
+@@ -6,6 +6,7 @@
+ #define BASE_CHECK_OP_H_
+
+ #include <cstddef>
++#include <cstring>
+ #include <type_traits>
+
+ #include "base/check.h"
diff --git a/www-client/chromium/files/chromium-base-include-84.patch b/www-client/chromium/files/chromium-base-include-84.patch
new file mode 100644
index 0000000..9c5846b
--- /dev/null
+++ b/www-client/chromium/files/chromium-base-include-84.patch
@@ -0,0 +1,281 @@
+diff --git a/base/big_endian.cc b/base/big_endian.cc
+index 9e9e672e4..a706c4a4e 100644
+--- a/base/big_endian.cc
++++ b/base/big_endian.cc
+@@ -4,6 +4,8 @@
+
+ #include "base/big_endian.h"
+
++#include <string.h>
++
+ #include "base/numerics/checked_math.h"
+ #include "base/strings/string_piece.h"
+
+diff --git a/base/check_op.cc b/base/check_op.cc
+index 7e0806464..fcdb8df16 100644
+--- a/base/check_op.cc
++++ b/base/check_op.cc
+@@ -12,6 +12,7 @@
+ #endif
+
+ #include <cstdio>
++#include <cstring>
+ #include <sstream>
+
+ namespace logging {
+diff --git a/base/debug/elf_reader.cc b/base/debug/elf_reader.cc
+index aea4f3b03..1cf7bf50d 100644
+--- a/base/debug/elf_reader.cc
++++ b/base/debug/elf_reader.cc
+@@ -4,6 +4,7 @@
+
+ #include "base/debug/elf_reader.h"
+
++#include <string.h>
+ #include <arpa/inet.h>
+ #include <elf.h>
+
+diff --git a/base/files/dir_reader_linux.h b/base/files/dir_reader_linux.h
+index f12deeb2f..194cd92b0 100644
+--- a/base/files/dir_reader_linux.h
++++ b/base/files/dir_reader_linux.h
+@@ -7,6 +7,7 @@
+
+ #include <errno.h>
+ #include <fcntl.h>
++#include <string.h>
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <sys/syscall.h>
+diff --git a/base/logging.h b/base/logging.h
+index 7644ec188..848718612 100644
+--- a/base/logging.h
++++ b/base/logging.h
+@@ -6,6 +6,7 @@
+ #define BASE_LOGGING_H_
+
+ #include <stddef.h>
++#include <string.h>
+
+ #include <cassert>
+ #include <cstdint>
+diff --git a/base/metrics/metrics_hashes.cc b/base/metrics/metrics_hashes.cc
+index ef7072a4a..9cd2d5a93 100644
+--- a/base/metrics/metrics_hashes.cc
++++ b/base/metrics/metrics_hashes.cc
+@@ -4,6 +4,8 @@
+
+ #include "base/metrics/metrics_hashes.h"
+
++#include <string.h>
++
+ #include "base/hash/md5.h"
+ #include "base/logging.h"
+ #include "base/sys_byteorder.h"
+diff --git a/base/process/environment_internal.cc b/base/process/environment_internal.cc
+index 357140fa6..44f5c6603 100644
+--- a/base/process/environment_internal.cc
++++ b/base/process/environment_internal.cc
+@@ -5,6 +5,7 @@
+ #include "base/process/environment_internal.h"
+
+ #include <stddef.h>
++#include <string.h>
+
+ #include <vector>
+
+diff --git a/base/strings/string16.cc b/base/strings/string16.cc
+index 84962e671..b7df7e161 100644
+--- a/base/strings/string16.cc
++++ b/base/strings/string16.cc
+@@ -4,6 +4,8 @@
+
+ #include "base/strings/string16.h"
+
++#include <string.h>
++
+ #if defined(WCHAR_T_IS_UTF16) && !defined(_AIX)
+
+ #error This file should not be used on 2-byte wchar_t systems
+diff --git a/base/strings/string_piece.cc b/base/strings/string_piece.cc
+index c789bc2a0..bfaf99db5 100644
+--- a/base/strings/string_piece.cc
++++ b/base/strings/string_piece.cc
+@@ -5,6 +5,7 @@
+
+ #include "base/strings/string_piece.h"
+
++#include <string.h>
+ #include <limits.h>
+
+ #include <algorithm>
+diff --git a/base/strings/sys_string_conversions_posix.cc b/base/strings/sys_string_conversions_posix.cc
+index ad794cae2..dad27eaa5 100644
+--- a/base/strings/sys_string_conversions_posix.cc
++++ b/base/strings/sys_string_conversions_posix.cc
+@@ -4,6 +4,7 @@
+
+ #include "base/strings/sys_string_conversions.h"
+
++#include <string.h>
+ #include <stddef.h>
+ #include <wchar.h>
+
+diff --git a/base/synchronization/lock_impl.h b/base/synchronization/lock_impl.h
+index 830b878e8..cdb66fdca 100644
+--- a/base/synchronization/lock_impl.h
++++ b/base/synchronization/lock_impl.h
+@@ -16,6 +16,7 @@
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ #include <errno.h>
+ #include <pthread.h>
++#include <string.h>
+ #endif
+
+ namespace base {
+diff --git a/base/trace_event/blame_context.cc b/base/trace_event/blame_context.cc
+index e7599efa8..4b82c5526 100644
+--- a/base/trace_event/blame_context.cc
++++ b/base/trace_event/blame_context.cc
+@@ -25,7 +25,7 @@ BlameContext::BlameContext(const char* category,
+ parent_scope_(parent_context ? parent_context->scope() : nullptr),
+ parent_id_(parent_context ? parent_context->id() : 0),
+ category_group_enabled_(nullptr) {
+- DCHECK(!parent_context || !std::strcmp(name_, parent_context->name()))
++ DCHECK(!parent_context || !strcmp(name_, parent_context->name()))
+ << "Parent blame context must have the same name";
+ }
+
+diff --git a/components/network_hints/renderer/dns_prefetch_queue.cc b/components/network_hints/renderer/dns_prefetch_queue.cc
+index af34d8df0..7905ad49d 100644
+--- a/components/network_hints/renderer/dns_prefetch_queue.cc
++++ b/components/network_hints/renderer/dns_prefetch_queue.cc
+@@ -6,8 +6,11 @@
+
+ #include "components/network_hints/renderer/dns_prefetch_queue.h"
+
++#include <cstring>
++
+ #include "base/logging.h"
+
++
+ namespace network_hints {
+
+ DnsQueue::DnsQueue(BufferSize size)
+diff --git a/components/omnibox/browser/on_device_head_model.cc b/components/omnibox/browser/on_device_head_model.cc
+index 0fa2ff25e..ad5e9386f 100644
+--- a/components/omnibox/browser/on_device_head_model.cc
++++ b/components/omnibox/browser/on_device_head_model.cc
+@@ -4,6 +4,7 @@
+
+ #include "components/omnibox/browser/on_device_head_model.h"
+
++#include <cstring>
+ #include <algorithm>
+
+ #include "base/logging.h"
+diff --git a/google_apis/gcm/base/socket_stream.cc b/google_apis/gcm/base/socket_stream.cc
+index d9759e767..bc33dca40 100644
+--- a/google_apis/gcm/base/socket_stream.cc
++++ b/google_apis/gcm/base/socket_stream.cc
+@@ -177,7 +177,7 @@ void SocketInputStream::RebuildBuffer() {
+ DVLOG(1) << "Have " << unread_data_size
+ << " unread bytes remaining, shifting.";
+ // Move any remaining unread data to the start of the buffer;
+- std::memmove(io_buffer_->data(), unread_data_ptr, unread_data_size);
++ memmove(io_buffer_->data(), unread_data_ptr, unread_data_size);
+ } else {
+ DVLOG(1) << "Have " << unread_data_size << " unread bytes remaining.";
+ }
+diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.h b/gpu/command_buffer/service/gles2_cmd_decoder.h
+index f4c3014d1..7491797e7 100644
+--- a/gpu/command_buffer/service/gles2_cmd_decoder.h
++++ b/gpu/command_buffer/service/gles2_cmd_decoder.h
+@@ -9,6 +9,7 @@
+
+ #include <stdint.h>
+
++#include <cstring>
+ #include <string>
+ #include <vector>
+
+diff --git a/gpu/vulkan/vulkan_device_queue.cc b/gpu/vulkan/vulkan_device_queue.cc
+index 4d95330b5..a6a130593 100644
+--- a/gpu/vulkan/vulkan_device_queue.cc
++++ b/gpu/vulkan/vulkan_device_queue.cc
+@@ -98,7 +98,7 @@ bool VulkanDeviceQueue::Initialize(
+ std::find_if(physical_device_info.extensions.begin(),
+ physical_device_info.extensions.end(),
+ [extension](const VkExtensionProperties& p) {
+- return std::strcmp(extension, p.extensionName) == 0;
++ return strcmp(extension, p.extensionName) == 0;
+ });
+ if (it == physical_device_info.extensions.end()) {
+ // On Fuchsia, some device extensions are provided by layers.
+@@ -118,7 +118,7 @@ bool VulkanDeviceQueue::Initialize(
+ std::find_if(physical_device_info.extensions.begin(),
+ physical_device_info.extensions.end(),
+ [extension](const VkExtensionProperties& p) {
+- return std::strcmp(extension, p.extensionName) == 0;
++ return strcmp(extension, p.extensionName) == 0;
+ });
+ if (it == physical_device_info.extensions.end()) {
+ DLOG(ERROR) << "Optional Vulkan extension " << extension
+@@ -255,4 +255,4 @@ std::unique_ptr<VulkanCommandPool> VulkanDeviceQueue::CreateCommandPool() {
+ return command_pool;
+ }
+
+-} // namespace gpu
+\ No newline at end of file
++} // namespace gpu
+diff --git a/jingle/glue/fake_ssl_client_socket.cc b/jingle/glue/fake_ssl_client_socket.cc
+index 54691d935..c61c6c8a1 100644
+--- a/jingle/glue/fake_ssl_client_socket.cc
++++ b/jingle/glue/fake_ssl_client_socket.cc
+@@ -7,6 +7,7 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <cstdlib>
++#include <cstring>
+ #include <utility>
+
+ #include "base/bind.h"
+diff --git a/net/base/datagram_buffer.cc b/net/base/datagram_buffer.cc
+index 922d8486e..b7f737405 100644
+--- a/net/base/datagram_buffer.cc
++++ b/net/base/datagram_buffer.cc
+@@ -42,7 +42,7 @@ DatagramBuffer::~DatagramBuffer() {}
+
+ void DatagramBuffer::Set(const char* buffer, size_t buf_len) {
+ length_ = buf_len;
+- std::memcpy(data_.get(), buffer, buf_len);
++ memcpy(data_.get(), buffer, buf_len);
+ }
+
+ char* DatagramBuffer::data() const {
+diff --git a/net/reporting/reporting_header_parser.cc b/net/reporting/reporting_header_parser.cc
+index 3701d15bf..fc144ed63 100644
+--- a/net/reporting/reporting_header_parser.cc
++++ b/net/reporting/reporting_header_parser.cc
+@@ -81,7 +81,7 @@ HeaderEndpointOutcome ProcessEndpoint(
+
+ GURL endpoint_url;
+ // Support path-absolute-URL string
+- if (std::strspn(endpoint_url_string.c_str(), "/") == 1) {
++ if (strspn(endpoint_url_string.c_str(), "/") == 1) {
+ endpoint_url = group_key.origin.GetURL().Resolve(endpoint_url_string);
+ } else {
+ endpoint_url = GURL(endpoint_url_string);
+diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
+index fbfdfedff..3b9fd967e 100644
+--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
++++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
+@@ -891,7 +891,7 @@ void NGInlineNode::SegmentText(NGInlineNodeData* data) {
+
+ // Segment NGInlineItem by script, Emoji, and orientation using RunSegmenter.
+ void NGInlineNode::SegmentScriptRuns(NGInlineNodeData* data) {
+- DCHECK_EQ(data->segments, nullptr);
++ DCHECK_EQ(data->segments.get(), nullptr);
+
+ String& text_content = data->text_content;
+ if (text_content.IsEmpty()) {
diff --git a/www-client/chromium/files/chromium-blink-include-bitset-84.patch b/www-client/chromium/files/chromium-blink-include-bitset-84.patch
new file mode 100644
index 0000000..95ed89c
--- /dev/null
+++ b/www-client/chromium/files/chromium-blink-include-bitset-84.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/common/input/web_touch_event.cc b/third_party/blink/common/input/web_touch_event.cc
+index 7ef37fec6..b77be3bac 100644
+--- a/third_party/blink/common/input/web_touch_event.cc
++++ b/third_party/blink/common/input/web_touch_event.cc
+@@ -4,6 +4,8 @@
+
+ #include "third_party/blink/public/common/input/web_touch_event.h"
+
++#include <bitset>
++
+ namespace blink {
+
+ namespace {
diff --git a/www-client/chromium/files/chromium-blink-include-limits-84.patch b/www-client/chromium/files/chromium-blink-include-limits-84.patch
new file mode 100644
index 0000000..4c6b972
--- /dev/null
+++ b/www-client/chromium/files/chromium-blink-include-limits-84.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/renderer/platform/graphics/compositor_element_id.cc b/third_party/blink/renderer/platform/graphics/compositor_element_id.cc
+index 86486ca89..a92d89cf2 100644
+--- a/third_party/blink/renderer/platform/graphics/compositor_element_id.cc
++++ b/third_party/blink/renderer/platform/graphics/compositor_element_id.cc
+@@ -4,6 +4,8 @@
+
+ #include "third_party/blink/renderer/platform/graphics/compositor_element_id.h"
+
++#include <limits>
++
+ namespace blink {
+
+ UniqueObjectId NewUniqueObjectId() {
diff --git a/www-client/chromium/files/chromium-blink-include-memory-83.patch b/www-client/chromium/files/chromium-blink-include-memory-83.patch
new file mode 100644
index 0000000..b9a6929
--- /dev/null
+++ b/www-client/chromium/files/chromium-blink-include-memory-83.patch
@@ -0,0 +1,13 @@
+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 f5a7ab038..ef19cfaf6 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"
diff --git a/www-client/chromium/files/chromium-blink-template.patch b/www-client/chromium/files/chromium-blink-template.patch
new file mode 100644
index 0000000..edaf74b
--- /dev/null
+++ b/www-client/chromium/files/chromium-blink-template.patch
@@ -0,0 +1,15 @@
+diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
+index d9fa696c9..028f9f270 100644
+--- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
++++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
+@@ -1773,8 +1773,9 @@ void BaseRenderingContext2D::putImageData(ImageData* data,
+ data_length *= context_color_params.BytesPerPixel();
+ if (!data_length.IsValid())
+ return;
++ size_t dl=data_length.ValueOrDie();
+ std::unique_ptr<uint8_t[]> converted_pixels(
+- new uint8_t[data_length.ValueOrDie()]);
++ new uint8_t[dl]);
+ if (data->ImageDataInCanvasColorSettings(
+ ColorParams().ColorSpace(), PixelFormat(), converted_pixels.get(),
+ kRGBAColorType)) {
diff --git a/www-client/chromium/files/chromium-bluetooth-tuple-84.patch b/www-client/chromium/files/chromium-bluetooth-tuple-84.patch
new file mode 100644
index 0000000..b01978c
--- /dev/null
+++ b/www-client/chromium/files/chromium-bluetooth-tuple-84.patch
@@ -0,0 +1,51 @@
+From ded9cf966b7a9b1986bd420866f7cec74e3c2eff Mon Sep 17 00:00:00 2001
+From: David Lechner <david@pybricks.com>
+Date: Tue, 09 Jun 2020 11:15:09 -0500
+Subject: [PATCH] [bluetooth] fix compile error in dbus fake bluetooth device client
+
+This fixes a compile error that was accidentally introduced in
+https://crrev.com/2191232. For unknown reasons this does not cause a
+compile error with libc++, which is normally used with chromium, but
+does cause an error with stdlibc++.
+
+The API for preparing write requests was not changed in
+https://crrev.com/2191232, so the change that introduced this error
+was incorrect anyway. This reverts the change that introduced the
+error and adds the kTypeRequest argument to the call to WriteValue()
+since that was the API that was actually changed in the prior CL.
+
+Bug: 1092470
+Change-Id: I6f6fe90ab42aea3db8cac95b69aee5095ea33b31
+---
+
+diff --git a/device/bluetooth/dbus/fake_bluetooth_device_client.cc b/device/bluetooth/dbus/fake_bluetooth_device_client.cc
+index f7136af..23c5fe3 100644
+--- a/device/bluetooth/dbus/fake_bluetooth_device_client.cc
++++ b/device/bluetooth/dbus/fake_bluetooth_device_client.cc
+@@ -649,10 +649,9 @@
+ for (const auto& prepare_write_request : prepare_write_requests_) {
+ bluez::BluezDBusManager::Get()
+ ->GetBluetoothGattCharacteristicClient()
+- ->WriteValue(std::get<0>(prepare_write_request),
+- std::get<1>(prepare_write_request),
+- std::get<2>(prepare_write_request), base::DoNothing(),
+- base::DoNothing());
++ ->WriteValue(prepare_write_request.first, prepare_write_request.second,
++ bluetooth_gatt_characteristic::kTypeRequest,
++ base::DoNothing(), base::DoNothing());
+ }
+ prepare_write_requests_.clear();
+ std::move(callback).Run();
+diff --git a/device/bluetooth/dbus/fake_bluetooth_device_client.h b/device/bluetooth/dbus/fake_bluetooth_device_client.h
+index b46715b5..98a9676 100644
+--- a/device/bluetooth/dbus/fake_bluetooth_device_client.h
++++ b/device/bluetooth/dbus/fake_bluetooth_device_client.h
+@@ -384,7 +384,7 @@
+ bool delay_start_discovery_;
+
+ // Pending prepare write requests.
+- std::vector<std::tuple<dbus::ObjectPath, std::vector<uint8_t>, std::string>>
++ std::vector<std::pair<dbus::ObjectPath, std::vector<uint8_t>>>
+ prepare_write_requests_;
+
+ bool should_leave_connections_pending_;
diff --git a/www-client/chromium/files/chromium-browser.xml b/www-client/chromium/files/chromium-browser.xml
new file mode 100644
index 0000000..2c95a55
--- /dev/null
+++ b/www-client/chromium/files/chromium-browser.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE default-apps SYSTEM "gnome-da-list.dtd">
+<default-apps>
+ <web-browsers>
+ <web-browser>
+ <name>Chromium</name>
+ <executable>chromium-browser</executable>
+ <command>chromium-browser %s</command>
+ <icon-name>chromium-browser</icon-name>
+ <run-in-terminal>false</run-in-terminal>
+ </web-browser>
+ </web-browsers>
+</default-apps>
diff --git a/www-client/chromium/files/chromium-build-gn-83.patch b/www-client/chromium/files/chromium-build-gn-83.patch
new file mode 100644
index 0000000..e70ced6
--- /dev/null
+++ b/www-client/chromium/files/chromium-build-gn-83.patch
@@ -0,0 +1,36 @@
+diff --git a/BUILD.gn b/BUILD.gn
+index 4c1f89045..2bfac42ed 100644
+--- a/BUILD.gn
++++ b/BUILD.gn
+@@ -1375,17 +1375,17 @@ if (closure_compile) {
+ # Because of the source assignment filter, many targets end up over-filtering
+ # their sources if the output directory contains a platform name. Assert that
+ # this doesn't happen. http://crbug.com/548283
+-assert(
+- filter_exclude([ "$root_build_dir/foo" ],
+- # List copied from //build/config/BUILDCONFIG.gn.
+- [
+- "*\bandroid/*",
+- "*\bchromeos/*",
+- "*\bcocoa/*",
+- "*\bios/*",
+- "*\blinux/*",
+- "*\bmac/*",
+- "*\bposix/*",
+- "*\bwin/*",
+- ]) != [],
+- "Do not use a platform name in your output directory (found \"$root_build_dir\"). http://crbug.com/548283")
++#assert(
++# filter_exclude([ "$root_build_dir/foo" ],
++# # List copied from //build/config/BUILDCONFIG.gn.
++# [
++# "*\bandroid/*",
++# "*\bchromeos/*",
++# "*\bcocoa/*",
++# "*\bios/*",
++# "*\blinux/*",
++# "*\bmac/*",
++# "*\bposix/*",
++# "*\bwin/*",
++# ]) != [],
++# "Do not use a platform name in your output directory (found \"$root_build_dir\"). http://crbug.com/548283")
diff --git a/www-client/chromium/files/chromium-cc-matrics-include-84.patch b/www-client/chromium/files/chromium-cc-matrics-include-84.patch
new file mode 100644
index 0000000..b1fa0c7
--- /dev/null
+++ b/www-client/chromium/files/chromium-cc-matrics-include-84.patch
@@ -0,0 +1,12 @@
+diff --git a/cc/metrics/lcd_text_metrics_reporter.h b/cc/metrics/lcd_text_metrics_reporter.h
+index 921131797..b2aede915 100644
+--- a/cc/metrics/lcd_text_metrics_reporter.h
++++ b/cc/metrics/lcd_text_metrics_reporter.h
+@@ -6,6 +6,7 @@
+ #define CC_METRICS_LCD_TEXT_METRICS_REPORTER_H_
+
+ #include <cstdint>
++#include <memory>
+
+ #include "base/time/time.h"
+ #include "cc/cc_export.h"
diff --git a/www-client/chromium/files/chromium-cert-share-encrypted-85.patch b/www-client/chromium/files/chromium-cert-share-encrypted-85.patch
new file mode 100644
index 0000000..1a393c4
--- /dev/null
+++ b/www-client/chromium/files/chromium-cert-share-encrypted-85.patch
@@ -0,0 +1,13 @@
+diff --git a/chrome/browser/nearby_sharing/certificates/nearby_share_encrypted_metadata_key.h b/chrome/browser/nearby_sharing/certificates/nearby_share_encrypted_metadata_key.h
+index 2893bdeef..6732a12a8 100644
+--- a/chrome/browser/nearby_sharing/certificates/nearby_share_encrypted_metadata_key.h
++++ b/chrome/browser/nearby_sharing/certificates/nearby_share_encrypted_metadata_key.h
+@@ -5,6 +5,8 @@
+ #ifndef CHROME_BROWSER_NEARBY_SHARING_CERTIFICATES_NEARBY_SHARE_ENCRYPTED_METADATA_KEY_H_
+ #define CHROME_BROWSER_NEARBY_SHARING_CERTIFICATES_NEARBY_SHARE_ENCRYPTED_METADATA_KEY_H_
+
++#include <stdint.h>
++
+ #include <vector>
+
+ // Holds the encrypted symmetric key--the key used to encrypt user/device
diff --git a/www-client/chromium/files/chromium-char-max-84.patch b/www-client/chromium/files/chromium-char-max-84.patch
new file mode 100644
index 0000000..0f9c654
--- /dev/null
+++ b/www-client/chromium/files/chromium-char-max-84.patch
@@ -0,0 +1,12 @@
+diff --git a/components/prefs/pref_value_map.cc b/components/prefs/pref_value_map.cc
+index 8a203ac7a..18f160b6e 100644
+--- a/components/prefs/pref_value_map.cc
++++ b/components/prefs/pref_value_map.cc
+@@ -4,6 +4,7 @@
+
+ #include "components/prefs/pref_value_map.h"
+
++#include <climits>
+ #include <map>
+ #include <memory>
+ #include <utility>
diff --git a/www-client/chromium/files/chromium-clang-format-path-82.patch b/www-client/chromium/files/chromium-clang-format-path-82.patch
new file mode 100644
index 0000000..b250479
--- /dev/null
+++ b/www-client/chromium/files/chromium-clang-format-path-82.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py b/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py
+index dc3493cc3..6eeb34a93 100644
+--- a/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py
++++ b/third_party/blink/renderer/bindings/scripts/bind_gen/style_format.py
+@@ -36,7 +36,7 @@ def init(root_src_dir):
+
+ # //buildtools/<platform>/clang-format
+ _clang_format_command_path = os.path.join(
+- buildtools_platform_dir, "clang-format{}".format(exe_suffix))
++ "/usr/lib/llvm/10/bin", "clang-format{}".format(exe_suffix))
+
+ # //buildtools/<platform>/gn
+ _gn_command_path = os.path.join(buildtools_platform_dir,
diff --git a/www-client/chromium/files/chromium-compiler-76.patch b/www-client/chromium/files/chromium-compiler-76.patch
new file mode 100644
index 0000000..66f80c0
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-76.patch
@@ -0,0 +1,160 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index f8a862a6b..41b30dd17 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -230,8 +230,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -471,20 +469,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1523,7 +1507,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1532,10 +1516,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1544,15 +1524,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1941,7 +1912,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1975,7 +1947,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -1998,7 +1971,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2026,7 +2000,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2073,7 +2048,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2111,7 +2087,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2213,7 +2190,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2323,7 +2301,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Linker symbols for backtraces only.
+ cflags = []
+@@ -2380,7 +2359,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
diff --git a/www-client/chromium/files/chromium-compiler-77.patch b/www-client/chromium/files/chromium-compiler-77.patch
new file mode 100644
index 0000000..c311e47
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-77.patch
@@ -0,0 +1,160 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 72cea8e47..1c59181f8 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -233,8 +233,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -474,20 +472,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1533,7 +1517,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1542,10 +1526,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1554,15 +1534,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1951,7 +1922,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1985,7 +1957,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -2008,7 +1981,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2036,7 +2010,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2083,7 +2058,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2121,7 +2097,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2223,7 +2200,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2333,7 +2311,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2388,7 +2367,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
diff --git a/www-client/chromium/files/chromium-compiler-78.patch b/www-client/chromium/files/chromium-compiler-78.patch
new file mode 100644
index 0000000..77a8f60
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-78.patch
@@ -0,0 +1,160 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index bd7245d9a..71d27bcf9 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -248,8 +248,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -489,20 +487,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1538,7 +1522,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1547,10 +1531,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1559,15 +1539,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1968,7 +1939,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1994,7 +1966,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -2017,7 +1990,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2045,7 +2019,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2084,7 +2059,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2114,7 +2090,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2216,7 +2193,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2326,7 +2304,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2381,7 +2360,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
diff --git a/www-client/chromium/files/chromium-compiler-82.patch b/www-client/chromium/files/chromium-compiler-82.patch
new file mode 100644
index 0000000..62ca00c
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-82.patch
@@ -0,0 +1,166 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index e40194e3f..b47385c34 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -260,8 +260,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -486,26 +484,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+-
+- if (target_os != "chromeos") {
+- # TODO(https://crbug.com/1049161): Remove '-DCLANG_SPAWN_CC1=ON' from build.py instead
+- # once this change has marinated a bit.
+- cflags += [ "-fintegrated-cc1" ]
+- }
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1577,7 +1555,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = [ ]
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1586,10 +1564,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1598,15 +1572,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -2010,7 +1975,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -2036,7 +2002,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -2059,7 +2026,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2093,7 +2061,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2132,7 +2101,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2162,7 +2132,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2278,7 +2249,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2388,7 +2360,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2443,7 +2416,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
diff --git a/www-client/chromium/files/chromium-compiler-83.patch b/www-client/chromium/files/chromium-compiler-83.patch
new file mode 100644
index 0000000..cb3c343
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-83.patch
@@ -0,0 +1,150 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 6f096b953..0e84f4450 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -261,8 +261,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -485,20 +483,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1545,7 +1529,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = [ ]
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1554,10 +1538,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1566,15 +1546,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1973,7 +1944,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags.
+ # /O1 implies /Os and /GF.
+@@ -1994,7 +1966,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2028,7 +2001,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2060,7 +2034,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2085,7 +2060,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2201,7 +2177,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2307,7 +2284,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2364,7 +2342,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-compiler-84-r1.patch b/www-client/chromium/files/chromium-compiler-84-r1.patch
new file mode 100644
index 0000000..2ad6be7
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-84-r1.patch
@@ -0,0 +1,150 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 571d37f9d..fc7905808 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -265,8 +265,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -495,20 +493,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1543,7 +1527,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = [ ]
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1552,10 +1536,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1564,15 +1544,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1970,7 +1941,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -1997,7 +1969,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2031,7 +2004,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2063,7 +2037,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2088,7 +2063,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2204,7 +2180,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2310,7 +2287,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2367,7 +2345,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-compiler-84.patch b/www-client/chromium/files/chromium-compiler-84.patch
new file mode 100644
index 0000000..76057d1
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-84.patch
@@ -0,0 +1,150 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 4c5e6779e..9280e746f 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -270,8 +270,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -500,20 +498,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1560,7 +1544,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = [ ]
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1569,10 +1553,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1581,15 +1561,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1987,7 +1958,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags.
+ # /O1 implies /Os and /GF.
+@@ -2008,7 +1980,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2042,7 +2015,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2074,7 +2048,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2099,7 +2074,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2215,7 +2191,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2321,7 +2298,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2378,7 +2356,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-compiler-86.patch b/www-client/chromium/files/chromium-compiler-86.patch
new file mode 100644
index 0000000..a740297
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-86.patch
@@ -0,0 +1,162 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 3b3cdd898..ed4baae3f 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -253,8 +253,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -485,17 +483,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1061,14 +1048,6 @@ config("compiler_codegen") {
+ ldflags += [ "-Wl,-mllvm,-enable-machine-outliner=never" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang && !is_chromeos_device) {
+- cflags += [
+- # TODO(thakis): Remove after next clang roll, see reviews.llvm.org/D82998
+- "-mllvm",
+- "-basic-aa-recphi=0",
+- ]
+- }
+-
+ # TODO(thakis): Remove `if (!is_win)` after next clang roll.
+ if (!is_win) {
+ asmflags = cflags
+@@ -1561,7 +1540,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = [ ]
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1570,10 +1549,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1582,15 +1557,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1988,7 +1954,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -2023,7 +1990,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2063,7 +2031,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2095,7 +2064,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2120,7 +2090,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2237,7 +2208,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2344,7 +2316,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2401,7 +2374,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-compiler-87.patch b/www-client/chromium/files/chromium-compiler-87.patch
new file mode 100644
index 0000000..5668bbb
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-87.patch
@@ -0,0 +1,147 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 16ee9ba..4dd19bd 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -258,8 +258,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -492,17 +490,6 @@ config("compiler") {
+ ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-mllvm",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
+@@ -1573,7 +1560,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = [ ]
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1582,10 +1569,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1594,15 +1577,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -2000,7 +1974,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ if (chrome_pgo_phase != 2) {
+ # Favor size over speed, /O1 must be before the common flags.
+@@ -2035,7 +2010,8 @@ config("optimize") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2075,7 +2051,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2107,7 +2084,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2132,7 +2110,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2249,7 +2228,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (is_clang) {
+ cflags = [ "/Z7" ] # Debug information in the .obj files.
+@@ -2360,7 +2340,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Functions, files, and line tables only.
+ cflags = []
+@@ -2413,7 +2394,8 @@ config("minimal_symbols") {
+ # This configuration contains function names only. That is, the compiler is
+ # told to not generate debug information and the linker then just puts function
+ # names in the final debug information.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (is_win) {
+ ldflags = [ "/DEBUG" ]
+
diff --git a/www-client/chromium/files/chromium-compiler-r10.patch b/www-client/chromium/files/chromium-compiler-r10.patch
new file mode 100644
index 0000000..f2ecdc3
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-r10.patch
@@ -0,0 +1,185 @@
+From a1207cc75454e653030716948d27ec27412f6fe8 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Sat, 16 Jun 2019 15:43:27 +0100
+Subject: [PATCH] Disable various compiler configs
+
+---
+ build/config/compiler/BUILD.gn | 64 +++++++++++++---------------------
+ 1 file changed, 25 insertions(+), 39 deletions(-)
+
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index a3f21b7..0a7bec6 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -230,8 +230,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -471,20 +469,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # C11/C++11 compiler flags setup.
+ # ---------------------------
+ if (is_linux || is_android || (is_nacl && is_clang) || current_os == "aix") {
+@@ -1431,6 +1415,12 @@ config("default_warnings") {
+ "-Wno-narrowing",
+ ]
+
++ # -Wno-class-memaccess warns about hash table and vector in blink.
++ # But the violation is intentional.
++ if (!is_nacl) {
++ cflags_cc += [ "-Wno-class-memaccess" ]
++ }
++
+ # -Wunused-local-typedefs is broken in gcc,
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63872
+ cflags += [ "-Wno-unused-local-typedefs" ]
+@@ -1525,7 +1515,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1534,10 +1524,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1546,15 +1532,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1943,7 +1920,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1977,7 +1955,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -2000,7 +1979,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2028,7 +2008,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2075,7 +2056,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2113,7 +2095,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2215,7 +2198,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2325,7 +2309,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Linker symbols for backtraces only.
+ cflags = []
+@@ -2382,7 +2367,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
+--
+2.21.0
+
diff --git a/www-client/chromium/files/chromium-compiler-r4.patch b/www-client/chromium/files/chromium-compiler-r4.patch
new file mode 100644
index 0000000..3fe73ef
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-r4.patch
@@ -0,0 +1,168 @@
+From 777d166eec22c1894108dce985498f75ac5931e8 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Wed, 25 Apr 2018 13:22:49 -0400
+Subject: [PATCH] Disable various compiler configs
+
+---
+ build/config/compiler/BUILD.gn | 61 ++++++++++------------------------
+ 1 file changed, 18 insertions(+), 43 deletions(-)
+
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 6e38ad782d38..87bbd423f67f 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -225,8 +225,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ]
+
+@@ -488,18 +486,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && current_toolchain == host_toolchain &&
+- target_os != "chromeos") {
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # Print absolute paths in diagnostics. There is no precedent for doing this
+ # on Linux/Mac (GCC doesn't support it), but MSVC does this with /FC and
+ # Windows developers rely on it (crbug.com/636109) so only do this on Windows.
+@@ -1473,10 +1459,6 @@ config("default_warnings") {
+ cflags += [
+ # TODO(thakis): https://crbug.com/753973
+ "-Wno-enum-compare-switch",
+-
+- # Ignore warnings about MSVC optimization pragmas.
+- # TODO(thakis): Only for no_chromium_code? http://crbug.com/505314
+- "-Wno-ignored-pragma-optimize",
+ ]
+ }
+ }
+@@ -1518,22 +1500,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer &&
+- (!is_linux || !is_clang || is_official_build) &&
+- current_cpu != "s390x" && current_cpu != "s390" &&
+- current_cpu != "ppc64" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # _FORTIFY_SOURCE isn't really supported by Clang now, see
+- # http://llvm.org/bugs/show_bug.cgi?id=16821.
+- # It seems to work fine with Ubuntu 12 headers though, so use it in
+- # official builds.
+- #
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac || is_ios) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1863,7 +1829,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1897,7 +1864,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -1920,7 +1888,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -1944,7 +1913,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -1991,7 +1961,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2029,7 +2000,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2115,7 +2087,8 @@ config("afdo") {
+ # configs += [ "//build/config/compiler:symbols" ]
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2213,7 +2186,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Linker symbols for backtraces only.
+ cflags = []
+@@ -2244,7 +2218,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
+--
+2.18.0
+
diff --git a/www-client/chromium/files/chromium-compiler-r6.patch b/www-client/chromium/files/chromium-compiler-r6.patch
new file mode 100644
index 0000000..db8d046
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-r6.patch
@@ -0,0 +1,170 @@
+From cec10e55fdb150b33342ad462907fb6202de364e Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Wed, 25 Apr 2018 13:22:49 -0400
+Subject: [PATCH] Disable various compiler configs
+
+---
+ build/config/compiler/BUILD.gn | 63 ++++++++++------------------------
+ 1 file changed, 18 insertions(+), 45 deletions(-)
+
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 0f7a6b48f7b2..c91b702147d4 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -236,8 +236,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ]
+
+@@ -502,17 +500,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # Print absolute paths in diagnostics. There is no precedent for doing this
+ # on Linux/Mac (GCC doesn't support it), but MSVC does this with /FC and
+ # Windows developers rely on it (crbug.com/636109) so only do this on Windows.
+@@ -1498,13 +1485,6 @@ config("default_warnings") {
+ cflags += [
+ # TODO(thakis): https://crbug.com/753973
+ "-Wno-enum-compare-switch",
+-
+- # Ignore warnings about MSVC optimization pragmas.
+- # TODO(thakis): Only for no_chromium_code? http://crbug.com/505314
+- "-Wno-ignored-pragma-optimize",
+-
+- # TODO(hans): https://crbug.com/890307
+- "-Wno-defaulted-function-deleted",
+ ]
+ }
+ }
+@@ -1546,22 +1526,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer &&
+- (!is_linux || !is_clang || is_official_build) &&
+- current_cpu != "s390x" && current_cpu != "s390" &&
+- current_cpu != "ppc64" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # _FORTIFY_SOURCE isn't really supported by Clang now, see
+- # http://llvm.org/bugs/show_bug.cgi?id=16821.
+- # It seems to work fine with Ubuntu 12 headers though, so use it in
+- # official builds.
+- #
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1931,7 +1895,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1965,7 +1930,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -1988,7 +1954,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2012,7 +1979,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2059,7 +2027,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2097,7 +2066,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2183,7 +2153,8 @@ config("afdo") {
+ # configs += [ "//build/config/compiler:symbols" ]
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2281,7 +2252,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Linker symbols for backtraces only.
+ cflags = []
+@@ -2321,7 +2293,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
+--
+2.19.1
+
diff --git a/www-client/chromium/files/chromium-compiler-r7.patch b/www-client/chromium/files/chromium-compiler-r7.patch
new file mode 100644
index 0000000..dcf40a8
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-r7.patch
@@ -0,0 +1,176 @@
+From 6ba946c7116f4f1d0b35fc90716b6e940116b74b Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Wed, 25 Apr 2018 13:22:49 -0400
+Subject: [PATCH] Disable various compiler configs
+
+---
+ build/config/compiler/BUILD.gn | 62 +++++++++++-----------------------
+ 1 file changed, 19 insertions(+), 43 deletions(-)
+
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 677003ac646c..f38bc908622a 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -236,8 +236,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ]
+
+@@ -502,17 +500,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # Print absolute paths in diagnostics. There is no precedent for doing this
+ # on Linux/Mac (GCC doesn't support it), but MSVC does this with /FC and
+ # Windows developers rely on it (crbug.com/636109) so only do this on Windows.
+@@ -1512,7 +1499,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1521,10 +1508,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1533,22 +1516,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer &&
+- (!is_linux || !is_clang || is_official_build) &&
+- current_cpu != "s390x" && current_cpu != "s390" &&
+- current_cpu != "ppc64" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # _FORTIFY_SOURCE isn't really supported by Clang now, see
+- # http://llvm.org/bugs/show_bug.cgi?id=16821.
+- # It seems to work fine with Ubuntu 12 headers though, so use it in
+- # official builds.
+- #
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1925,7 +1892,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1959,7 +1927,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -1982,7 +1951,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2006,7 +1976,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2053,7 +2024,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2091,7 +2063,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2193,7 +2166,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2294,7 +2268,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Linker symbols for backtraces only.
+ cflags = []
+@@ -2337,7 +2312,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
+--
+2.19.1
+
diff --git a/www-client/chromium/files/chromium-compiler-r8.patch b/www-client/chromium/files/chromium-compiler-r8.patch
new file mode 100644
index 0000000..117d1e6
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-r8.patch
@@ -0,0 +1,164 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 2f01fbbf4..8b487ad77 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -236,8 +236,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ]
+
+@@ -501,17 +499,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # Print absolute paths in diagnostics. There is no precedent for doing this
+ # on Linux/Mac (GCC doesn't support it), but MSVC does this with /FC and
+ # Windows developers rely on it (crbug.com/636109) so only do this on Windows.
+@@ -1516,7 +1503,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1525,10 +1512,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1537,22 +1520,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer &&
+- (!is_linux || !is_clang || is_official_build) &&
+- current_cpu != "s390x" && current_cpu != "s390" &&
+- current_cpu != "ppc64" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # _FORTIFY_SOURCE isn't really supported by Clang now, see
+- # http://llvm.org/bugs/show_bug.cgi?id=16821.
+- # It seems to work fine with Ubuntu 12 headers though, so use it in
+- # official builds.
+- #
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1922,7 +1889,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1956,7 +1924,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -1979,7 +1948,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2007,7 +1977,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2054,7 +2025,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2092,7 +2064,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2194,7 +2167,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2304,7 +2278,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Linker symbols for backtraces only.
+ cflags = []
+@@ -2356,7 +2331,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
diff --git a/www-client/chromium/files/chromium-compiler-r9.patch b/www-client/chromium/files/chromium-compiler-r9.patch
new file mode 100644
index 0000000..43cd93e
--- /dev/null
+++ b/www-client/chromium/files/chromium-compiler-r9.patch
@@ -0,0 +1,160 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index 7db66418e..ce3ba300a 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -230,8 +230,6 @@ config("compiler") {
+
+ configs += [
+ # See the definitions below.
+- ":clang_revision",
+- ":compiler_cpu_abi",
+ ":compiler_codegen",
+ ":compiler_deterministic",
+ ]
+@@ -479,20 +477,6 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
+- cflags += [ "-fcrash-diagnostics-dir=" +
+- rebase_path("//tools/clang/crashreports", root_build_dir) ]
+-
+- cflags += [
+- # TODO(hans): Remove this once Clang generates better optimized debug info
+- # by default. https://crbug.com/765793
+- "-Xclang",
+- "-mllvm",
+- "-Xclang",
+- "-instcombine-lower-dbg-declare=0",
+- ]
+- }
+-
+ # Print absolute paths in diagnostics. There is no precedent for doing this
+ # on Linux/Mac (GCC doesn't support it), but MSVC does this with /FC and
+ # Windows developers rely on it (crbug.com/636109) so only do this on Windows.
+@@ -1533,7 +1517,7 @@ config("chromium_code") {
+ defines = [ "_HAS_NODISCARD" ]
+ }
+ } else {
+- cflags = [ "-Wall" ]
++ cflags = []
+ if (treat_warnings_as_errors) {
+ cflags += [ "-Werror" ]
+
+@@ -1542,10 +1526,6 @@ config("chromium_code") {
+ # well.
+ ldflags = [ "-Werror" ]
+ }
+- if (is_clang) {
+- # Enable extra warnings for chromium_code when we control the compiler.
+- cflags += [ "-Wextra" ]
+- }
+
+ # In Chromium code, we define __STDC_foo_MACROS in order to get the
+ # C99 macros on Mac and Linux.
+@@ -1554,15 +1534,6 @@ config("chromium_code") {
+ "__STDC_FORMAT_MACROS",
+ ]
+
+- if (!is_debug && !using_sanitizer && current_cpu != "s390x" &&
+- current_cpu != "s390" && current_cpu != "ppc64" &&
+- current_cpu != "mips" && current_cpu != "mips64") {
+- # Non-chromium code is not guaranteed to compile cleanly with
+- # _FORTIFY_SOURCE. Also, fortified build may fail when optimizations are
+- # disabled, so only do that for Release build.
+- defines += [ "_FORTIFY_SOURCE=2" ]
+- }
+-
+ if (is_mac) {
+ cflags_objc = [ "-Wobjc-missing-property-synthesis" ]
+ cflags_objcc = [ "-Wobjc-missing-property-synthesis" ]
+@@ -1951,7 +1922,8 @@ config("default_stack_frames") {
+ }
+
+ # Default "optimization on" config.
+-config("optimize") {
++config("optimize") { }
++config("xoptimize") {
+ if (is_win) {
+ # TODO(thakis): Remove is_clang here, https://crbug.com/598772
+ if (is_official_build && full_wpo_on_official && !is_clang) {
+@@ -1985,7 +1957,8 @@ config("optimize") {
+ }
+
+ # Same config as 'optimize' but without the WPO flag.
+-config("optimize_no_wpo") {
++config("optimize_no_wpo") { }
++config("xoptimize_no_wpo") {
+ if (is_win) {
+ # Favor size over speed, /O1 must be before the common flags. The GYP
+ # build also specifies /Os and /GF but these are implied by /O1.
+@@ -2008,7 +1981,8 @@ config("optimize_no_wpo") {
+ }
+
+ # Turn off optimizations.
+-config("no_optimize") {
++config("no_optimize") { }
++config("xno_optimize") {
+ if (is_win) {
+ cflags = [
+ "/Od", # Disable optimization.
+@@ -2036,7 +2010,8 @@ config("no_optimize") {
+ # Turns up the optimization level. On Windows, this implies whole program
+ # optimization and link-time code generation which is very expensive and should
+ # be used sparingly.
+-config("optimize_max") {
++config("optimize_max") { }
++config("xoptimize_max") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2083,7 +2058,8 @@ config("optimize_max") {
+ #
+ # TODO(crbug.com/621335) - rework how all of these configs are related
+ # so that we don't need this disclaimer.
+-config("optimize_speed") {
++config("optimize_speed") { }
++config("xoptimize_speed") {
+ if (is_nacl && is_nacl_irt) {
+ # The NaCl IRT is a special case and always wants its own config.
+ # Various components do:
+@@ -2121,7 +2097,8 @@ config("optimize_speed") {
+ }
+ }
+
+-config("optimize_fuzzing") {
++config("optimize_fuzzing") { }
++config("xoptimize_fuzzing") {
+ cflags = [ "-O1" ] + common_optimize_on_cflags
+ ldflags = common_optimize_on_ldflags
+ visibility = [ ":default_optimization" ]
+@@ -2223,7 +2200,8 @@ config("win_pdbaltpath") {
+ }
+
+ # Full symbols.
+-config("symbols") {
++config("symbols") { }
++config("xsymbols") {
+ if (is_win) {
+ if (use_goma || is_clang) {
+ # Note that with VC++ this requires is_win_fastlink, enforced elsewhere.
+@@ -2328,7 +2306,8 @@ config("symbols") {
+ # Minimal symbols.
+ # This config guarantees to hold symbol for stack trace which are shown to user
+ # when crash happens in unittests running on buildbot.
+-config("minimal_symbols") {
++config("minimal_symbols") { }
++config("xminimal_symbols") {
+ if (is_win) {
+ # Linker symbols for backtraces only.
+ cflags = []
+@@ -2380,7 +2359,8 @@ config("minimal_symbols") {
+ }
+
+ # No symbols.
+-config("no_symbols") {
++config("no_symbols") { }
++config("xno_symbols") {
+ if (!is_win) {
+ cflags = [ "-g0" ]
+ asmflags = cflags
diff --git a/www-client/chromium/files/chromium-core-management-svc-84.patch b/www-client/chromium/files/chromium-core-management-svc-84.patch
new file mode 100644
index 0000000..89a5f1b
--- /dev/null
+++ b/www-client/chromium/files/chromium-core-management-svc-84.patch
@@ -0,0 +1,12 @@
+diff --git a/components/policy/core/common/management/management_service.h b/components/policy/core/common/management/management_service.h
+index cf71a2379..f845bff5c 100644
+--- a/components/policy/core/common/management/management_service.h
++++ b/components/policy/core/common/management/management_service.h
+@@ -7,6 +7,7 @@
+
+ #include "base/containers/flat_set.h"
+ #include "components/policy/policy_export.h"
++#include <memory>
+
+ namespace policy {
+
diff --git a/www-client/chromium/files/chromium-crx-install-err-include-83.patch b/www-client/chromium/files/chromium-crx-install-err-include-83.patch
new file mode 100644
index 0000000..fc42771
--- /dev/null
+++ b/www-client/chromium/files/chromium-crx-install-err-include-83.patch
@@ -0,0 +1,13 @@
+diff --git a/extensions/browser/install/crx_install_error.cc b/extensions/browser/install/crx_install_error.cc
+index a9765bb0a..ab5870069 100644
+--- a/extensions/browser/install/crx_install_error.cc
++++ b/extensions/browser/install/crx_install_error.cc
+@@ -7,6 +7,8 @@
+ #include "base/logging.h"
+ #include "extensions/browser/install/sandboxed_unpacker_failure_reason.h"
+
++#include <algorithm>
++
+ namespace extensions {
+
+ CrxInstallError::CrxInstallError(CrxInstallErrorType type,
diff --git a/www-client/chromium/files/chromium-cursor-80.patch b/www-client/chromium/files/chromium-cursor-80.patch
new file mode 100644
index 0000000..4907452
--- /dev/null
+++ b/www-client/chromium/files/chromium-cursor-80.patch
@@ -0,0 +1,99 @@
+diff --git a/chrome/browser/ui/libgtkui/gtk_ui.cc b/chrome/browser/ui/libgtkui/gtk_ui.cc
+index 1aea19a..cf38ee7 100644
+--- a/chrome/browser/ui/libgtkui/gtk_ui.cc
++++ b/chrome/browser/ui/libgtkui/gtk_ui.cc
+@@ -845,6 +845,8 @@
+ void GtkUi::OnCursorThemeNameChanged(GtkSettings* settings,
+ GtkParamSpec* param) {
+ std::string cursor_theme_name = GetCursorThemeName();
++ if (cursor_theme_name.empty())
++ return;
+ for (auto& observer : cursor_theme_observers())
+ observer.OnCursorThemeNameChanged(cursor_theme_name);
+ }
+@@ -852,6 +854,8 @@
+ void GtkUi::OnCursorThemeSizeChanged(GtkSettings* settings,
+ GtkParamSpec* param) {
+ int cursor_theme_size = GetCursorThemeSize();
++ if (!cursor_theme_size)
++ return;
+ for (auto& observer : cursor_theme_observers())
+ observer.OnCursorThemeSizeChanged(cursor_theme_size);
+ }
+diff --git a/ui/base/cursor/cursor_loader_x11.cc b/ui/base/cursor/cursor_loader_x11.cc
+index efc6351..52ab54a 100644
+--- a/ui/base/cursor/cursor_loader_x11.cc
++++ b/ui/base/cursor/cursor_loader_x11.cc
+@@ -83,11 +83,8 @@
+ : display_(gfx::GetXDisplay()),
+ invisible_cursor_(CreateInvisibleCursor(), gfx::GetXDisplay()) {
+ auto* cursor_theme_manager = CursorThemeManagerLinux::GetInstance();
+- if (cursor_theme_manager) {
++ if (cursor_theme_manager)
+ cursor_theme_observer_.Add(cursor_theme_manager);
+- OnCursorThemeNameChanged(cursor_theme_manager->GetCursorThemeName());
+- OnCursorThemeSizeChanged(cursor_theme_manager->GetCursorThemeSize());
+- }
+ }
+
+ CursorLoaderX11::~CursorLoaderX11() {
+diff --git a/ui/base/cursor/cursor_theme_manager_linux.cc b/ui/base/cursor/cursor_theme_manager_linux.cc
+index fe8a97f..f825b74 100644
+--- a/ui/base/cursor/cursor_theme_manager_linux.cc
++++ b/ui/base/cursor/cursor_theme_manager_linux.cc
+@@ -26,6 +26,12 @@
+ void CursorThemeManagerLinux::AddObserver(
+ CursorThemeManagerLinuxObserver* observer) {
+ cursor_theme_observers_.AddObserver(observer);
++ std::string name = GetCursorThemeName();
++ if (!name.empty())
++ observer->OnCursorThemeNameChanged(name);
++ int size = GetCursorThemeSize();
++ if (size)
++ observer->OnCursorThemeSizeChanged(size);
+ }
+
+ void CursorThemeManagerLinux::RemoveObserver(
+diff --git a/ui/base/cursor/cursor_theme_manager_linux.h b/ui/base/cursor/cursor_theme_manager_linux.h
+index 5304867..464d397 100644
+--- a/ui/base/cursor/cursor_theme_manager_linux.h
++++ b/ui/base/cursor/cursor_theme_manager_linux.h
+@@ -22,9 +22,10 @@
+
+ static CursorThemeManagerLinux* GetInstance();
+
+- virtual std::string GetCursorThemeName() = 0;
+- virtual int GetCursorThemeSize() = 0;
++ // Adds |observer| and makes initial OnCursorThemNameChanged() and/or
++ // OnCursorThemeSizeChanged() calls if the respective settings were set.
+ void AddObserver(CursorThemeManagerLinuxObserver* observer);
++
+ void RemoveObserver(CursorThemeManagerLinuxObserver* observer);
+
+ protected:
+@@ -35,6 +36,9 @@
+ return cursor_theme_observers_;
+ }
+
++ virtual std::string GetCursorThemeName() = 0;
++ virtual int GetCursorThemeSize() = 0;
++
+ private:
+ static CursorThemeManagerLinux* instance_;
+
+diff --git a/ui/base/cursor/cursor_theme_manager_linux_observer.h b/ui/base/cursor/cursor_theme_manager_linux_observer.h
+index 3d0c822..73a3b42 100644
+--- a/ui/base/cursor/cursor_theme_manager_linux_observer.h
++++ b/ui/base/cursor/cursor_theme_manager_linux_observer.h
+@@ -15,8 +15,11 @@
+ class UI_BASE_EXPORT CursorThemeManagerLinuxObserver
+ : public base::CheckedObserver {
+ public:
++ // |cursor_theme_name| will be nonempty.
+ virtual void OnCursorThemeNameChanged(
+ const std::string& cursor_theme_name) = 0;
++
++ // |cursor_theme_size| will be nonzero.
+ virtual void OnCursorThemeSizeChanged(int cursor_theme_size) = 0;
+
+ protected:
diff --git a/www-client/chromium/files/chromium-deque-constructor-82.patch b/www-client/chromium/files/chromium-deque-constructor-82.patch
new file mode 100644
index 0000000..5c9d237
--- /dev/null
+++ b/www-client/chromium/files/chromium-deque-constructor-82.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/renderer/platform/wtf/deque.h b/third_party/blink/renderer/platform/wtf/deque.h
+index 29cce7c57..07233c4 100644
+--- a/third_party/blink/renderer/platform/wtf/deque.h
++++ b/third_party/blink/renderer/platform/wtf/deque.h
+
+@@ -236,6 +236,7 @@
+ typedef T& reference;
+ typedef std::bidirectional_iterator_tag iterator_category;
+
++ DequeIterator() = default;
+ DequeIterator(Deque<T, inlineCapacity, Allocator>* deque, wtf_size_t index)
+ : Base(deque, index) {}
+
diff --git a/www-client/chromium/files/chromium-disable-mojovdec.patch b/www-client/chromium/files/chromium-disable-mojovdec.patch
new file mode 100644
index 0000000..e694ad2
--- /dev/null
+++ b/www-client/chromium/files/chromium-disable-mojovdec.patch
@@ -0,0 +1,18 @@
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index 477caecdb..e152cbddd 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -245,7 +245,12 @@ const base::Feature kMemoryPressureBasedSourceBufferGC{
+
+ // Enable MojoVideoDecoder, replacing GpuVideoDecoder.
+ const base::Feature kMojoVideoDecoder{"MojoVideoDecoder",
+- base::FEATURE_ENABLED_BY_DEFAULT};
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++ base::FEATURE_DISABLED_BY_DEFAULT
++#else
++ base::FEATURE_ENABLED_BY_DEFAULT
++#endif
++};
+
+ // Enable The D3D11 Video decoder. Must also enable MojoVideoDecoder for
+ // this to have any effect.
diff --git a/www-client/chromium/files/chromium-ext-no-vector-const-84.patch b/www-client/chromium/files/chromium-ext-no-vector-const-84.patch
new file mode 100644
index 0000000..7a02aba
--- /dev/null
+++ b/www-client/chromium/files/chromium-ext-no-vector-const-84.patch
@@ -0,0 +1,40 @@
+diff --git a/extensions/common/features/feature_flags.cc b/extensions/common/features/feature_flags.cc
+index 5b63764e4..7efa308db 100644
+--- a/extensions/common/features/feature_flags.cc
++++ b/extensions/common/features/feature_flags.cc
+@@ -19,7 +19,7 @@ namespace {
+ constexpr base::Feature kFeatureFlags[] = {
+ {"DeclarativeNetRequest", base::FEATURE_ENABLED_BY_DEFAULT}};
+
+-const std::vector<const base::Feature>* g_feature_flags_test_override = nullptr;
++const std::vector<base::Feature>* g_feature_flags_test_override = nullptr;
+
+ template <typename T>
+ const base::Feature* GetFeature(T begin,
+@@ -52,8 +52,8 @@ bool IsFeatureFlagEnabled(const std::string& feature_flag) {
+ }
+
+ ScopedFeatureFlagsOverride CreateScopedFeatureFlagsOverrideForTesting(
+- const std::vector<const base::Feature>* features) {
+- return base::AutoReset<const std::vector<const base::Feature>*>(
++ const std::vector<base::Feature>* features) {
++ return base::AutoReset<const std::vector<base::Feature>*>(
+ &g_feature_flags_test_override, features);
+ }
+
+diff --git a/extensions/common/features/feature_flags.h b/extensions/common/features/feature_flags.h
+index d1a5dd372..b57740b25 100644
+--- a/extensions/common/features/feature_flags.h
++++ b/extensions/common/features/feature_flags.h
+@@ -25,9 +25,9 @@ bool IsFeatureFlagEnabled(const std::string& feature_flag);
+ // in scope. Clients must ensure that |features| remains alive (non-dangling)
+ // while the returned value is in scope.
+ using ScopedFeatureFlagsOverride =
+- base::AutoReset<const std::vector<const base::Feature>*>;
++ base::AutoReset<const std::vector<base::Feature>*>;
+ ScopedFeatureFlagsOverride CreateScopedFeatureFlagsOverrideForTesting(
+- const std::vector<const base::Feature>* features);
++ const std::vector<base::Feature>* features);
+
+ } // namespace extensions
+
diff --git a/www-client/chromium/files/chromium-fix-char_traits.patch b/www-client/chromium/files/chromium-fix-char_traits.patch
new file mode 100644
index 0000000..4cb9503
--- /dev/null
+++ b/www-client/chromium/files/chromium-fix-char_traits.patch
@@ -0,0 +1,14 @@
+--- a/base/strings/char_traits.h
++++ b/base/strings/char_traits.h
+@@ -67,9 +67,9 @@
+ return __builtin_memcmp(s1, s2, n);
+ #else
+ for (; n; --n, ++s1, ++s2) {
+- if (*s1 < *s2)
++ if ((unsigned char)*s1 < (unsigned char)*s2)
+ return -1;
+- if (*s1 > *s2)
++ if ((unsigned char)*s1 > (unsigned char)*s2)
+ return 1;
+ }
+ return 0;
diff --git a/www-client/chromium/files/chromium-gamepad-include-84.patch b/www-client/chromium/files/chromium-gamepad-include-84.patch
new file mode 100644
index 0000000..36eb40c
--- /dev/null
+++ b/www-client/chromium/files/chromium-gamepad-include-84.patch
@@ -0,0 +1,12 @@
+diff --git a/device/gamepad/public/cpp/gamepad.h b/device/gamepad/public/cpp/gamepad.h
+index 67e793a23..c2ead1bd3 100644
+--- a/device/gamepad/public/cpp/gamepad.h
++++ b/device/gamepad/public/cpp/gamepad.h
+@@ -7,6 +7,7 @@
+
+ #include <stddef.h>
+ #include <cstdint>
++#include <limits>
+
+ #include "base/component_export.h"
+ #include "base/strings/string16.h"
diff --git a/www-client/chromium/files/chromium-gcc-89311.patch b/www-client/chromium/files/chromium-gcc-89311.patch
new file mode 100644
index 0000000..40a0e73
--- /dev/null
+++ b/www-client/chromium/files/chromium-gcc-89311.patch
@@ -0,0 +1,88 @@
+diff --git a/chrome/browser/ui/views/extensions/extension_popup.cc b/chrome/browser/ui/views/extensions/extension_popup.cc
+index 3f0985d..57d16ab 100644
+--- a/chrome/browser/ui/views/extensions/extension_popup.cc
++++ b/chrome/browser/ui/views/extensions/extension_popup.cc
+@@ -8,7 +8,6 @@
+ #include "chrome/browser/devtools/devtools_window.h"
+ #include "chrome/browser/extensions/extension_view_host.h"
+ #include "chrome/browser/ui/browser.h"
+-#include "chrome/browser/ui/tabs/tab_strip_model.h"
+ #include "content/public/browser/devtools_agent_host.h"
+ #include "content/public/browser/notification_details.h"
+ #include "content/public/browser/notification_source.h"
+diff --git a/chrome/browser/ui/views/extensions/extension_popup.h b/chrome/browser/ui/views/extensions/extension_popup.h
+index 3661b5b..9018efa 100644
+--- a/chrome/browser/ui/views/extensions/extension_popup.h
++++ b/chrome/browser/ui/views/extensions/extension_popup.h
+@@ -9,6 +9,7 @@
+ #include "base/compiler_specific.h"
+ #include "base/macros.h"
+ #include "base/scoped_observer.h"
++#include "chrome/browser/ui/tabs/tab_strip_model.h"
+ #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
+ #include "chrome/browser/ui/views/extensions/extension_view_views.h"
+ #include "content/public/browser/devtools_agent_host_observer.h"
+diff --git a/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc b/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc
+index 7419243..441929a 100644
+--- a/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc
++++ b/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.cc
+@@ -9,7 +9,6 @@
+ #include "base/single_thread_task_runner.h"
+ #include "base/threading/thread_task_runner_handle.h"
+ #include "base/time/time.h"
+-#include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
+ #include "chrome/browser/ui/views/frame/app_menu_button.h"
+ #include "chrome/browser/ui/views/frame/browser_view.h"
+ #include "chrome/browser/ui/views/toolbar/app_menu.h"
+diff --git a/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h b/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h
+index 2a3ea8e..ac44a4f 100644
+--- a/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h
++++ b/chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h
+@@ -8,6 +8,7 @@
+ #include "base/macros.h"
+ #include "base/memory/weak_ptr.h"
+ #include "base/scoped_observer.h"
++#include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
+ #include "chrome/browser/ui/toolbar/toolbar_actions_bar_observer.h"
+ #include "chrome/browser/ui/views/frame/app_menu_button_observer.h"
+ #include "ui/views/controls/scroll_view.h"
+@@ -16,7 +17,6 @@
+ class AppMenuButton;
+ class Browser;
+ class BrowserActionsContainer;
+-class ToolbarActionsBar;
+
+ namespace views {
+ class MenuItemView;
+diff --git a/chrome/browser/web_applications/extensions/bookmark_app_tab_helper.cc b/chrome/browser/web_applications/extensions/bookmark_app_tab_helper.cc
+index 342723e..acdc4b7 100644
+--- a/chrome/browser/web_applications/extensions/bookmark_app_tab_helper.cc
++++ b/chrome/browser/web_applications/extensions/bookmark_app_tab_helper.cc
+@@ -10,7 +10,6 @@
+ #include "chrome/common/chrome_features.h"
+ #include "chrome/common/extensions/api/url_handlers/url_handlers_parser.h"
+ #include "content/public/browser/web_contents.h"
+-#include "extensions/browser/extension_registry.h"
+ #include "extensions/common/extension.h"
+ #include "url/gurl.h"
+
+diff --git a/chrome/browser/web_applications/extensions/bookmark_app_tab_helper.h b/chrome/browser/web_applications/extensions/bookmark_app_tab_helper.h
+index 895e204..11dfdef 100644
+--- a/chrome/browser/web_applications/extensions/bookmark_app_tab_helper.h
++++ b/chrome/browser/web_applications/extensions/bookmark_app_tab_helper.h
+@@ -8,6 +8,7 @@
+ #include "base/macros.h"
+ #include "base/scoped_observer.h"
+ #include "chrome/browser/web_applications/components/web_app_tab_helper_base.h"
++#include "extensions/browser/extension_registry.h"
+ #include "extensions/browser/extension_registry_observer.h"
+
+ namespace content {
+@@ -17,7 +18,6 @@
+ namespace extensions {
+
+ class Extension;
+-class ExtensionRegistry;
+
+ // Allows to associate a tab with bookmark app.
+ class BookmarkAppTabHelper : public web_app::WebAppTabHelperBase,
diff --git a/www-client/chromium/files/chromium-gcc-initlist.patch b/www-client/chromium/files/chromium-gcc-initlist.patch
new file mode 100644
index 0000000..8658264
--- /dev/null
+++ b/www-client/chromium/files/chromium-gcc-initlist.patch
@@ -0,0 +1,16 @@
+diff --git a/net/third_party/quic/platform/impl/quic_flags_impl.cc b/net/third_party/quic/platform/impl/quic_flags_impl.cc
+index 5e6962d1e..2456c80dd 100644
+--- a/net/third_party/quic/platform/impl/quic_flags_impl.cc
++++ b/net/third_party/quic/platform/impl/quic_flags_impl.cc
+@@ -153,9 +153,9 @@ std::string QuicFlagRegistry::GetHelp() const {
+ template <>
+ bool TypedQuicFlagHelper<bool>::SetFlag(const std::string& s) const {
+ static const base::NoDestructor<std::set<std::string>> kTrueValues(
+- {"", "1", "t", "true", "y", "yes"});
++ std::initializer_list<std::string>({"", "1", "t", "true", "y", "yes"}));
+ static const base::NoDestructor<std::set<std::string>> kFalseValues(
+- {"0", "f", "false", "n", "no"});
++ std::initializer_list<std::string>({"0", "f", "false", "n", "no"}));
+ if (kTrueValues->find(base::ToLowerASCII(s)) != kTrueValues->end()) {
+ *flag_ = true;
+ return true;
diff --git a/www-client/chromium/files/chromium-gpu-vp9-include-84.patch b/www-client/chromium/files/chromium-gpu-vp9-include-84.patch
new file mode 100644
index 0000000..ca95b4a
--- /dev/null
+++ b/www-client/chromium/files/chromium-gpu-vp9-include-84.patch
@@ -0,0 +1,13 @@
+diff --git a/media/gpu/vp9_reference_frame_vector.cc b/media/gpu/vp9_reference_frame_vector.cc
+index dc279980e..d560c7295 100644
+--- a/media/gpu/vp9_reference_frame_vector.cc
++++ b/media/gpu/vp9_reference_frame_vector.cc
+@@ -6,6 +6,8 @@
+
+ #include "media/gpu/vp9_picture.h"
+
++#include <bitset>
++
+ namespace media {
+
+ Vp9ReferenceFrameVector::Vp9ReferenceFrameVector() {
diff --git a/www-client/chromium/files/chromium-harfbuzz-r0.patch b/www-client/chromium/files/chromium-harfbuzz-r0.patch
new file mode 100644
index 0000000..2d5602d
--- /dev/null
+++ b/www-client/chromium/files/chromium-harfbuzz-r0.patch
@@ -0,0 +1,80 @@
+From 7ae38170a117e909bb28e1470842b68de3501197 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppymaster@gmail.com>
+Date: Sun, 21 Oct 2018 10:06:53 -0400
+Subject: [PATCH] blink: add 'const' modifier for harfbuzz hb_codepoint_t
+ pointers
+
+This resolves a build failure against harfbuzz 2.0.
+
+Based on a patch by Alexandre Fierreira.
+
+Bug: https://bugs.gentoo.org/669034
+---
+ .../renderer/platform/fonts/shaping/harfbuzz_face.cc | 2 +-
+ .../renderer/platform/fonts/skia/skia_text_metrics.cc | 9 +++++++--
+ .../renderer/platform/fonts/skia/skia_text_metrics.h | 2 +-
+ 3 files changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc
+index 8e7d91ca371f..e279a5876cb3 100644
+--- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc
++++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc
+@@ -139,7 +139,7 @@ static hb_position_t HarfBuzzGetGlyphHorizontalAdvance(hb_font_t* hb_font,
+ static void HarfBuzzGetGlyphHorizontalAdvances(hb_font_t* font,
+ void* font_data,
+ unsigned count,
+- hb_codepoint_t* first_glyph,
++ const hb_codepoint_t* first_glyph,
+ unsigned int glyph_stride,
+ hb_position_t* first_advance,
+ unsigned int advance_stride,
+diff --git a/third_party/blink/renderer/platform/fonts/skia/skia_text_metrics.cc b/third_party/blink/renderer/platform/fonts/skia/skia_text_metrics.cc
+index 77ec6209fab9..9f9070921448 100644
+--- a/third_party/blink/renderer/platform/fonts/skia/skia_text_metrics.cc
++++ b/third_party/blink/renderer/platform/fonts/skia/skia_text_metrics.cc
+@@ -18,6 +18,11 @@ T* advance_by_byte_size(T* p, unsigned byte_size) {
+ return reinterpret_cast<T*>(reinterpret_cast<uint8_t*>(p) + byte_size);
+ }
+
++template <class T>
++T* advance_by_byte_size_const(T* p, unsigned byte_size) {
++ return reinterpret_cast<T*>(reinterpret_cast<const uint8_t*>(p) + byte_size);
++}
++
+ } // namespace
+
+ SkiaTextMetrics::SkiaTextMetrics(const SkPaint* paint) : paint_(paint) {
+@@ -39,7 +44,7 @@ void SkiaTextMetrics::GetGlyphWidthForHarfBuzz(hb_codepoint_t codepoint,
+ }
+
+ void SkiaTextMetrics::GetGlyphWidthForHarfBuzz(unsigned count,
+- hb_codepoint_t* glyphs,
++ const hb_codepoint_t* glyphs,
+ unsigned glyph_stride,
+ hb_position_t* advances,
+ unsigned advance_stride) {
+@@ -48,7 +53,7 @@ void SkiaTextMetrics::GetGlyphWidthForHarfBuzz(unsigned count,
+ // array that copy them to a regular array.
+ Vector<Glyph, 256> glyph_array(count);
+ for (unsigned i = 0; i < count;
+- i++, glyphs = advance_by_byte_size(glyphs, glyph_stride)) {
++ i++, glyphs = advance_by_byte_size_const(glyphs, glyph_stride)) {
+ glyph_array[i] = *glyphs;
+ }
+ Vector<SkScalar, 256> sk_width_array(count);
+diff --git a/third_party/blink/renderer/platform/fonts/skia/skia_text_metrics.h b/third_party/blink/renderer/platform/fonts/skia/skia_text_metrics.h
+index 787d8af0375a..3bc4407c641b 100644
+--- a/third_party/blink/renderer/platform/fonts/skia/skia_text_metrics.h
++++ b/third_party/blink/renderer/platform/fonts/skia/skia_text_metrics.h
+@@ -19,7 +19,7 @@ class SkiaTextMetrics final {
+
+ void GetGlyphWidthForHarfBuzz(hb_codepoint_t, hb_position_t* width);
+ void GetGlyphWidthForHarfBuzz(unsigned count,
+- hb_codepoint_t* first_glyph,
++ const hb_codepoint_t* first_glyph,
+ unsigned glyph_stride,
+ hb_position_t* first_advance,
+ unsigned advance_stride);
+--
+2.19.1
+
diff --git a/www-client/chromium/files/chromium-hashtable-iterator-cat-83.patch b/www-client/chromium/files/chromium-hashtable-iterator-cat-83.patch
new file mode 100644
index 0000000..777934c
--- /dev/null
+++ b/www-client/chromium/files/chromium-hashtable-iterator-cat-83.patch
@@ -0,0 +1,65 @@
+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 bbf10ef31..e5b627780 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
+@@ -268,12 +268,14 @@ class CORE_EXPORT SerializedScriptValue
+ MessagePortChannelArray& GetStreamChannels() { return stream_channels_; }
+
+ 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();
+- });
++ bool ret = !wasm_modules_.IsEmpty() ||
++ !shared_array_buffers_contents_.IsEmpty();
++ if (ret) return true;
++ for (const auto& entry : attachments_) {
++ if (entry.value->IsLockedToAgentCluster())
++ return true;
++ };
++ return false;
+ }
+
+ // Returns true after serializing script values that remote origins cannot
+diff --git a/third_party/blink/renderer/platform/wtf/hash_table.h b/third_party/blink/renderer/platform/wtf/hash_table.h
+index 1d195f121..1e65c08d8 100644
+--- a/third_party/blink/renderer/platform/wtf/hash_table.h
++++ b/third_party/blink/renderer/platform/wtf/hash_table.h
+@@ -272,7 +272,11 @@ class HashTableConstIterator final {
+ Allocator>
+ const_iterator;
+ typedef Value ValueType;
++ using iterator_category = std::bidirectional_iterator_tag;
+ using value_type = ValueType;
++ using reference = value_type&;
++ using pointer = value_type*;
++ using difference_type = ptrdiff_t;
+ typedef typename Traits::IteratorConstGetType GetType;
+ typedef const ValueType* PointerType;
+
+@@ -540,6 +544,11 @@ class HashTableIterator final {
+ std::ostream& PrintTo(std::ostream& stream) const {
+ return iterator_.PrintTo(stream);
+ }
++ using iterator_category = std::bidirectional_iterator_tag;
++ using value_type = ValueType;
++ using reference = value_type&;
++ using pointer = value_type*;
++ using difference_type = ptrdiff_t;
+
+ private:
+ const_iterator iterator_;
+@@ -2230,6 +2239,11 @@ struct HashTableConstIteratorAdapter {
+ }
+ // postfix -- intentionally omitted
+ typename HashTableType::const_iterator impl_;
++ using iterator_category = std::bidirectional_iterator_tag;
++ using value_type = GetType*;
++ using reference = value_type&;
++ using pointer = value_type*;
++ using difference_type = ptrdiff_t;
+ };
+
+ template <typename HashTable, typename Traits>
diff --git a/www-client/chromium/files/chromium-include-limits-83.patch b/www-client/chromium/files/chromium-include-limits-83.patch
new file mode 100644
index 0000000..840a212
--- /dev/null
+++ b/www-client/chromium/files/chromium-include-limits-83.patch
@@ -0,0 +1,13 @@
+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
+index 6ab117bc4..43aa602f2 100644
+--- 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
+@@ -2,6 +2,8 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
++#include <limits>
++
+ #include "chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h"
+ #include "base/logging.h"
+
diff --git a/www-client/chromium/files/chromium-include-limits-84.patch b/www-client/chromium/files/chromium-include-limits-84.patch
new file mode 100644
index 0000000..d73b36d
--- /dev/null
+++ b/www-client/chromium/files/chromium-include-limits-84.patch
@@ -0,0 +1,12 @@
+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
+index 4881c010b..4d5d7a4fb 100644
+--- 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
+@@ -4,6 +4,7 @@
+
+ #include "chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h"
+
++#include <limits>
+ #include <math.h>
+
+ #include "base/logging.h"
diff --git a/www-client/chromium/files/chromium-inline-node-ptr-84.patch b/www-client/chromium/files/chromium-inline-node-ptr-84.patch
new file mode 100644
index 0000000..58ded53
--- /dev/null
+++ b/www-client/chromium/files/chromium-inline-node-ptr-84.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
+index 55ca9e3f7..ee691dfaf 100644
+--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
++++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
+@@ -891,7 +891,7 @@ void NGInlineNode::SegmentText(NGInlineNodeData* data) {
+
+ // Segment NGInlineItem by script, Emoji, and orientation using RunSegmenter.
+ void NGInlineNode::SegmentScriptRuns(NGInlineNodeData* data) {
+- DCHECK_EQ(data->segments, nullptr);
++ DCHECK_EQ(data->segments.get(), nullptr);
+
+ String& text_content = data->text_content;
+ if (text_content.IsEmpty()) {
diff --git a/www-client/chromium/files/chromium-launcher-r3.sh b/www-client/chromium/files/chromium-launcher-r3.sh
new file mode 100644
index 0000000..a4fc1a9
--- /dev/null
+++ b/www-client/chromium/files/chromium-launcher-r3.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# Allow the user to override command-line flags, bug #357629.
+# This is based on Debian's chromium-browser package, and is intended
+# to be consistent with Debian.
+for f in /etc/chromium/*; do
+ [[ -f ${f} ]] && source "${f}"
+done
+
+# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system
+# default CHROMIUM_FLAGS (from /etc/chromium/default).
+CHROMIUM_FLAGS=${CHROMIUM_USER_FLAGS:-"$CHROMIUM_FLAGS"}
+
+# Let the wrapped binary know that it has been run through the wrapper
+export CHROME_WRAPPER=$(readlink -f "$0")
+
+PROGDIR=${CHROME_WRAPPER%/*}
+
+case ":$PATH:" in
+ *:$PROGDIR:*)
+ # $PATH already contains $PROGDIR
+ ;;
+ *)
+ # Append $PROGDIR to $PATH
+ export PATH="$PATH:$PROGDIR"
+ ;;
+esac
+
+if [[ ${EUID} == 0 && -O ${XDG_CONFIG_HOME:-${HOME}} ]]; then
+ # Running as root with HOME owned by root.
+ # Pass --user-data-dir to work around upstream failsafe.
+ CHROMIUM_FLAGS="--user-data-dir=${XDG_CONFIG_HOME:-${HOME}/.config}/chromium
+ ${CHROMIUM_FLAGS}"
+fi
+
+# Set the .desktop file name
+export CHROME_DESKTOP="chromium-browser-chromium.desktop"
+
+exec -a "chromium-browser" "$PROGDIR/chrome" --extra-plugin-dir=/usr/lib/nsbrowser/plugins ${CHROMIUM_FLAGS} "$@"
diff --git a/www-client/chromium/files/chromium-launcher-r6.sh b/www-client/chromium/files/chromium-launcher-r6.sh
new file mode 100644
index 0000000..637cfd6
--- /dev/null
+++ b/www-client/chromium/files/chromium-launcher-r6.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# Allow the user to override command-line flags, bug #357629.
+# This is based on Debian's chromium-browser package, and is intended
+# to be consistent with Debian.
+for f in /etc/chromium/*; do
+ [[ -f ${f} ]] && source "${f}"
+done
+
+# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system
+# default CHROMIUM_FLAGS (from /etc/chromium/default).
+CHROMIUM_FLAGS=${CHROMIUM_USER_FLAGS:-"$CHROMIUM_FLAGS"}
+
+# Let the wrapped binary know that it has been run through the wrapper
+export CHROME_WRAPPER=$(readlink -f "$0")
+
+PROGDIR=${CHROME_WRAPPER%/*}
+
+case ":$PATH:" in
+ *:$PROGDIR:*)
+ # $PATH already contains $PROGDIR
+ ;;
+ *)
+ # Append $PROGDIR to $PATH
+ export PATH="$PATH:$PROGDIR"
+ ;;
+esac
+
+if [[ ${EUID} == 0 && -O ${XDG_CONFIG_HOME:-${HOME}} ]]; then
+ # Running as root with HOME owned by root.
+ # Pass --user-data-dir to work around upstream failsafe.
+ CHROMIUM_FLAGS="--user-data-dir=${XDG_CONFIG_HOME:-${HOME}/.config}/chromium
+ ${CHROMIUM_FLAGS}"
+fi
+
+# Select session type and platform
+if @@FORCE_OZONE_PLATFORM@@; then
+ CHROMIUM_FLAGS="--enable-features=UseOzonePlatform ${CHROMIUM_FLAGS}"
+elif @@OZONE_AUTO_SESSION@@ && ! ${DISABLE_OZONE_PLATFORM:-false}; then
+ if [[ ${XDG_SESSION_TYPE} == wayland || -n ${WAYLAND_DISPLAY} && ${XDG_SESSION_TYPE} != x11 ]]; then
+ CHROMIUM_FLAGS="--enable-features=UseOzonePlatform ${CHROMIUM_FLAGS}"
+ fi
+fi
+
+# Set the .desktop file name
+export CHROME_DESKTOP="chromium-browser-chromium.desktop"
+
+exec -a "chromium-browser" "$PROGDIR/chrome" --extra-plugin-dir=/usr/lib/nsbrowser/plugins ${CHROMIUM_FLAGS} "$@"
diff --git a/www-client/chromium/files/chromium-launcher-r7.sh b/www-client/chromium/files/chromium-launcher-r7.sh
new file mode 100644
index 0000000..1163ff3
--- /dev/null
+++ b/www-client/chromium/files/chromium-launcher-r7.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# Allow the user to override command-line flags, bug #357629.
+# This is based on Debian's chromium-browser package, and is intended
+# to be consistent with Debian.
+for f in /etc/chromium/*; do
+ [[ -f ${f} ]] && source "${f}"
+done
+
+# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system
+# default CHROMIUM_FLAGS (from /etc/chromium/default).
+CHROMIUM_FLAGS=${CHROMIUM_USER_FLAGS:-"$CHROMIUM_FLAGS"}
+
+# Let the wrapped binary know that it has been run through the wrapper
+export CHROME_WRAPPER=$(readlink -f "$0")
+
+PROGDIR=${CHROME_WRAPPER%/*}
+
+case ":$PATH:" in
+ *:$PROGDIR:*)
+ # $PATH already contains $PROGDIR
+ ;;
+ *)
+ # Append $PROGDIR to $PATH
+ export PATH="$PATH:$PROGDIR"
+ ;;
+esac
+
+if [[ ${EUID} == 0 && -O ${XDG_CONFIG_HOME:-${HOME}} ]]; then
+ # Running as root with HOME owned by root.
+ # Pass --user-data-dir to work around upstream failsafe.
+ CHROMIUM_FLAGS="--user-data-dir=${XDG_CONFIG_HOME:-${HOME}/.config}/chromium
+ ${CHROMIUM_FLAGS}"
+fi
+
+# Select session type and platform
+if @@OZONE_AUTO_SESSION@@; then
+ platform=
+ if [[ ${XDG_SESSION_TYPE} == x11 ]]; then
+ platform=x11
+ elif [[ ${XDG_SESSION_TYPE} == wayland ]]; then
+ platform=wayland
+ else
+ if [[ -n ${WAYLAND_DISPLAY} ]]; then
+ platform=wayland
+ else
+ platform=x11
+ fi
+ fi
+ if ${DISABLE_OZONE_PLATFORM:-false}; then
+ platform=x11
+ fi
+ CHROMIUM_FLAGS="--ozone-platform=${platform} ${CHROMIUM_FLAGS}"
+fi
+
+# Set the .desktop file name
+export CHROME_DESKTOP="chromium-browser-chromium.desktop"
+
+exec -a "chromium-browser" "$PROGDIR/chrome" --extra-plugin-dir=/usr/lib/nsbrowser/plugins ${CHROMIUM_FLAGS} "$@"
diff --git a/www-client/chromium/files/chromium-layer_tree_impl-stlcompat.patch b/www-client/chromium/files/chromium-layer_tree_impl-stlcompat.patch
new file mode 100644
index 0000000..8fd9ff1
--- /dev/null
+++ b/www-client/chromium/files/chromium-layer_tree_impl-stlcompat.patch
@@ -0,0 +1,13 @@
+diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h
+index f74d18f65..7cdc29e44 100644
+--- a/cc/trees/layer_tree_impl.h
++++ b/cc/trees/layer_tree_impl.h
+@@ -194,7 +194,7 @@ class CC_EXPORT LayerTreeImpl {
+ // Adapts an iterator of std::unique_ptr<LayerImpl> to an iterator of
+ // LayerImpl*.
+ template <typename Iterator>
+- class IteratorAdapter {
++ class IteratorAdapter : public std::iterator<std::forward_iterator_tag, LayerImpl*> {
+ public:
+ explicit IteratorAdapter(Iterator it) : it_(it) {}
+ bool operator==(IteratorAdapter o) const { return it_ == o.it_; }
diff --git a/www-client/chromium/files/chromium-link.patch b/www-client/chromium/files/chromium-link.patch
new file mode 100644
index 0000000..d39bba0
--- /dev/null
+++ b/www-client/chromium/files/chromium-link.patch
@@ -0,0 +1,17 @@
+diff --git a/device/bluetooth/bluetooth_device.cc b/device/bluetooth/bluetooth_device.cc
+index dc280146a..cdc2944f4 100644
+--- a/device/bluetooth/bluetooth_device.cc
++++ b/device/bluetooth/bluetooth_device.cc
+@@ -513,9 +513,9 @@ void BluetoothDevice::RemoveGattConnection(
+ }
+
+ void BluetoothDevice::SetAsExpiredForTesting() {
+- last_update_time_ =
+- base::Time::NowFromSystemTime() -
+- (BluetoothAdapter::timeoutSec + base::TimeDelta::FromSeconds(1));
++ //last_update_time_ =
++ // base::Time::NowFromSystemTime() -
++ // (BluetoothAdapter::timeoutSec + base::TimeDelta::FromSeconds(1));
+ }
+
+ void BluetoothDevice::Pair(PairingDelegate* pairing_delegate,
diff --git a/www-client/chromium/files/chromium-math.h-r0.patch b/www-client/chromium/files/chromium-math.h-r0.patch
new file mode 100644
index 0000000..6c7c747
--- /dev/null
+++ b/www-client/chromium/files/chromium-math.h-r0.patch
@@ -0,0 +1,29 @@
+From 9f63f94a11abc34d40ede8b8712fa15b5844a8c0 Mon Sep 17 00:00:00 2001
+From: Tom Anderson <thomasanderson@chromium.org>
+Date: Sat, 27 Jan 2018 20:03:37 +0000
+Subject: [PATCH] Fix build with glibc 2.27
+
+BUG=806340
+TBR=hamelphi@chromium.org
+
+Change-Id: Ib4e5091212d874d9ad88f3e9a1fdfee3ed7e0d5e
+Reviewed-on: https://chromium-review.googlesource.com/890059
+Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
+Reviewed-by: Philippe Hamel <hamelphi@chromium.org>
+Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#532249}
+---
+
+diff --git a/components/assist_ranker/ranker_example_util.cc b/components/assist_ranker/ranker_example_util.cc
+index 54d4dbd..ceedd8f 100644
+--- a/components/assist_ranker/ranker_example_util.cc
++++ b/components/assist_ranker/ranker_example_util.cc
+@@ -2,6 +2,8 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
++#include <math.h>
++
+ #include "components/assist_ranker/ranker_example_util.h"
+ #include "base/bit_cast.h"
+ #include "base/format_macros.h"
diff --git a/www-client/chromium/files/chromium-media-alloc-84.patch b/www-client/chromium/files/chromium-media-alloc-84.patch
new file mode 100644
index 0000000..cc9ca5d
--- /dev/null
+++ b/www-client/chromium/files/chromium-media-alloc-84.patch
@@ -0,0 +1,22 @@
+diff --git a/media/base/media.cc b/media/base/media.cc
+index c282ee49a..3feece8a2 100644
+--- a/media/base/media.cc
++++ b/media/base/media.cc
+@@ -2,6 +2,8 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
++#include <limits>
++
+ #include "media/base/media.h"
+
+ #include "base/allocator/buildflags.h"
+@@ -41,7 +43,7 @@ class MediaInitializer {
+
+ #if BUILDFLAG(USE_ALLOCATOR_SHIM)
+ // Remove allocation limit from ffmpeg, so calls go down to shim layer.
+- av_max_alloc(0);
++ av_max_alloc(std::numeric_limits<size_t>::max());
+ #endif // BUILDFLAG(USE_ALLOCATOR_SHIM)
+
+ #endif // BUILDFLAG(ENABLE_FFMPEG)
diff --git a/www-client/chromium/files/chromium-memcpy-r0.patch b/www-client/chromium/files/chromium-memcpy-r0.patch
new file mode 100644
index 0000000..dd2fd57
--- /dev/null
+++ b/www-client/chromium/files/chromium-memcpy-r0.patch
@@ -0,0 +1,35 @@
+From 4942f56ceb6d60d6f54ebca8e6eba8ba01c278e8 Mon Sep 17 00:00:00 2001
+From: Tomas Popela <tomas.popela@gmail.com>
+Date: Thu, 7 Dec 2017 22:33:34 +0000
+Subject: [PATCH] memcpy used without including string.h
+
+Compiling Chromium with Clang 4.0.1 and using libstdc++ will fail on using
+memcpy without including string.h.
+
+Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel
+Change-Id: Idced1d5de3baf6b520d4a2d61774120642ead1a8
+Reviewed-on: https://chromium-review.googlesource.com/813737
+Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
+Reviewed-by: vmpstr <vmpstr@chromium.org>
+Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#522579}
+---
+ cc/paint/raw_memory_transfer_cache_entry.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/cc/paint/raw_memory_transfer_cache_entry.cc b/cc/paint/raw_memory_transfer_cache_entry.cc
+index 9e4660c685ee..95ad50b1a338 100644
+--- a/cc/paint/raw_memory_transfer_cache_entry.cc
++++ b/cc/paint/raw_memory_transfer_cache_entry.cc
+@@ -4,6 +4,8 @@
+
+ #include "cc/paint/raw_memory_transfer_cache_entry.h"
+
++#include <string.h>
++
+ namespace cc {
+
+ ClientRawMemoryTransferCacheEntry::ClientRawMemoryTransferCacheEntry(
+--
+2.15.1
+
diff --git a/www-client/chromium/files/chromium-mojo-ltm-83.patch b/www-client/chromium/files/chromium-mojo-ltm-83.patch
new file mode 100644
index 0000000..f7ab5ee
--- /dev/null
+++ b/www-client/chromium/files/chromium-mojo-ltm-83.patch
@@ -0,0 +1,84 @@
+From f47546873b1517d358815a26cebc6c4d51addbdb Mon Sep 17 00:00:00 2001
+From: Asa Karlsson <asaka@vewd.com>
+Date: Wed, 11 Mar 2020 10:51:08 +0100
+Subject: [PATCH] Fix lifetime management of URLLoaderClient::OnUpdateProgress callback.
+
+The mojo setup for network URLLoader is a 3-way connection:
+ URLLoader <-> CorsURLLoader <-> URLLoaderClientImpl.
+
+The network::mojom::URLLoaderClient interface has one function with a
+callback defined: URLLoaderClient::OnUpdateProgress. Depending on
+timing, this callback may be in progress while the mojo connection is
+torn down. If the callback (originating in URLLoader) is in transfer
+from CorsURLLoader to URLLoaderClientImpl at that time, the callback
+would be dropped (destroyed) due to Receiver (URLLoaderClientImpl)
+being destroyed. Since the callback was successfully handed over to
+CorsURLLoader first, this will lead to a mojo DCHECK for "<callback>
+was destroyed without first either being run or its corresponding
+binding being closed".
+
+By storing the callback in CorsURLLoader and calling it on mojo
+disconnect, running the callback is ensured also at untimely
+disconnects.
+
+Bug: 1060502
+Change-Id: Iaedeac975508b3c0e5b4819d4f0b1a061f9c5460
+---
+
+diff --git a/services/network/cors/cors_url_loader.cc b/services/network/cors/cors_url_loader.cc
+index c25dded..e51d916 100644
+--- a/services/network/cors/cors_url_loader.cc
++++ b/services/network/cors/cors_url_loader.cc
+@@ -383,8 +383,20 @@
+ OnUploadProgressCallback ack_callback) {
+ DCHECK(network_loader_);
+ DCHECK(forwarding_client_);
+- forwarding_client_->OnUploadProgress(current_position, total_size,
+- std::move(ack_callback));
++
++ // We need to store the original callback here to allow us to call
++ // it during mojo disconnect in the case the OnUploadProgress has
++ // not reached the forwarding_client_ yet. Otherwise, the
++ // un-triggered callback will generate a DCHECK when destroyed.
++ pending_upoad_callback_ = std::move(ack_callback);
++ forwarding_client_->OnUploadProgress(
++ current_position, total_size,
++ base::BindOnce(&CorsURLLoader::OnUploadProgressACK,
++ weak_factory_.GetWeakPtr()));
++}
++
++void CorsURLLoader::OnUploadProgressACK() {
++ std::move(pending_upoad_callback_).Run();
+ }
+
+ void CorsURLLoader::OnReceiveCachedMetadata(mojo_base::BigBuffer data) {
+@@ -538,6 +550,8 @@
+ }
+
+ void CorsURLLoader::OnMojoDisconnect() {
++ if (pending_upoad_callback_)
++ std::move(pending_upoad_callback_).Run();
+ HandleComplete(URLLoaderCompletionStatus(net::ERR_ABORTED));
+ }
+
+diff --git a/services/network/cors/cors_url_loader.h b/services/network/cors/cors_url_loader.h
+index 3f47a81..6611c6e 100644
+--- a/services/network/cors/cors_url_loader.h
++++ b/services/network/cors/cors_url_loader.h
+@@ -108,6 +108,8 @@
+ // Handles OnComplete() callback.
+ void HandleComplete(const URLLoaderCompletionStatus& status);
+
++ void OnUploadProgressACK();
++
+ void OnMojoDisconnect();
+
+ void SetCorsFlagIfNeeded();
+@@ -124,6 +126,7 @@
+ const std::string& header_name);
+
+ mojo::Receiver<mojom::URLLoader> receiver_;
++ OnUploadProgressCallback pending_upoad_callback_;
+
+ // We need to save these for redirect, and DevTools.
+ const int32_t process_id_;
diff --git a/www-client/chromium/files/chromium-nearby-inc-86.patch b/www-client/chromium/files/chromium-nearby-inc-86.patch
new file mode 100644
index 0000000..2fd2187
--- /dev/null
+++ b/www-client/chromium/files/chromium-nearby-inc-86.patch
@@ -0,0 +1,10 @@
+--- a/third_party/nearby/src/cpp/platform_v2/base/byte_array.h 2020-07-31 09:49:49.073719408 +0800
++++ b/third_party/nearby/src/cpp/platform_v2/base/byte_array.h 2020-07-31 09:50:00.025843476 +0800
+@@ -17,6 +17,7 @@
+
+ #include <array>
+ #include <cstdint>
++#include <cstring>
+ #include <string>
+ #include <type_traits>
+ #include <utility>
diff --git a/www-client/chromium/files/chromium-ngphyscontainer-iterator-cat-83.patch b/www-client/chromium/files/chromium-ngphyscontainer-iterator-cat-83.patch
new file mode 100644
index 0000000..1ab52d5
--- /dev/null
+++ b/www-client/chromium/files/chromium-ngphyscontainer-iterator-cat-83.patch
@@ -0,0 +1,17 @@
+diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h
+index b3c7624f4..6efe44a66 100644
+--- a/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h
++++ b/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h
+@@ -51,6 +51,12 @@ class CORE_EXPORT NGPhysicalContainerFragment : public NGPhysicalFragment {
+ return current_ != other.current_;
+ }
+
++ using iterator_category = std::forward_iterator_tag;
++ using value_type = NGLink*;
++ using reference = value_type&;
++ using pointer = value_type*;
++ using difference_type = ptrdiff_t;
++
+ private:
+ const NGLink* PostLayoutOrCurrent() const {
+ post_layout_.fragment = current_->fragment->PostLayout();
diff --git a/www-client/chromium/files/chromium-noexcept-2.patch b/www-client/chromium/files/chromium-noexcept-2.patch
new file mode 100644
index 0000000..16aa76b
--- /dev/null
+++ b/www-client/chromium/files/chromium-noexcept-2.patch
@@ -0,0 +1,26 @@
+diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
+index 5c72abe4f..5e30c24d2 100644
+--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
++++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
+@@ -803,7 +803,7 @@ CastActivityManager::DoLaunchSessionParams::DoLaunchSessionParams(
+ callback(std::move(callback)) {}
+
+ CastActivityManager::DoLaunchSessionParams::DoLaunchSessionParams(
+- DoLaunchSessionParams&& other) noexcept = default;
++ DoLaunchSessionParams&& other) = default;
+
+ CastActivityManager::DoLaunchSessionParams::~DoLaunchSessionParams() = default;
+
+diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.h b/chrome/browser/media/router/providers/cast/cast_activity_manager.h
+index 325bffc72..08fe0ccca 100644
+--- a/chrome/browser/media/router/providers/cast/cast_activity_manager.h
++++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.h
+@@ -295,7 +295,7 @@ class CastActivityManager : public cast_channel::CastMessageHandler::Observer,
+ const url::Origin& origin,
+ int tab_id,
+ mojom::MediaRouteProvider::CreateRouteCallback callback);
+- DoLaunchSessionParams(DoLaunchSessionParams&& other) noexcept;
++ DoLaunchSessionParams(DoLaunchSessionParams&& other);
+ ~DoLaunchSessionParams();
+ DoLaunchSessionParams& operator=(DoLaunchSessionParams&&) = delete;
+
diff --git a/www-client/chromium/files/chromium-noexcept-3.patch b/www-client/chromium/files/chromium-noexcept-3.patch
new file mode 100644
index 0000000..b5ca5a3
--- /dev/null
+++ b/www-client/chromium/files/chromium-noexcept-3.patch
@@ -0,0 +1,26 @@
+diff --git a/storage/browser/fileapi/file_system_url.cc b/storage/browser/fileapi/file_system_url.cc
+index b90cf2904..e28b1f85d 100644
+--- a/storage/browser/fileapi/file_system_url.cc
++++ b/storage/browser/fileapi/file_system_url.cc
+@@ -26,7 +26,7 @@ FileSystemURL::FileSystemURL()
+
+ FileSystemURL::FileSystemURL(const FileSystemURL& other) = default;
+
+-FileSystemURL::FileSystemURL(FileSystemURL&& other) noexcept = default;
++FileSystemURL::FileSystemURL(FileSystemURL&& other) = default;
+
+ FileSystemURL& FileSystemURL::operator=(FileSystemURL&& rhs) = default;
+
+diff --git a/storage/browser/fileapi/file_system_url.h b/storage/browser/fileapi/file_system_url.h
+index 8220812d0..f6b8813e2 100644
+--- a/storage/browser/fileapi/file_system_url.h
++++ b/storage/browser/fileapi/file_system_url.h
+@@ -82,7 +82,7 @@ class COMPONENT_EXPORT(STORAGE_BROWSER) FileSystemURL {
+ FileSystemURL(const FileSystemURL& other);
+ // Constructs FileSystemURL with the contents of |other|, which is left in
+ // valid but unspecified state.
+- FileSystemURL(FileSystemURL&& other) noexcept;
++ FileSystemURL(FileSystemURL&& other);
+ ~FileSystemURL();
+
+ // Replaces the contents with those of |rhs|, which is left in valid but
diff --git a/www-client/chromium/files/chromium-noexcept.patch b/www-client/chromium/files/chromium-noexcept.patch
new file mode 100644
index 0000000..70948a8
--- /dev/null
+++ b/www-client/chromium/files/chromium-noexcept.patch
@@ -0,0 +1,26 @@
+diff --git a/media/learning/common/labelled_example.cc b/media/learning/common/labelled_example.cc
+index 6c8cb7d34..370b6bb05 100644
+--- a/media/learning/common/labelled_example.cc
++++ b/media/learning/common/labelled_example.cc
+@@ -17,7 +17,7 @@ LabelledExample::LabelledExample(std::initializer_list<FeatureValue> init_list,
+
+ LabelledExample::LabelledExample(const LabelledExample& rhs) = default;
+
+-LabelledExample::LabelledExample(LabelledExample&& rhs) noexcept = default;
++LabelledExample::LabelledExample(LabelledExample&& rhs) = default;
+
+ LabelledExample::~LabelledExample() = default;
+
+diff --git a/media/learning/common/labelled_example.h b/media/learning/common/labelled_example.h
+index ee89586f5..b203a567c 100644
+--- a/media/learning/common/labelled_example.h
++++ b/media/learning/common/labelled_example.h
+@@ -31,7 +31,7 @@ struct COMPONENT_EXPORT(LEARNING_COMMON) LabelledExample {
+ LabelledExample(std::initializer_list<FeatureValue> init_list,
+ TargetValue target);
+ LabelledExample(const LabelledExample& rhs);
+- LabelledExample(LabelledExample&& rhs) noexcept;
++ LabelledExample(LabelledExample&& rhs);
+ ~LabelledExample();
+
+ // Comparisons ignore weight, because it's convenient.
diff --git a/www-client/chromium/files/chromium-ntp_backgrounds-include-84.patch b/www-client/chromium/files/chromium-ntp_backgrounds-include-84.patch
new file mode 100644
index 0000000..bd98ef0
--- /dev/null
+++ b/www-client/chromium/files/chromium-ntp_backgrounds-include-84.patch
@@ -0,0 +1,12 @@
+diff --git a/chrome/browser/search/background/ntp_backgrounds.h b/chrome/browser/search/background/ntp_backgrounds.h
+index 7afc0a230..6a6ad3b48 100644
+--- a/chrome/browser/search/background/ntp_backgrounds.h
++++ b/chrome/browser/search/background/ntp_backgrounds.h
+@@ -5,6 +5,7 @@
+ #ifndef CHROME_BROWSER_SEARCH_BACKGROUND_NTP_BACKGROUNDS_H_
+ #define CHROME_BROWSER_SEARCH_BACKGROUND_NTP_BACKGROUNDS_H_
+
++#include <cstddef>
+ #include <array>
+
+ class GURL;
diff --git a/www-client/chromium/files/chromium-opencv-include-84.patch b/www-client/chromium/files/chromium-opencv-include-84.patch
new file mode 100644
index 0000000..4c7b328
--- /dev/null
+++ b/www-client/chromium/files/chromium-opencv-include-84.patch
@@ -0,0 +1,12 @@
+diff --git a/third_party/opencv/src/emd.cpp b/third_party/opencv/src/emd.cpp
+index 30b19f676..834ebe9f4 100644
+--- a/third_party/opencv/src/emd.cpp
++++ b/third_party/opencv/src/emd.cpp
+@@ -59,6 +59,7 @@
+ #ifdef CHROMIUM_OPENCV
+ #include "emd_wrapper.h"
+
++#include <algorithm>
+ #include <vector>
+ #include <cassert>
+
diff --git a/www-client/chromium/files/chromium-pa13.patch b/www-client/chromium/files/chromium-pa13.patch
new file mode 100644
index 0000000..892a318
--- /dev/null
+++ b/www-client/chromium/files/chromium-pa13.patch
@@ -0,0 +1,82 @@
+From 7ac85fb4cc6f44a21761a591ac497ae3d6bf966d Mon Sep 17 00:00:00 2001
+From: Allan Sandfeld Jensen <allan.jensen@qt.io>
+Date: Mon, 23 Sep 2019 13:49:53 +0200
+Subject: [PATCH] Fix building with pulseaudio 13
+
+The function signature changed though the ABI stayed the same.
+
+(Modified to apply on chromium sources too)
+
+Change-Id: I86ca361b5e4f0c523e1031910df438c23beee876
+Fixes: QTBUG-77037
+Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
+---
+
+diff --git a/media/audio/pulse/pulse.sigs b/media/audio/pulse/pulse.sigs
+index 8b58887..daaeb14 100644
+--- a/media/audio/pulse/pulse.sigs
++++ b/media/audio/pulse/pulse.sigs
+@@ -24,11 +24,11 @@
+ pa_operation* pa_context_get_source_info_by_name(pa_context* c, const char* name, pa_source_info_cb_t cb, void *userdata);
+ pa_operation* pa_context_get_source_info_list(pa_context* c, pa_source_info_cb_t cb, void* userdata);
+ pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata);
+-pa_context_state_t pa_context_get_state(pa_context* c);
++pa_context_state_t pa_context_get_state(const_pa_context_ptr c);
+ pa_context* pa_context_new(pa_mainloop_api* mainloop, const char* name);
+ pa_operation* pa_context_set_source_volume_by_index(pa_context* c, uint32_t idx, const pa_cvolume* volume, pa_context_success_cb_t cb, void* userdata);
+ void pa_context_set_state_callback(pa_context* c, pa_context_notify_cb_t cb, void* userdata);
+-pa_operation_state_t pa_operation_get_state(pa_operation* o);
++pa_operation_state_t pa_operation_get_state(const_pa_operation_ptr o);
+ void pa_context_unref(pa_context* c);
+ void pa_operation_unref(pa_operation* o);
+ int pa_stream_begin_write(pa_stream* p, void** data, size_t* nbytes);
+@@ -38,23 +38,23 @@
+ int pa_stream_disconnect(pa_stream* s);
+ int pa_stream_drop(pa_stream *p);
+ pa_operation* pa_stream_flush(pa_stream* s, pa_stream_success_cb_t cb, void* userdata);
+-uint32_t pa_stream_get_device_index(pa_stream* s);
++uint32_t pa_stream_get_device_index(const_pa_stream_ptr s);
+ int pa_stream_get_latency(pa_stream* s, pa_usec_t* r_usec, int* negative);
+-pa_stream_state_t pa_stream_get_state(pa_stream* p);
++pa_stream_state_t pa_stream_get_state(const_pa_stream_ptr p);
+ pa_stream* pa_stream_new(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map * map);
+ pa_stream* pa_stream_new_with_proplist(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map* map, pa_proplist* p);
+ pa_proplist* pa_proplist_new(void);
+-int pa_proplist_contains(pa_proplist* p, const char* key);
++int pa_proplist_contains(const_pa_proplist_ptr p, const char* key);
+ void pa_proplist_free(pa_proplist* p);
+-const char* pa_proplist_gets(pa_proplist* p, const char* key);
++const char* pa_proplist_gets(const_pa_proplist_ptr p, const char* key);
+ int pa_proplist_sets(pa_proplist* p, const char* key, const char* value);
+-size_t pa_stream_readable_size(pa_stream *p);
++size_t pa_stream_readable_size(const_pa_stream_ptr p);
+ int pa_stream_peek(pa_stream* p, const void** data, size_t* nbytes);
+ void pa_stream_set_read_callback(pa_stream* p, pa_stream_request_cb_t cb, void* userdata);
+ void pa_stream_set_state_callback(pa_stream* s, pa_stream_notify_cb_t cb, void* userdata);
+ int pa_stream_write(pa_stream* p, const void* data, size_t nbytes, pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek);
+ void pa_stream_set_write_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata);
+ void pa_stream_unref(pa_stream* s);
+-int pa_context_errno(pa_context *c);
++int pa_context_errno(const_pa_context_ptr c);
+ const char* pa_strerror(int error);
+ pa_cvolume* pa_cvolume_set(pa_cvolume* a, unsigned channels, pa_volume_t v);
+diff --git a/chromium/media/audio/pulse/pulse_stub_header.fragment b/chromium/media/audio/pulse/pulse_stub_header.fragment
+index 2a2d3e7..cdaa841 100644
+--- a/media/audio/pulse/pulse_stub_header.fragment
++++ b/media/audio/pulse/pulse_stub_header.fragment
+@@ -5,4 +5,15 @@
+
+ #include <pulse/pulseaudio.h>
+
++#if PA_MAJOR > 12
++typedef const pa_context* const_pa_context_ptr;
++typedef const pa_operation* const_pa_operation_ptr;
++typedef const pa_proplist* const_pa_proplist_ptr;
++typedef const pa_stream* const_pa_stream_ptr;
++#else
++typedef pa_context* const_pa_context_ptr;
++typedef pa_operation* const_pa_operation_ptr;
++typedef pa_proplist* const_pa_proplist_ptr;
++typedef pa_stream* const_pa_stream_ptr;
++#endif
+ }
diff --git a/www-client/chromium/files/chromium-pdfium-stdlib-r0.patch b/www-client/chromium/files/chromium-pdfium-stdlib-r0.patch
new file mode 100644
index 0000000..1cfa4c5
--- /dev/null
+++ b/www-client/chromium/files/chromium-pdfium-stdlib-r0.patch
@@ -0,0 +1,30 @@
+From e3ad3deb6a6e79284f3748fa7410311d87df91c5 Mon Sep 17 00:00:00 2001
+From: Henrique Nakashima <hnakashima@chromium.org>
+Date: Tue, 4 Sep 2018 16:49:51 +0000
+Subject: [PATCH] IWYU: stdint.h in pdfium_mem_buffer_file_write.h for uint8_t
+
+Bug: 879900
+Change-Id: I9c15d1c280a23c53d31f2d72c9d0d1db79eab886
+Reviewed-on: https://chromium-review.googlesource.com/1204410
+Reviewed-by: Lei Zhang <thestig@chromium.org>
+Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#588547}
+---
+ pdf/pdfium/pdfium_mem_buffer_file_write.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/pdf/pdfium/pdfium_mem_buffer_file_write.h b/pdf/pdfium/pdfium_mem_buffer_file_write.h
+index 03c54bb63800..82e82d23684d 100644
+--- a/pdf/pdfium/pdfium_mem_buffer_file_write.h
++++ b/pdf/pdfium/pdfium_mem_buffer_file_write.h
+@@ -6,6 +6,7 @@
+ #define PDF_PDFIUM_PDFIUM_MEM_BUFFER_FILE_WRITE_H_
+
+ #include <stddef.h>
++#include <stdint.h>
+
+ #include <vector>
+
+--
+2.19.0
+
diff --git a/www-client/chromium/files/chromium-remove-no_check_targets-86.patch b/www-client/chromium/files/chromium-remove-no_check_targets-86.patch
new file mode 100644
index 0000000..7661b32
--- /dev/null
+++ b/www-client/chromium/files/chromium-remove-no_check_targets-86.patch
@@ -0,0 +1,621 @@
+diff --git a/.gn b/.gn
+index 3afb64ba2..b239e02c3 100644
+--- a/.gn
++++ b/.gn
+@@ -55,311 +55,311 @@ default_args = {
+ # matching these patterns (see "gn help label_pattern" for format) will not have
+ # their includes checked for proper dependencies when you run either
+ # "gn check" or "gn gen --check".
+-no_check_targets = [
+- # //chrome/*, https://crbug.com/949535
+- "//chrome/browser/devtools:*", # 114 errors
+- "//chrome/browser/media/router/discovery:*", # 26 errors
+- "//chrome/browser/media/router:*", # 225 errors
+- "//chrome/browser/paint_preview:*", # 4 errors
+- "//chrome/browser/profiling_host:*", # 13 errors
+- "//chrome/browser/resources/chromeos/zip_archiver/cpp:*", # 2 errors
+- "//chrome/browser/safe_browsing/android:*", # 3 errors
+- "//chrome/browser/safe_browsing:*", # 85 errors
+- "//chrome/browser/safety_check/android:*", # 3 errors
+- "//chrome/browser/storage_access_api:*", # 2 errors
+- "//chrome/browser/touch_to_fill/android:*", # 8 errors
+- "//chrome/browser/touch_to_fill:*", # 5 errors
+- "//chrome/browser/updates/announcement_notification:*", # 15 errors
+- "//chrome/browser/updates/internal:*", # 8 errors
+- "//chrome/browser/updates:*", # 21 errors
+- "//chrome/browser:*", # 780 errors
+- "//chrome/child:*", # 3 errors
+- "//chrome/credential_provider/gaiacp:*", # 1 error
+- "//chrome/gpu:*", # 2 errors
+- "//chrome/install_static:*", # 4 errors
+- "//chrome/notification_helper:*", # 4 errors
+- "//chrome/renderer:*", # 42 errors
+- "//chrome/services/cups_proxy/public/cpp:*", # 2 errors
+- "//chrome/services/cups_proxy:*", # 6 errors
+- "//chrome/services/file_util/public/cpp:*", # 13 errors
+- "//chrome/services/file_util:*", # 3 errors
+- "//chrome/services/ipp_parser:*", # 1 error
+- "//chrome/services/media_gallery_util/public/cpp:*", # 6 errors
+- "//chrome/services/media_gallery_util:*", # 3 errors
+- "//chrome/services/printing:*", # 3 errors
+- "//chrome/services/qrcode_generator:*", # 1 error
+- "//chrome/services/removable_storage_writer:*", # 1 error
+- "//chrome/services/sharing/public/cpp:*", # 2 errors
+- "//chrome/services/speech:*", # 5 errors
+- "//chrome/services/util_win:*", # 1 error
+- "//chrome/test/chromedriver:*", # 115 errors
+- "//chrome/test/data/nacl:*", # 350 errors
+- "//chrome/test/media_router:*", # 5 errors
+- "//chrome/test:*", # 2682 errors
+- "//chrome:*", # 7 errors
+-
+- "//clank/third_party/gvr_shim:*", # 1 error
+- "//extensions/browser/api/alarms:*", # 2 errors
+- "//extensions/browser/api/app_current_window_internal:*", # 3 errors
+- "//extensions/browser/api/app_runtime:*", # 3 errors
+- "//extensions/browser/api/app_window:*", # 5 errors
+- "//extensions/browser/api/audio:*", # 3 errors
+- "//extensions/browser/api/automation_internal:*", # 37 errors
+- "//extensions/browser/api/bluetooth_low_energy:*", # 22 errors
+- "//extensions/browser/api/bluetooth_socket:*", # 12 errors
+- "//extensions/browser/api/cast_channel:*", # 3 errors
+- "//extensions/browser/api/cec_private:*", # 4 errors
+- "//extensions/browser/api/clipboard:*", # 3 errors
+- "//extensions/browser/api/crash_report_private:*", # 1 error
+- "//extensions/browser/api/declarative:*", # 20 errors
+- "//extensions/browser/api/declarative_content:*", # 2 errors
+- "//extensions/browser/api/declarative_net_request/filter_list_converter:*", # 1
+- # error
+- "//extensions/browser/api/declarative_net_request:*", # 18 errors
+- "//extensions/browser/api/declarative_webrequest:*", # 29 errors
+- "//extensions/browser/api/diagnostics:*", # 2 errors
+- "//extensions/browser/api/display_source:*", # 7 errors
+- "//extensions/browser/api/dns:*", # 3 errors
+- "//extensions/browser/api/document_scan:*", # 2 errors
+- "//extensions/browser/api/feedback_private:*", # 2 errors
+- "//extensions/browser/api/file_handlers:*", # 3 errors
+- "//extensions/browser/api/file_system:*", # 1 error
+- "//extensions/browser/api/hid:*", # 12 errors
+- "//extensions/browser/api/idle:*", # 4 errors
+- "//extensions/browser/api/management:*", # 19 errors
+- "//extensions/browser/api/messaging:*", # 1 error
+- "//extensions/browser/api/metrics_private:*", # 3 errors
+- "//extensions/browser/api/mime_handler_private:*", # 1 error
+- "//extensions/browser/api/networking_config:*", # 7 errors
+- "//extensions/browser/api/networking_private:*", # 14 errors
+- "//extensions/browser/api/power:*", # 3 errors
+- "//extensions/browser/api/printer_provider:*", # 7 errors
+- "//extensions/browser/api/printer_provider_internal:*", # 3 errors
+- "//extensions/browser/api/runtime:*", # 6 errors
+- "//extensions/browser/api/serial:*", # 10 errors
+- "//extensions/browser/api/socket:*", # 11 errors
+- "//extensions/browser/api/sockets_tcp:*", # 6 errors
+- "//extensions/browser/api/sockets_tcp_server:*", # 8 errors
+- "//extensions/browser/api/sockets_udp:*", # 9 errors
+- "//extensions/browser/api/storage:*", # 9 errors
+- "//extensions/browser/api/system_cpu:*", # 1 error
+- "//extensions/browser/api/system_display:*", # 3 errors
+- "//extensions/browser/api/system_info:*", # 8 errors
+- "//extensions/browser/api/system_memory:*", # 1 error
+- "//extensions/browser/api/system_network:*", # 2 errors
+- "//extensions/browser/api/system_power_source:*", # 2 errors
+- "//extensions/browser/api/system_storage:*", # 6 errors
+- "//extensions/browser/api/test:*", # 1 error
+- "//extensions/browser/api/usb:*", # 12 errors
+- "//extensions/browser/api/virtual_keyboard:*", # 1 error
+- "//extensions/browser/api/virtual_keyboard_private:*", # 2 errors
+- "//extensions/browser/api/vpn_provider:*", # 13 errors
+- "//extensions/browser/api/web_request:*", # 37 errors
+- "//extensions/browser/api/webcam_private:*", # 8 errors
+- "//extensions/browser/api:*", # 7 errors
+- "//extensions/browser/updater:*", # 31 errors
+- "//extensions/browser/value_store:*", # 5 errors
+- "//extensions/browser:*", # 20 errors
+- "//extensions:*", # 75 errors
+- "//headless:*", # 167 errors
+- "//jingle:*", # 4 errors
+- "//native_client/src/trusted/service_runtime:*", # 2 errors
+- "//ppapi/cpp/private:*", # 1 error
+- "//ppapi/host:*", # 1 error
+- "//ppapi/native_client/src/untrusted/pnacl_irt_shim:*", # 197 errors
+- "//ppapi/proxy:*", # 31 errors
+- "//ppapi/shared_impl:*", # 3 errors
+- "//ppapi/thunk:*", # 1071 errors
+- "//ppapi:*", # 3 errors
+- "//remoting/base/grpc_support:*", # 14 errors
+- "//remoting/base/grpc_test_support:*", # 1 error
+- "//remoting/base:*", # 6 errors
+- "//remoting/client/audio:*", # 7 errors
+- "//remoting/client/display:*", # 55 errors
+- "//remoting/client/input:*", # 17 errors
+- "//remoting/client/jni:*", # 8 errors
+- "//remoting/client/notification:*", # 12 errors
+- "//remoting/client/ui:*", # 13 errors
+- "//remoting/client:*", # 20 errors
+- "//remoting/codec:*", # 32 errors
+- "//remoting/host/chromeos:*", # 10 errors
+- "//remoting/host/file_transfer:*", # 43 errors
+- "//remoting/host/input_monitor:*", # 3 errors
+- "//remoting/host/installer/mac:*", # 1 error
+- "//remoting/host/it2me:*", # 18 errors
+- "//remoting/host/linux:*", # 64 errors
+- "//remoting/host/mac:*", # 49 errors
+- "//remoting/host/native_messaging:*", # 3 errors
+- "//remoting/host/security_key:*", # 68 errors
+- "//remoting/host/setup:*", # 9 errors
+- "//remoting/host/win:*", # 43 errors
+- "//remoting/host:*", # 164 errors
+- "//remoting/ios/app/settings:*", # 6 errors
+- "//remoting/ios/app:*", # 9 errors
+- "//remoting/ios/audio:*", # 5 errors
+- "//remoting/ios/domain:*", # 2 errors
+- "//remoting/ios/facade:*", # 8 errors
+- "//remoting/ios/persistence:*", # 10 errors
+- "//remoting/ios/session:*", # 7 errors
+- "//remoting/ios:*", # 2 errors
+- "//remoting/protocol:*", # 142 errors
+- "//remoting/signaling:*", # 30 errors
+- "//remoting/test:*", # 20 errors
+- "//remoting:*", # 27 errors
+- "//sandbox/linux:*", # 13 errors
+- "//sandbox/mac:*", # 14 errors
+- "//sandbox/win:*", # 7 errors
+-
+- # //third_party/blink/*, https://crbug.com/800764
+- "//third_party/blink/common:*", # 9 errors
+- "//third_party/blink/renderer/bindings/core/v8:*", # 1 error
+- "//third_party/blink/renderer/controller:*", # 191 errors
+- "//third_party/blink/renderer/core/accessibility:*", # 27 errors
+- "//third_party/blink/renderer/core/animation:*", # 506 errors
+- "//third_party/blink/renderer/core/animation_frame:*", # 4 errors
+- "//third_party/blink/renderer/core/aom:*", # 23 errors
+- "//third_party/blink/renderer/core/clipboard:*", # 43 errors
+- "//third_party/blink/renderer/core/content_capture:*", # 12 errors
+- "//third_party/blink/renderer/core/context_features:*", # 3 errors
+- "//third_party/blink/renderer/core/css:*", # 835 errors
+- "//third_party/blink/renderer/core/display_lock:*", # 36 errors
+- "//third_party/blink/renderer/core/dom:*", # 706 errors
+- "//third_party/blink/renderer/core/editing:*", # 847 errors
+- "//third_party/blink/renderer/core/events:*", # 173 errors
+- "//third_party/blink/renderer/core/execution_context:*", # 48 errors
+- "//third_party/blink/renderer/core/exported:*", # 470 errors
+- "//third_party/blink/renderer/core/feature_policy:*", # 15 errors
+- "//third_party/blink/renderer/core/fetch:*", # 134 errors
+- "//third_party/blink/renderer/core/fileapi:*", # 55 errors
+- "//third_party/blink/renderer/core/frame:*", # 864 errors
+- "//third_party/blink/renderer/core/fullscreen:*", # 32 errors
+- "//third_party/blink/renderer/core/geometry:*", # 39 errors
+- "//third_party/blink/renderer/core/html/parser:*", # 133 errors
+- "//third_party/blink/renderer/core/html:*", # 1662 errors
+- "//third_party/blink/renderer/core/imagebitmap:*", # 34 errors
+- "//third_party/blink/renderer/core/input:*", # 240 errors
+- "//third_party/blink/renderer/core/inspector:*", # 594 errors
+- "//third_party/blink/renderer/core/intersection_observer:*", # 50 errors
+- "//third_party/blink/renderer/core/layout/svg:*", # 193 errors
+- "//third_party/blink/renderer/core/layout:*", # 920 errors
+- "//third_party/blink/renderer/core/loader:*", # 421 errors
+- "//third_party/blink/renderer/core/mathml:*", # 11 errors
+- "//third_party/blink/renderer/core/messaging:*", # 30 errors
+- "//third_party/blink/renderer/core/mojo:*", # 44 errors
+- "//third_party/blink/renderer/core/offscreencanvas:*", # 22 errors
+- "//third_party/blink/renderer/core/origin_trials:*", # 12 errors
+- "//third_party/blink/renderer/core/page:*", # 500 errors
+- "//third_party/blink/renderer/core/paint:*", # 788 errors
+- "//third_party/blink/renderer/core/probe:*", # 9 errors
+- "//third_party/blink/renderer/core/resize_observer:*", # 29 errors
+- "//third_party/blink/renderer/core/script:*", # 155 errors
+- "//third_party/blink/renderer/core/scroll:*", # 29 errors
+- "//third_party/blink/renderer/core/streams:*", # 75 errors
+- "//third_party/blink/renderer/core/style:*", # 86 errors
+- "//third_party/blink/renderer/core/svg:*", # 297 errors
+- "//third_party/blink/renderer/core/timezone:*", # 8 errors
+- "//third_party/blink/renderer/core/timing:*", # 170 errors
+- "//third_party/blink/renderer/core/trustedtypes:*", # 27 errors
+- "//third_party/blink/renderer/core/typed_arrays:*", # 24 errors
+- "//third_party/blink/renderer/core/url:*", # 7 errors
+- "//third_party/blink/renderer/core/workers:*", # 289 errors
+- "//third_party/blink/renderer/core/xml:*", # 119 errors
+- "//third_party/blink/renderer/core/xmlhttprequest:*", # 49 errors
+- "//third_party/blink/renderer/core:*", # 823 errors
+- "//third_party/blink/renderer/modules/accessibility:*", # 7 errors
+- "//third_party/blink/renderer/modules/animationworklet:*", # 1 error
+- "//third_party/blink/renderer/modules/background_fetch:*", # 4 errors
+- "//third_party/blink/renderer/modules/background_sync:*", # 6 errors
+- "//third_party/blink/renderer/modules/cache_storage:*", # 3 errors
+- "//third_party/blink/renderer/modules/canvas:*", # 1 error
+- "//third_party/blink/renderer/modules/clipboard:*", # 1 error
+- "//third_party/blink/renderer/modules/contacts_picker:*", # 1 error
+- "//third_party/blink/renderer/modules/content_index:*", # 3 errors
+- "//third_party/blink/renderer/modules/cookie_store:*", # 8 errors
+- "//third_party/blink/renderer/modules/credentialmanager:*", # 1 error
+- "//third_party/blink/renderer/modules/csspaint:*", # 2 errors
+- "//third_party/blink/renderer/modules/device_orientation:*", # 5 errors
+- "//third_party/blink/renderer/modules/encryptedmedia:*", # 3 errors
+- "//third_party/blink/renderer/modules/exported:*", # 16 errors
+- "//third_party/blink/renderer/modules/font_access:*", # 3 errors
+- "//third_party/blink/renderer/modules/gamepad:*", # 1 error
+- "//third_party/blink/renderer/modules/imagecapture:*", # 2 errors
+- "//third_party/blink/renderer/modules/installedapp:*", # 1 error
+- "//third_party/blink/renderer/modules/launch:*", # 3 errors
+- "//third_party/blink/renderer/modules/manifest:*", # 2 errors
+- "//third_party/blink/renderer/modules/media_capabilities:*", # 5 errors
+- "//third_party/blink/renderer/modules/media_controls:*", # 31 errors
+- "//third_party/blink/renderer/modules/mediacapturefromelement:*", # 14 errors
+- "//third_party/blink/renderer/modules/mediarecorder:*", # 1 error
+- "//third_party/blink/renderer/modules/mediastream:*", # 29 errors
+- "//third_party/blink/renderer/modules/native_file_system:*", # 2 errors
+- "//third_party/blink/renderer/modules/nfc:*", # 2 errors
+- "//third_party/blink/renderer/modules/notifications:*", # 5 errors
+- "//third_party/blink/renderer/modules/payments/goods:*", # 1 error
+- "//third_party/blink/renderer/modules/payments:*", # 22 errors
+- "//third_party/blink/renderer/modules/peerconnection:*", # 43 errors
+- "//third_party/blink/renderer/modules/push_messaging:*", # 12 errors
+- "//third_party/blink/renderer/modules/quota:*", # 1 error
+- "//third_party/blink/renderer/modules/remoteplayback:*", # 3 errors
+- "//third_party/blink/renderer/modules/serial:*", # 1 error
+- "//third_party/blink/renderer/modules/service_worker:*", # 23 errors
+- "//third_party/blink/renderer/modules/shapedetection:*", # 4 errors
+- "//third_party/blink/renderer/modules/srcobject:*", # 1 error
+- "//third_party/blink/renderer/modules/storage:*", # 3 errors
+- "//third_party/blink/renderer/modules/wake_lock:*", # 1 error
+- "//third_party/blink/renderer/modules/webaudio:*", # 5 errors
+- "//third_party/blink/renderer/modules/webcodecs:*", # 13 errors
+- "//third_party/blink/renderer/modules/webgl:*", # 3 errors
+- "//third_party/blink/renderer/modules/webgpu:*", # 6 errors
+- "//third_party/blink/renderer/modules/webmidi:*", # 1 error
+- "//third_party/blink/renderer/modules/webtransport:*", # 16 errors
+- "//third_party/blink/renderer/modules/worklet:*", # 2 errors
+- "//third_party/blink/renderer/modules/xr:*", # 13 errors
+- "//third_party/blink/renderer/modules:*", # 321 errors
+- "//third_party/blink/renderer/platform/blob:*", # 16 errors
+- "//third_party/blink/renderer/platform/heap:*", # 65 errors
+- "//third_party/blink/renderer/platform/instrumentation:*", # 13 errors
+- "//third_party/blink/renderer/platform/loader:*", # 180 errors
+- "//third_party/blink/renderer/platform/network:*", # 15 errors
+- "//third_party/blink/renderer/platform/scheduler:*", # 45 errors
+- "//third_party/blink/renderer/platform/wtf:*", # 2 errors
+- "//third_party/blink/renderer/platform:*", # 72 errors
+-
+- "//third_party/breakpad:*", # 34 errors
+- "//third_party/ced/*",
+- "//third_party/crashpad/crashpad/client:*", # 1 error
+- "//third_party/crashpad/crashpad/compat:*", # 2 errors
+- "//third_party/crashpad/crashpad/snapshot:*", # 1 error
+- "//third_party/crashpad/crashpad/test:*", # 2 errors
+- "//third_party/crashpad/crashpad/util:*", # 2 errors
+- "//third_party/dav1d:*", # 95 errors
+- "//third_party/ffmpeg:*", # 1 error
+- "//third_party/icu/*",
+- "//third_party/libvpx:*", # 164 errors
+- "//third_party/libwebp:*", # 80 errors, https://crbug.com/800762
+- "//third_party/openscreen/src/cast/common:*", # 4 errors
+- "//third_party/openscreen/src/cast/receiver:*", # 1 error
+- "//third_party/openscreen/src/cast/streaming:*", # 66 errors
+- "//third_party/openscreen/src/discovery:*", # 36 errors
+- "//third_party/openscreen/src/osp/impl/quic:*", # 16 errors
+- "//third_party/openscreen/src/osp/msgs:*", # 5 errors
+- "//third_party/openscreen/src/osp/public:*", # 1 error
+- "//third_party/openscreen/src/osp:*", # 13 errors
+- "//third_party/openscreen/src/util:*", # 29 errors
+- "//third_party/pdfium/samples:*", # 1 error
+- "//third_party/pdfium/third_party:*", # 2 errors
+- "//third_party/pdfium:*", # 1 error
+-
+- # //v8/*, https://crbug.com/v8/7330
+- "//v8/src/inspector:*", # 20 errors
+- "//v8/test/cctest:*", # 26 errors
+- "//v8/test/unittests:*", # 11 errors
+- "//v8/test/wasm-api-tests:*", # 13 errors
+- "//v8/third_party/inspector_protocol:*", # 2 errors
+- "//v8/tools/debug_helper:*", # 9 errors
+- "//v8/tools/v8windbg:*", # 2 errors
+- "//v8:*", # 1871 errors
+-]
++#no_check_targets = [
++# # //chrome/*, https://crbug.com/949535
++# "//chrome/browser/devtools:*", # 114 errors
++# "//chrome/browser/media/router/discovery:*", # 26 errors
++# "//chrome/browser/media/router:*", # 225 errors
++# "//chrome/browser/paint_preview:*", # 4 errors
++# "//chrome/browser/profiling_host:*", # 13 errors
++# "//chrome/browser/resources/chromeos/zip_archiver/cpp:*", # 2 errors
++# "//chrome/browser/safe_browsing/android:*", # 3 errors
++# "//chrome/browser/safe_browsing:*", # 85 errors
++# "//chrome/browser/safety_check/android:*", # 3 errors
++# "//chrome/browser/storage_access_api:*", # 2 errors
++# "//chrome/browser/touch_to_fill/android:*", # 8 errors
++# "//chrome/browser/touch_to_fill:*", # 5 errors
++# "//chrome/browser/updates/announcement_notification:*", # 15 errors
++# "//chrome/browser/updates/internal:*", # 8 errors
++# "//chrome/browser/updates:*", # 21 errors
++# "//chrome/browser:*", # 780 errors
++# "//chrome/child:*", # 3 errors
++# "//chrome/credential_provider/gaiacp:*", # 1 error
++# "//chrome/gpu:*", # 2 errors
++# "//chrome/install_static:*", # 4 errors
++# "//chrome/notification_helper:*", # 4 errors
++# "//chrome/renderer:*", # 42 errors
++# "//chrome/services/cups_proxy/public/cpp:*", # 2 errors
++# "//chrome/services/cups_proxy:*", # 6 errors
++# "//chrome/services/file_util/public/cpp:*", # 13 errors
++# "//chrome/services/file_util:*", # 3 errors
++# "//chrome/services/ipp_parser:*", # 1 error
++# "//chrome/services/media_gallery_util/public/cpp:*", # 6 errors
++# "//chrome/services/media_gallery_util:*", # 3 errors
++# "//chrome/services/printing:*", # 3 errors
++# "//chrome/services/qrcode_generator:*", # 1 error
++# "//chrome/services/removable_storage_writer:*", # 1 error
++# "//chrome/services/sharing/public/cpp:*", # 2 errors
++# "//chrome/services/speech:*", # 5 errors
++# "//chrome/services/util_win:*", # 1 error
++# "//chrome/test/chromedriver:*", # 115 errors
++# "//chrome/test/data/nacl:*", # 350 errors
++# "//chrome/test/media_router:*", # 5 errors
++# "//chrome/test:*", # 2682 errors
++# "//chrome:*", # 7 errors
++#
++# "//clank/third_party/gvr_shim:*", # 1 error
++# "//extensions/browser/api/alarms:*", # 2 errors
++# "//extensions/browser/api/app_current_window_internal:*", # 3 errors
++# "//extensions/browser/api/app_runtime:*", # 3 errors
++# "//extensions/browser/api/app_window:*", # 5 errors
++# "//extensions/browser/api/audio:*", # 3 errors
++# "//extensions/browser/api/automation_internal:*", # 37 errors
++# "//extensions/browser/api/bluetooth_low_energy:*", # 22 errors
++# "//extensions/browser/api/bluetooth_socket:*", # 12 errors
++# "//extensions/browser/api/cast_channel:*", # 3 errors
++# "//extensions/browser/api/cec_private:*", # 4 errors
++# "//extensions/browser/api/clipboard:*", # 3 errors
++# "//extensions/browser/api/crash_report_private:*", # 1 error
++# "//extensions/browser/api/declarative:*", # 20 errors
++# "//extensions/browser/api/declarative_content:*", # 2 errors
++# "//extensions/browser/api/declarative_net_request/filter_list_converter:*", # 1
++# # error
++# "//extensions/browser/api/declarative_net_request:*", # 18 errors
++# "//extensions/browser/api/declarative_webrequest:*", # 29 errors
++# "//extensions/browser/api/diagnostics:*", # 2 errors
++# "//extensions/browser/api/display_source:*", # 7 errors
++# "//extensions/browser/api/dns:*", # 3 errors
++# "//extensions/browser/api/document_scan:*", # 2 errors
++# "//extensions/browser/api/feedback_private:*", # 2 errors
++# "//extensions/browser/api/file_handlers:*", # 3 errors
++# "//extensions/browser/api/file_system:*", # 1 error
++# "//extensions/browser/api/hid:*", # 12 errors
++# "//extensions/browser/api/idle:*", # 4 errors
++# "//extensions/browser/api/management:*", # 19 errors
++# "//extensions/browser/api/messaging:*", # 1 error
++# "//extensions/browser/api/metrics_private:*", # 3 errors
++# "//extensions/browser/api/mime_handler_private:*", # 1 error
++# "//extensions/browser/api/networking_config:*", # 7 errors
++# "//extensions/browser/api/networking_private:*", # 14 errors
++# "//extensions/browser/api/power:*", # 3 errors
++# "//extensions/browser/api/printer_provider:*", # 7 errors
++# "//extensions/browser/api/printer_provider_internal:*", # 3 errors
++# "//extensions/browser/api/runtime:*", # 6 errors
++# "//extensions/browser/api/serial:*", # 10 errors
++# "//extensions/browser/api/socket:*", # 11 errors
++# "//extensions/browser/api/sockets_tcp:*", # 6 errors
++# "//extensions/browser/api/sockets_tcp_server:*", # 8 errors
++# "//extensions/browser/api/sockets_udp:*", # 9 errors
++# "//extensions/browser/api/storage:*", # 9 errors
++# "//extensions/browser/api/system_cpu:*", # 1 error
++# "//extensions/browser/api/system_display:*", # 3 errors
++# "//extensions/browser/api/system_info:*", # 8 errors
++# "//extensions/browser/api/system_memory:*", # 1 error
++# "//extensions/browser/api/system_network:*", # 2 errors
++# "//extensions/browser/api/system_power_source:*", # 2 errors
++# "//extensions/browser/api/system_storage:*", # 6 errors
++# "//extensions/browser/api/test:*", # 1 error
++# "//extensions/browser/api/usb:*", # 12 errors
++# "//extensions/browser/api/virtual_keyboard:*", # 1 error
++# "//extensions/browser/api/virtual_keyboard_private:*", # 2 errors
++# "//extensions/browser/api/vpn_provider:*", # 13 errors
++# "//extensions/browser/api/web_request:*", # 37 errors
++# "//extensions/browser/api/webcam_private:*", # 8 errors
++# "//extensions/browser/api:*", # 7 errors
++# "//extensions/browser/updater:*", # 31 errors
++# "//extensions/browser/value_store:*", # 5 errors
++# "//extensions/browser:*", # 20 errors
++# "//extensions:*", # 75 errors
++# "//headless:*", # 167 errors
++# "//jingle:*", # 4 errors
++# "//native_client/src/trusted/service_runtime:*", # 2 errors
++# "//ppapi/cpp/private:*", # 1 error
++# "//ppapi/host:*", # 1 error
++# "//ppapi/native_client/src/untrusted/pnacl_irt_shim:*", # 197 errors
++# "//ppapi/proxy:*", # 31 errors
++# "//ppapi/shared_impl:*", # 3 errors
++# "//ppapi/thunk:*", # 1071 errors
++# "//ppapi:*", # 3 errors
++# "//remoting/base/grpc_support:*", # 14 errors
++# "//remoting/base/grpc_test_support:*", # 1 error
++# "//remoting/base:*", # 6 errors
++# "//remoting/client/audio:*", # 7 errors
++# "//remoting/client/display:*", # 55 errors
++# "//remoting/client/input:*", # 17 errors
++# "//remoting/client/jni:*", # 8 errors
++# "//remoting/client/notification:*", # 12 errors
++# "//remoting/client/ui:*", # 13 errors
++# "//remoting/client:*", # 20 errors
++# "//remoting/codec:*", # 32 errors
++# "//remoting/host/chromeos:*", # 10 errors
++# "//remoting/host/file_transfer:*", # 43 errors
++# "//remoting/host/input_monitor:*", # 3 errors
++# "//remoting/host/installer/mac:*", # 1 error
++# "//remoting/host/it2me:*", # 18 errors
++# "//remoting/host/linux:*", # 64 errors
++# "//remoting/host/mac:*", # 49 errors
++# "//remoting/host/native_messaging:*", # 3 errors
++# "//remoting/host/security_key:*", # 68 errors
++# "//remoting/host/setup:*", # 9 errors
++# "//remoting/host/win:*", # 43 errors
++# "//remoting/host:*", # 164 errors
++# "//remoting/ios/app/settings:*", # 6 errors
++# "//remoting/ios/app:*", # 9 errors
++# "//remoting/ios/audio:*", # 5 errors
++# "//remoting/ios/domain:*", # 2 errors
++# "//remoting/ios/facade:*", # 8 errors
++# "//remoting/ios/persistence:*", # 10 errors
++# "//remoting/ios/session:*", # 7 errors
++# "//remoting/ios:*", # 2 errors
++# "//remoting/protocol:*", # 142 errors
++# "//remoting/signaling:*", # 30 errors
++# "//remoting/test:*", # 20 errors
++# "//remoting:*", # 27 errors
++# "//sandbox/linux:*", # 13 errors
++# "//sandbox/mac:*", # 14 errors
++# "//sandbox/win:*", # 7 errors
++#
++# # //third_party/blink/*, https://crbug.com/800764
++# "//third_party/blink/common:*", # 9 errors
++# "//third_party/blink/renderer/bindings/core/v8:*", # 1 error
++# "//third_party/blink/renderer/controller:*", # 191 errors
++# "//third_party/blink/renderer/core/accessibility:*", # 27 errors
++# "//third_party/blink/renderer/core/animation:*", # 506 errors
++# "//third_party/blink/renderer/core/animation_frame:*", # 4 errors
++# "//third_party/blink/renderer/core/aom:*", # 23 errors
++# "//third_party/blink/renderer/core/clipboard:*", # 43 errors
++# "//third_party/blink/renderer/core/content_capture:*", # 12 errors
++# "//third_party/blink/renderer/core/context_features:*", # 3 errors
++# "//third_party/blink/renderer/core/css:*", # 835 errors
++# "//third_party/blink/renderer/core/display_lock:*", # 36 errors
++# "//third_party/blink/renderer/core/dom:*", # 706 errors
++# "//third_party/blink/renderer/core/editing:*", # 847 errors
++# "//third_party/blink/renderer/core/events:*", # 173 errors
++# "//third_party/blink/renderer/core/execution_context:*", # 48 errors
++# "//third_party/blink/renderer/core/exported:*", # 470 errors
++# "//third_party/blink/renderer/core/feature_policy:*", # 15 errors
++# "//third_party/blink/renderer/core/fetch:*", # 134 errors
++# "//third_party/blink/renderer/core/fileapi:*", # 55 errors
++# "//third_party/blink/renderer/core/frame:*", # 864 errors
++# "//third_party/blink/renderer/core/fullscreen:*", # 32 errors
++# "//third_party/blink/renderer/core/geometry:*", # 39 errors
++# "//third_party/blink/renderer/core/html/parser:*", # 133 errors
++# "//third_party/blink/renderer/core/html:*", # 1662 errors
++# "//third_party/blink/renderer/core/imagebitmap:*", # 34 errors
++# "//third_party/blink/renderer/core/input:*", # 240 errors
++# "//third_party/blink/renderer/core/inspector:*", # 594 errors
++# "//third_party/blink/renderer/core/intersection_observer:*", # 50 errors
++# "//third_party/blink/renderer/core/layout/svg:*", # 193 errors
++# "//third_party/blink/renderer/core/layout:*", # 920 errors
++# "//third_party/blink/renderer/core/loader:*", # 421 errors
++# "//third_party/blink/renderer/core/mathml:*", # 11 errors
++# "//third_party/blink/renderer/core/messaging:*", # 30 errors
++# "//third_party/blink/renderer/core/mojo:*", # 44 errors
++# "//third_party/blink/renderer/core/offscreencanvas:*", # 22 errors
++# "//third_party/blink/renderer/core/origin_trials:*", # 12 errors
++# "//third_party/blink/renderer/core/page:*", # 500 errors
++# "//third_party/blink/renderer/core/paint:*", # 788 errors
++# "//third_party/blink/renderer/core/probe:*", # 9 errors
++# "//third_party/blink/renderer/core/resize_observer:*", # 29 errors
++# "//third_party/blink/renderer/core/script:*", # 155 errors
++# "//third_party/blink/renderer/core/scroll:*", # 29 errors
++# "//third_party/blink/renderer/core/streams:*", # 75 errors
++# "//third_party/blink/renderer/core/style:*", # 86 errors
++# "//third_party/blink/renderer/core/svg:*", # 297 errors
++# "//third_party/blink/renderer/core/timezone:*", # 8 errors
++# "//third_party/blink/renderer/core/timing:*", # 170 errors
++# "//third_party/blink/renderer/core/trustedtypes:*", # 27 errors
++# "//third_party/blink/renderer/core/typed_arrays:*", # 24 errors
++# "//third_party/blink/renderer/core/url:*", # 7 errors
++# "//third_party/blink/renderer/core/workers:*", # 289 errors
++# "//third_party/blink/renderer/core/xml:*", # 119 errors
++# "//third_party/blink/renderer/core/xmlhttprequest:*", # 49 errors
++# "//third_party/blink/renderer/core:*", # 823 errors
++# "//third_party/blink/renderer/modules/accessibility:*", # 7 errors
++# "//third_party/blink/renderer/modules/animationworklet:*", # 1 error
++# "//third_party/blink/renderer/modules/background_fetch:*", # 4 errors
++# "//third_party/blink/renderer/modules/background_sync:*", # 6 errors
++# "//third_party/blink/renderer/modules/cache_storage:*", # 3 errors
++# "//third_party/blink/renderer/modules/canvas:*", # 1 error
++# "//third_party/blink/renderer/modules/clipboard:*", # 1 error
++# "//third_party/blink/renderer/modules/contacts_picker:*", # 1 error
++# "//third_party/blink/renderer/modules/content_index:*", # 3 errors
++# "//third_party/blink/renderer/modules/cookie_store:*", # 8 errors
++# "//third_party/blink/renderer/modules/credentialmanager:*", # 1 error
++# "//third_party/blink/renderer/modules/csspaint:*", # 2 errors
++# "//third_party/blink/renderer/modules/device_orientation:*", # 5 errors
++# "//third_party/blink/renderer/modules/encryptedmedia:*", # 3 errors
++# "//third_party/blink/renderer/modules/exported:*", # 16 errors
++# "//third_party/blink/renderer/modules/font_access:*", # 3 errors
++# "//third_party/blink/renderer/modules/gamepad:*", # 1 error
++# "//third_party/blink/renderer/modules/imagecapture:*", # 2 errors
++# "//third_party/blink/renderer/modules/installedapp:*", # 1 error
++# "//third_party/blink/renderer/modules/launch:*", # 3 errors
++# "//third_party/blink/renderer/modules/manifest:*", # 2 errors
++# "//third_party/blink/renderer/modules/media_capabilities:*", # 5 errors
++# "//third_party/blink/renderer/modules/media_controls:*", # 31 errors
++# "//third_party/blink/renderer/modules/mediacapturefromelement:*", # 14 errors
++# "//third_party/blink/renderer/modules/mediarecorder:*", # 1 error
++# "//third_party/blink/renderer/modules/mediastream:*", # 29 errors
++# "//third_party/blink/renderer/modules/native_file_system:*", # 2 errors
++# "//third_party/blink/renderer/modules/nfc:*", # 2 errors
++# "//third_party/blink/renderer/modules/notifications:*", # 5 errors
++# "//third_party/blink/renderer/modules/payments/goods:*", # 1 error
++# "//third_party/blink/renderer/modules/payments:*", # 22 errors
++# "//third_party/blink/renderer/modules/peerconnection:*", # 43 errors
++# "//third_party/blink/renderer/modules/push_messaging:*", # 12 errors
++# "//third_party/blink/renderer/modules/quota:*", # 1 error
++# "//third_party/blink/renderer/modules/remoteplayback:*", # 3 errors
++# "//third_party/blink/renderer/modules/serial:*", # 1 error
++# "//third_party/blink/renderer/modules/service_worker:*", # 23 errors
++# "//third_party/blink/renderer/modules/shapedetection:*", # 4 errors
++# "//third_party/blink/renderer/modules/srcobject:*", # 1 error
++# "//third_party/blink/renderer/modules/storage:*", # 3 errors
++# "//third_party/blink/renderer/modules/wake_lock:*", # 1 error
++# "//third_party/blink/renderer/modules/webaudio:*", # 5 errors
++# "//third_party/blink/renderer/modules/webcodecs:*", # 13 errors
++# "//third_party/blink/renderer/modules/webgl:*", # 3 errors
++# "//third_party/blink/renderer/modules/webgpu:*", # 6 errors
++# "//third_party/blink/renderer/modules/webmidi:*", # 1 error
++# "//third_party/blink/renderer/modules/webtransport:*", # 16 errors
++# "//third_party/blink/renderer/modules/worklet:*", # 2 errors
++# "//third_party/blink/renderer/modules/xr:*", # 13 errors
++# "//third_party/blink/renderer/modules:*", # 321 errors
++# "//third_party/blink/renderer/platform/blob:*", # 16 errors
++# "//third_party/blink/renderer/platform/heap:*", # 65 errors
++# "//third_party/blink/renderer/platform/instrumentation:*", # 13 errors
++# "//third_party/blink/renderer/platform/loader:*", # 180 errors
++# "//third_party/blink/renderer/platform/network:*", # 15 errors
++# "//third_party/blink/renderer/platform/scheduler:*", # 45 errors
++# "//third_party/blink/renderer/platform/wtf:*", # 2 errors
++# "//third_party/blink/renderer/platform:*", # 72 errors
++#
++# "//third_party/breakpad:*", # 34 errors
++# "//third_party/ced/*",
++# "//third_party/crashpad/crashpad/client:*", # 1 error
++# "//third_party/crashpad/crashpad/compat:*", # 2 errors
++# "//third_party/crashpad/crashpad/snapshot:*", # 1 error
++# "//third_party/crashpad/crashpad/test:*", # 2 errors
++# "//third_party/crashpad/crashpad/util:*", # 2 errors
++# "//third_party/dav1d:*", # 95 errors
++# "//third_party/ffmpeg:*", # 1 error
++# "//third_party/icu/*",
++# "//third_party/libvpx:*", # 164 errors
++# "//third_party/libwebp:*", # 80 errors, https://crbug.com/800762
++# "//third_party/openscreen/src/cast/common:*", # 4 errors
++# "//third_party/openscreen/src/cast/receiver:*", # 1 error
++# "//third_party/openscreen/src/cast/streaming:*", # 66 errors
++# "//third_party/openscreen/src/discovery:*", # 36 errors
++# "//third_party/openscreen/src/osp/impl/quic:*", # 16 errors
++# "//third_party/openscreen/src/osp/msgs:*", # 5 errors
++# "//third_party/openscreen/src/osp/public:*", # 1 error
++# "//third_party/openscreen/src/osp:*", # 13 errors
++# "//third_party/openscreen/src/util:*", # 29 errors
++# "//third_party/pdfium/samples:*", # 1 error
++# "//third_party/pdfium/third_party:*", # 2 errors
++# "//third_party/pdfium:*", # 1 error
++#
++# # //v8/*, https://crbug.com/v8/7330
++# "//v8/src/inspector:*", # 20 errors
++# "//v8/test/cctest:*", # 26 errors
++# "//v8/test/unittests:*", # 11 errors
++# "//v8/test/wasm-api-tests:*", # 13 errors
++# "//v8/third_party/inspector_protocol:*", # 2 errors
++# "//v8/tools/debug_helper:*", # 9 errors
++# "//v8/tools/v8windbg:*", # 2 errors
++# "//v8:*", # 1871 errors
++#]
+
+ # These are the list of GN files that run exec_script. This whitelist exists
+ # to force additional review for new uses of exec_script, which is strongly
diff --git a/www-client/chromium/files/chromium-renderer-std-nullptr-83.patch b/www-client/chromium/files/chromium-renderer-std-nullptr-83.patch
new file mode 100644
index 0000000..f95916e
--- /dev/null
+++ b/www-client/chromium/files/chromium-renderer-std-nullptr-83.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/renderer/platform/bindings/v8_set_return_value.h b/third_party/blink/renderer/platform/bindings/v8_set_return_value.h
+index 07cae22f1..7871f557d 100644
+--- a/third_party/blink/renderer/platform/bindings/v8_set_return_value.h
++++ b/third_party/blink/renderer/platform/bindings/v8_set_return_value.h
+@@ -51,7 +51,7 @@ void V8SetReturnValue(const CallbackInfo& info, const v8::Local<S> value) {
+
+ // nullptr
+ template <typename CallbackInfo>
+-void V8SetReturnValue(const CallbackInfo& info, nullptr_t) {
++void V8SetReturnValue(const CallbackInfo& info, std::nullptr_t) {
+ info.GetReturnValue().SetNull();
+ }
+
diff --git a/www-client/chromium/files/chromium-revert-crrev-2147485-84.patch b/www-client/chromium/files/chromium-revert-crrev-2147485-84.patch
new file mode 100644
index 0000000..3c6e2b1
--- /dev/null
+++ b/www-client/chromium/files/chromium-revert-crrev-2147485-84.patch
@@ -0,0 +1,369 @@
+diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
+index b1821434b..929b63ab8 100644
+--- a/content/browser/devtools/protocol/page_handler.cc
++++ b/content/browser/devtools/protocol/page_handler.cc
+@@ -961,14 +961,14 @@ Response PageHandler::SetDownloadBehavior(const std::string& behavior,
+
+ void PageHandler::GetAppManifest(
+ std::unique_ptr<GetAppManifestCallback> callback) {
+- if (!host_) {
++ WebContentsImpl* web_contents = GetWebContents();
++ if (!web_contents || !web_contents->GetManifestManagerHost()) {
+ callback->sendFailure(Response::ServerError("Cannot retrieve manifest"));
+ return;
+ }
+- ManifestManagerHost::GetOrCreateForCurrentDocument(host_->GetMainFrame())
+- ->RequestManifestDebugInfo(base::BindOnce(&PageHandler::GotManifest,
+- weak_factory_.GetWeakPtr(),
+- std::move(callback)));
++ web_contents->GetManifestManagerHost()->RequestManifestDebugInfo(
++ base::BindOnce(&PageHandler::GotManifest, weak_factory_.GetWeakPtr(),
++ std::move(callback)));
+ }
+
+ WebContentsImpl* PageHandler::GetWebContents() {
+diff --git a/content/browser/frame_host/render_document_host_user_data_browsertest.cc b/content/browser/frame_host/render_document_host_user_data_browsertest.cc
+index 09dff7842..290e5509b 100644
+--- a/content/browser/frame_host/render_document_host_user_data_browsertest.cc
++++ b/content/browser/frame_host/render_document_host_user_data_browsertest.cc
+@@ -88,7 +88,7 @@ class RenderDocumentHostUserDataTest : public ContentBrowserTest {
+
+ // Test basic functionality of RenderDocumentHostUserData.
+ IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest,
+- GetCreateAndDeleteForCurrentDocument) {
++ GetAndCreateForCurrentDocument) {
+ ASSERT_TRUE(embedded_test_server()->Start());
+ GURL url_a(embedded_test_server()->GetURL("a.com", "/title1.html"));
+
+@@ -104,14 +104,8 @@ IN_PROC_BROWSER_TEST_F(RenderDocumentHostUserDataTest,
+ // 3) Create Data and check that GetForCurrentDocument shouldn't return null
+ // now.
+ Data::CreateForCurrentDocument(rfh_a);
+- base::WeakPtr<Data> created_data =
+- Data::GetForCurrentDocument(rfh_a)->GetWeakPtr();
+- EXPECT_TRUE(created_data);
+-
+- // 4) Delete Data and check that GetForCurrentDocument should return null.
+- Data::DeleteForCurrentDocument(rfh_a);
+- EXPECT_FALSE(created_data);
+- EXPECT_FALSE(Data::GetForCurrentDocument(rfh_a));
++ data = Data::GetForCurrentDocument(rfh_a);
++ EXPECT_TRUE(data);
+ }
+
+ // Tests that RenderDocumentHostUserData objects are different for each
+diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
+index 23bc92faa..e95952a01 100644
+--- a/content/browser/frame_host/render_frame_host_impl.cc
++++ b/content/browser/frame_host/render_frame_host_impl.cc
+@@ -75,7 +75,6 @@
+ #include "content/browser/loader/navigation_url_loader_impl.h"
+ #include "content/browser/loader/prefetch_url_loader_service.h"
+ #include "content/browser/log_console_message.h"
+-#include "content/browser/manifest/manifest_manager_host.h"
+ #include "content/browser/media/capture/audio_mirroring_manager.h"
+ #include "content/browser/media/media_interface_proxy.h"
+ #include "content/browser/media/webaudio/audio_context_manager_impl.h"
+@@ -6146,15 +6145,6 @@ void RenderFrameHostImpl::SetUpMojoIfNeeded() {
+ std::make_unique<ActiveURLMessageFilter>(impl));
+ },
+ base::Unretained(this)));
+-
+- associated_registry_->AddInterface(base::BindRepeating(
+- [](RenderFrameHostImpl* impl,
+- mojo::PendingAssociatedReceiver<
+- blink::mojom::ManifestUrlChangeObserver> receiver) {
+- ManifestManagerHost::GetOrCreateForCurrentDocument(impl)
+- ->BindObserver(std::move(receiver));
+- },
+- base::Unretained(this)));
+ }
+
+ associated_registry_->AddInterface(base::BindRepeating(
+diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
+index bfd421386..2bba134e0 100644
+--- a/content/browser/frame_host/render_frame_host_impl.h
++++ b/content/browser/frame_host/render_frame_host_impl.h
+@@ -1595,10 +1595,6 @@ class CONTENT_EXPORT RenderFrameHostImpl
+ document_associated_data_.SetUserData(key, std::move(data));
+ }
+
+- void RemoveRenderDocumentHostUserData(const void* key) {
+- document_associated_data_.RemoveUserData(key);
+- }
+-
+ // Returns the child RenderFrameHostImpl if |child_frame_routing_id| is an
+ // immediate child of this FrameTreeNode. |child_frame_routing_id| is
+ // considered untrusted, so the renderer process is killed if it refers to a
+diff --git a/content/browser/manifest/manifest_manager_host.cc b/content/browser/manifest/manifest_manager_host.cc
+index 68ea016c6..b063e0d1e 100644
+--- a/content/browser/manifest/manifest_manager_host.cc
++++ b/content/browser/manifest/manifest_manager_host.cc
+@@ -9,34 +9,25 @@
+ #include "base/bind.h"
+ #include "content/browser/web_contents/web_contents_impl.h"
+ #include "content/public/browser/render_frame_host.h"
++#include "content/public/browser/web_contents.h"
+ #include "services/service_manager/public/cpp/interface_provider.h"
+ #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
+ #include "third_party/blink/public/common/manifest/manifest.h"
+
+ namespace content {
+
+-ManifestManagerHost::ManifestManagerHost(RenderFrameHost* render_frame_host)
+- : manifest_manager_frame_(render_frame_host) {
+- // Check that |manifest_manager_frame_| is a main frame.
+- DCHECK(!manifest_manager_frame_->GetParent());
+-}
++ManifestManagerHost::ManifestManagerHost(WebContents* web_contents)
++ : WebContentsObserver(web_contents),
++ manifest_url_change_observer_receivers_(web_contents, this) {}
+
+ ManifestManagerHost::~ManifestManagerHost() {
+ OnConnectionError();
+ }
+
+-void ManifestManagerHost::BindObserver(
+- mojo::PendingAssociatedReceiver<blink::mojom::ManifestUrlChangeObserver>
+- receiver) {
+- manifest_url_change_observer_receiver_.Bind(std::move(receiver));
+-}
+-
+-ManifestManagerHost* ManifestManagerHost::GetOrCreateForCurrentDocument(
+- RenderFrameHostImpl* rfh) {
+- DCHECK(rfh->is_main_frame());
+- if (!GetForCurrentDocument(rfh))
+- CreateForCurrentDocument(rfh);
+- return GetForCurrentDocument(rfh);
++void ManifestManagerHost::RenderFrameDeleted(
++ RenderFrameHost* render_frame_host) {
++ if (render_frame_host == manifest_manager_frame_)
++ OnConnectionError();
+ }
+
+ void ManifestManagerHost::GetManifest(GetManifestCallback callback) {
+@@ -54,7 +45,11 @@ void ManifestManagerHost::RequestManifestDebugInfo(
+ }
+
+ blink::mojom::ManifestManager& ManifestManagerHost::GetManifestManager() {
++ if (manifest_manager_frame_ != web_contents()->GetMainFrame())
++ OnConnectionError();
++
+ if (!manifest_manager_) {
++ manifest_manager_frame_ = web_contents()->GetMainFrame();
+ manifest_manager_frame_->GetRemoteInterfaces()->GetInterface(
+ manifest_manager_.BindNewPipeAndPassReceiver());
+ manifest_manager_.set_disconnect_handler(base::BindOnce(
+@@ -64,6 +59,8 @@ blink::mojom::ManifestManager& ManifestManagerHost::GetManifestManager() {
+ }
+
+ void ManifestManagerHost::OnConnectionError() {
++ manifest_manager_frame_ = nullptr;
++ manifest_manager_.reset();
+ std::vector<GetManifestCallback> callbacks;
+ for (CallbackMap::iterator it(&callbacks_); !it.IsAtEnd(); it.Advance()) {
+ callbacks.push_back(std::move(*it.GetCurrentValue()));
+@@ -71,10 +68,6 @@ void ManifestManagerHost::OnConnectionError() {
+ callbacks_.Clear();
+ for (auto& callback : callbacks)
+ std::move(callback).Run(GURL(), blink::Manifest());
+-
+- if (GetForCurrentDocument(manifest_manager_frame_)) {
+- DeleteForCurrentDocument(manifest_manager_frame_);
+- }
+ }
+
+ void ManifestManagerHost::OnRequestManifestResponse(
+@@ -88,16 +81,12 @@ void ManifestManagerHost::OnRequestManifestResponse(
+
+ void ManifestManagerHost::ManifestUrlChanged(
+ const base::Optional<GURL>& manifest_url) {
+- if (!manifest_manager_frame_->IsCurrent())
++ if (manifest_url_change_observer_receivers_.GetCurrentTargetFrame() !=
++ web_contents()->GetMainFrame()) {
+ return;
+-
+- // TODO(yuzus): |NotifyManifestUrlChanged| should start taking a
+- // |RenderFrameHost| parameter.
+- WebContents* web_contents =
+- WebContents::FromRenderFrameHost(manifest_manager_frame_);
+- static_cast<WebContentsImpl*>(web_contents)
++ }
++ static_cast<WebContentsImpl*>(web_contents())
+ ->NotifyManifestUrlChanged(manifest_url);
+ }
+
+-RENDER_DOCUMENT_HOST_USER_DATA_KEY_IMPL(ManifestManagerHost)
+ } // namespace content
+diff --git a/content/browser/manifest/manifest_manager_host.h b/content/browser/manifest/manifest_manager_host.h
+index 57f51dc9f..3dc0bbf6e 100644
+--- a/content/browser/manifest/manifest_manager_host.h
++++ b/content/browser/manifest/manifest_manager_host.h
+@@ -8,8 +8,8 @@
+ #include "base/callback_forward.h"
+ #include "base/containers/id_map.h"
+ #include "base/macros.h"
+-#include "content/public/browser/render_document_host_user_data.h"
+-#include "mojo/public/cpp/bindings/associated_receiver.h"
++#include "content/public/browser/web_contents_observer.h"
++#include "content/public/browser/web_contents_receiver_set.h"
+ #include "mojo/public/cpp/bindings/remote.h"
+ #include "third_party/blink/public/mojom/manifest/manifest_manager.mojom.h"
+ #include "third_party/blink/public/mojom/manifest/manifest_observer.mojom.h"
+@@ -21,16 +21,16 @@ struct Manifest;
+ namespace content {
+
+ class RenderFrameHost;
+-class RenderFrameHostImpl;
++class WebContents;
+
+ // ManifestManagerHost is a helper class that allows callers to get the Manifest
+ // associated with the main frame of the observed WebContents. It handles the
+ // IPC messaging with the child process.
+ // TODO(mlamouri): keep a cached version and a dirty bit here.
+-class ManifestManagerHost
+- : public RenderDocumentHostUserData<ManifestManagerHost>,
+- public blink::mojom::ManifestUrlChangeObserver {
++class ManifestManagerHost : public WebContentsObserver,
++ public blink::mojom::ManifestUrlChangeObserver {
+ public:
++ explicit ManifestManagerHost(WebContents* web_contents);
+ ~ManifestManagerHost() override;
+
+ using GetManifestCallback =
+@@ -44,18 +44,10 @@ class ManifestManagerHost
+ void RequestManifestDebugInfo(
+ blink::mojom::ManifestManager::RequestManifestDebugInfoCallback callback);
+
+- void BindObserver(
+- mojo::PendingAssociatedReceiver<blink::mojom::ManifestUrlChangeObserver>
+- receiver);
+-
+- static ManifestManagerHost* GetOrCreateForCurrentDocument(
+- RenderFrameHostImpl* rfh);
++ // WebContentsObserver
++ void RenderFrameDeleted(RenderFrameHost* render_frame_host) override;
+
+ private:
+- explicit ManifestManagerHost(RenderFrameHost* render_frame_host);
+-
+- friend class RenderDocumentHostUserData<ManifestManagerHost>;
+-
+ using CallbackMap = base::IDMap<std::unique_ptr<GetManifestCallback>>;
+
+ blink::mojom::ManifestManager& GetManifestManager();
+@@ -68,14 +60,13 @@ class ManifestManagerHost
+ // blink::mojom::ManifestUrlChangeObserver:
+ void ManifestUrlChanged(const base::Optional<GURL>& manifest_url) override;
+
+- RenderFrameHost* manifest_manager_frame_;
++ RenderFrameHost* manifest_manager_frame_ = nullptr;
+ mojo::Remote<blink::mojom::ManifestManager> manifest_manager_;
+ CallbackMap callbacks_;
+
+- mojo::AssociatedReceiver<blink::mojom::ManifestUrlChangeObserver>
+- manifest_url_change_observer_receiver_{this};
++ WebContentsFrameReceiverSet<blink::mojom::ManifestUrlChangeObserver>
++ manifest_url_change_observer_receivers_;
+
+- RENDER_DOCUMENT_HOST_USER_DATA_KEY_DECL();
+ DISALLOW_COPY_AND_ASSIGN(ManifestManagerHost);
+ };
+
+diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
+index 024415bb0..115f480ce 100644
+--- a/content/browser/web_contents/web_contents_impl.cc
++++ b/content/browser/web_contents/web_contents_impl.cc
+@@ -2122,6 +2122,8 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
+
+ screen_orientation_provider_.reset(new ScreenOrientationProvider(this));
+
++ manifest_manager_host_.reset(new ManifestManagerHost(this));
++
+ #if defined(OS_ANDROID)
+ DateTimeChooserAndroid::CreateForWebContents(this);
+ #endif
+@@ -4202,10 +4204,7 @@ bool WebContentsImpl::WasEverAudible() {
+ }
+
+ void WebContentsImpl::GetManifest(GetManifestCallback callback) {
+- // TODO(yuzus, 1061899): Move this function to RenderFrameHostImpl.
+- ManifestManagerHost* manifest_manager_host =
+- ManifestManagerHost::GetOrCreateForCurrentDocument(GetMainFrame());
+- manifest_manager_host->GetManifest(std::move(callback));
++ manifest_manager_host_->GetManifest(std::move(callback));
+ }
+
+ void WebContentsImpl::ExitFullscreen(bool will_cause_resize) {
+diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
+index 59510b1f8..e86be96fc 100644
+--- a/content/browser/web_contents/web_contents_impl.h
++++ b/content/browser/web_contents/web_contents_impl.h
+@@ -102,6 +102,7 @@ class DisplayCutoutHostImpl;
+ class FindRequestManager;
+ class JavaScriptDialogManager;
+ class JavaScriptDialogNavigationDeferrer;
++class ManifestManagerHost;
+ class MediaWebContentsObserver;
+ class NFCHost;
+ class PluginContentOriginAllowlist;
+@@ -311,6 +312,10 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents,
+
+ void NotifyManifestUrlChanged(const base::Optional<GURL>& manifest_url);
+
++ ManifestManagerHost* GetManifestManagerHost() const {
++ return manifest_manager_host_.get();
++ }
++
+ #if defined(OS_ANDROID)
+ void SetMainFrameImportance(ChildProcessImportance importance);
+ #endif
+@@ -1897,6 +1902,8 @@ class CONTENT_EXPORT WebContentsImpl : public WebContents,
+
+ std::unique_ptr<ScreenOrientationProvider> screen_orientation_provider_;
+
++ std::unique_ptr<ManifestManagerHost> manifest_manager_host_;
++
+ // The accessibility mode for all frames. This is queried when each frame
+ // is created, and broadcast to all frames when it changes.
+ ui::AXMode accessibility_mode_;
+diff --git a/content/public/browser/render_document_host_user_data.cc b/content/public/browser/render_document_host_user_data.cc
+index 3b58bf8a3..b1b385455 100644
+--- a/content/public/browser/render_document_host_user_data.cc
++++ b/content/public/browser/render_document_host_user_data.cc
+@@ -23,8 +23,4 @@ void SetRenderDocumentHostUserData(
+ key, std::move(data));
+ }
+
+-void RemoveRenderDocumentHostUserData(RenderFrameHost* rfh, const void* key) {
+- static_cast<RenderFrameHostImpl*>(rfh)->RemoveRenderDocumentHostUserData(key);
+-}
+-
+ } // namespace content
+diff --git a/content/public/browser/render_document_host_user_data.h b/content/public/browser/render_document_host_user_data.h
+index a138fd60a..f55f24f60 100644
+--- a/content/public/browser/render_document_host_user_data.h
++++ b/content/public/browser/render_document_host_user_data.h
+@@ -22,9 +22,6 @@ CONTENT_EXPORT void SetRenderDocumentHostUserData(
+ const void* key,
+ std::unique_ptr<base::SupportsUserData::Data> data);
+
+-CONTENT_EXPORT void RemoveRenderDocumentHostUserData(RenderFrameHost* rfh,
+- const void* key);
+-
+ // This class approximates the lifetime of a single blink::Document in the
+ // browser process. At the moment RenderFrameHost can correspond to multiple
+ // blink::Documents (when RenderFrameHost is reused for same-process
+@@ -85,12 +82,6 @@ class RenderDocumentHostUserData : public base::SupportsUserData::Data {
+ return static_cast<T*>(GetRenderDocumentHostUserData(rfh, UserDataKey()));
+ }
+
+- static void DeleteForCurrentDocument(RenderFrameHost* rfh) {
+- DCHECK(rfh);
+- DCHECK(GetForCurrentDocument(rfh));
+- RemoveRenderDocumentHostUserData(rfh, UserDataKey());
+- }
+-
+ static const void* UserDataKey() { return &T::kUserDataKey; }
+ };
+
diff --git a/www-client/chromium/files/chromium-revert-e7963c4-78.patch b/www-client/chromium/files/chromium-revert-e7963c4-78.patch
new file mode 100644
index 0000000..fe7e1a6
--- /dev/null
+++ b/www-client/chromium/files/chromium-revert-e7963c4-78.patch
@@ -0,0 +1,335 @@
+diff --git a/chrome/test/chromedriver/client/chromedriver.py b/chrome/test/chromedriver/client/chromedriver.py
+index 74b780e5f..8bd1cc004 100644
+--- a/chrome/test/chromedriver/client/chromedriver.py
++++ b/chrome/test/chromedriver/client/chromedriver.py
+@@ -653,7 +653,3 @@ class ChromeDriver(object):
+ if signCount is not None:
+ options['signCount'] = signCount
+ return self.ExecuteCommand(Command.ADD_CREDENTIAL, options)
+-
+- def GetCredentials(self, authenticatorId):
+- params = {'authenticatorId': authenticatorId}
+- return self.ExecuteCommand(Command.GET_CREDENTIALS, params)
+diff --git a/chrome/test/chromedriver/client/command_executor.py b/chrome/test/chromedriver/client/command_executor.py
+index 2286d839f..de27e1a3c 100644
+--- a/chrome/test/chromedriver/client/command_executor.py
++++ b/chrome/test/chromedriver/client/command_executor.py
+@@ -176,9 +176,6 @@ class Command(object):
+ ADD_CREDENTIAL = (
+ _Method.POST,
+ '/session/:sessionId/webauthn/authenticator/:authenticatorId/credential')
+- GET_CREDENTIALS = (
+- _Method.GET,
+- '/session/:sessionId/webauthn/authenticator/:authenticatorId/credentials')
+
+ # Custom Chrome commands.
+ IS_LOADING = (_Method.GET, '/session/:sessionId/is_loading')
+diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc
+index 737e34dce..0c9a00119 100644
+--- a/chrome/test/chromedriver/server/http_handler.cc
++++ b/chrome/test/chromedriver/server/http_handler.cc
+@@ -764,14 +764,6 @@ HttpHandler::HttpHandler(
+ "AddCredential",
+ base::BindRepeating(&ExecuteWebAuthnCommand,
+ base::BindRepeating(&ExecuteAddCredential)))),
+- CommandMapping(
+- kGet,
+- "session/:sessionId/webauthn/authenticator/:authenticatorId/"
+- "credentials",
+- WrapToCommand("GetCredentials",
+- base::BindRepeating(
+- &ExecuteWebAuthnCommand,
+- base::BindRepeating(&ExecuteGetCredentials)))),
+
+ //
+ // Non-standard extension commands
+diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
+index 15e986899..d59650004 100755
+--- a/chrome/test/chromedriver/test/run_py_tests.py
++++ b/chrome/test/chromedriver/test/run_py_tests.py
+@@ -226,7 +226,6 @@ _ANDROID_NEGATIVE_FILTER['chrome'] = (
+ 'ChromeDriverSecureContextTest.testAddVirtualAuthenticator',
+ 'ChromeDriverSecureContextTest.testRemoveVirtualAuthenticator',
+ 'ChromeDriverSecureContextTest.testAddCredential',
+- 'ChromeDriverSecureContextTest.testGetCredentials',
+ ]
+ )
+ _ANDROID_NEGATIVE_FILTER['chrome_stable'] = (
+@@ -2018,11 +2017,6 @@ class ChromeDriverTest(ChromeDriverBaseTestWithWebServer):
+
+ # Tests that require a secure context.
+ class ChromeDriverSecureContextTest(ChromeDriverBaseTest):
+- # The example attestation private key from the U2F spec at
+- # https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-raw-message-formats-v1.2-ps-20170411.html#registration-example
+- # PKCS.8 encoded without encryption, as a base64url string.
+- privateKey = "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8_zMDQDYAxlU-Qhk1Dwkf0v18GZca1DMF3SaJ9HPdmShRANCAASNYX5lyVCOZLzFZzrIKmeZ2jwURmgsJYxGP__fWN_S-j5sN4tT15XEpN_7QZnt14YvI6uvAgO0uJEboFaZlOEB"
+-
+ @staticmethod
+ def GlobalSetUp():
+ cert_path = os.path.join(chrome_paths.GetTestData(),
+@@ -2039,21 +2033,6 @@ class ChromeDriverSecureContextTest(ChromeDriverBaseTest):
+ return ChromeDriverSecureContextTest._https_server.GetUrl(
+ host) + file_path
+
+- # Encodes a string in URL-safe base64 with no padding.
+- @staticmethod
+- def URLSafeBase64Encode(string):
+- encoded = base64.urlsafe_b64encode(string)
+- while encoded[-1] == "=":
+- encoded = encoded[0:-1]
+- return encoded
+-
+- # Decodes a base64 string with no padding.
+- @staticmethod
+- def UrlSafeBase64Decode(string):
+- string = string.encode("utf-8")
+- string += "=" * (4 - len(string) % 4)
+- return base64.urlsafe_b64decode(string)
+-
+ def setUp(self):
+ self._driver = self.CreateDriver(
+ chrome_switches=['host-resolver-rules=MAP * 127.0.0.1'])
+@@ -2101,6 +2080,10 @@ class ChromeDriverSecureContextTest(ChromeDriverBaseTest):
+ self._driver.RemoveVirtualAuthenticator, response['authenticatorId'])
+
+ def testAddCredential(self):
++ # The example attestation private key from the U2F spec at
++ # https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-raw-message-formats-v1.2-ps-20170411.html#registration-example
++ # PKCS.8 encoded without encryption.
++ privateKey = "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8/zMDQDYAxlU+Qhk1Dwkf0v18GZca1DMF3SaJ9HPdmShRANCAASNYX5lyVCOZLzFZzrIKmeZ2jwURmgsJYxGP//fWN/S+j5sN4tT15XEpN/7QZnt14YvI6uvAgO0uJEboFaZlOEB"
+
+ script = """
+ let done = arguments[0];
+@@ -2123,78 +2106,16 @@ class ChromeDriverSecureContextTest(ChromeDriverBaseTest):
+ # Register a credential and try authenticating with it.
+ self._driver.AddCredential(
+ authenticatorId = authenticatorId,
+- credentialId = self.URLSafeBase64Encode("cred-1"),
++ credentialId = base64.b64encode("cred-1"),
+ isResidentCredential=False,
+ rpId="chromedriver.test",
+- privateKey=self.privateKey,
++ privateKey=privateKey,
+ signCount=1,
+ )
+
+ result = self._driver.ExecuteAsyncScript(script)
+ self.assertEquals('OK', result['status'])
+
+- def testAddCredentialBase64Errors(self):
+- # Test that AddCredential checks UrlBase64 parameteres.
+- self._driver.Load(self.GetHttpsUrlForFile(
+- '/chromedriver/webauthn_test.html', 'chromedriver.test'))
+-
+- authenticatorId = self._driver.AddVirtualAuthenticator(
+- protocol = 'ctap2',
+- transport = 'usb',
+- hasResidentKey = False,
+- hasUserVerification = False,
+- )['authenticatorId']
+-
+- # Try adding a credentialId that is encoded in vanilla base64.
+- self.assertRaisesRegexp(
+- chromedriver.InvalidArgument,
+- 'credentialId must be a base64url encoded string',
+- self._driver.AddCredential, authenticatorId, '_0n+wWqg=',
+- False, "chromedriver.test", self.privateKey, None, 1,
+- )
+-
+- # Try adding a credentialId that is not a string.
+- self.assertRaisesRegexp(
+- chromedriver.InvalidArgument,
+- 'credentialId must be a base64url encoded string',
+- self._driver.AddCredential, authenticatorId, 1,
+- False, "chromedriver.test", self.privateKey, None, 1,
+- )
+-
+- def testGetCredentials(self):
+- script = """
+- let done = arguments[0];
+- registerCredential({
+- authenticatorSelection: {
+- requireResidentKey: true,
+- },
+- }).then(done);
+- """
+- self._driver.Load(self.GetHttpsUrlForFile(
+- '/chromedriver/webauthn_test.html', 'chromedriver.test'))
+- authenticatorId = self._driver.AddVirtualAuthenticator(
+- protocol = 'ctap2',
+- transport = 'usb',
+- hasResidentKey = True,
+- hasUserVerification = True,
+- )['authenticatorId']
+-
+- # Register a credential via the webauthn API.
+- result = self._driver.ExecuteAsyncScript(script)
+- self.assertEquals('OK', result['status'])
+- credentialId = result['credential']['id']
+-
+- # GetCredentials should return the credential that was just created.
+- credentials = self._driver.GetCredentials(authenticatorId)['credentials']
+- self.assertEquals(1, len(credentials))
+- self.assertEquals(credentialId, credentials[0]['credentialId'])
+- self.assertEquals(True, credentials[0]['isResidentCredential'])
+- self.assertEquals('chromedriver.test', credentials[0]['rpId'])
+- self.assertEquals(chr(1),
+- self.UrlSafeBase64Decode(credentials[0]['userHandle']))
+- self.assertEquals(1, credentials[0]['signCount'])
+- self.assertTrue(credentials[0]['privateKey'])
+-
+ # Tests in the following class are expected to be moved to ChromeDriverTest
+ # class when we no longer support the legacy mode.
+ class ChromeDriverW3cTest(ChromeDriverBaseTestWithWebServer):
+diff --git a/chrome/test/chromedriver/webauthn_commands.cc b/chrome/test/chromedriver/webauthn_commands.cc
+index b0d4d62bc..32c8a4a61 100644
+--- a/chrome/test/chromedriver/webauthn_commands.cc
++++ b/chrome/test/chromedriver/webauthn_commands.cc
+@@ -6,8 +6,6 @@
+
+ #include <utility>
+
+-#include "base/base64.h"
+-#include "base/base64url.h"
+ #include "base/callback.h"
+ #include "base/containers/flat_map.h"
+ #include "base/values.h"
+@@ -17,8 +15,6 @@
+
+ namespace {
+
+-static constexpr char kBase64UrlError[] = " must be a base64url encoded string";
+-
+ // Creates a base::DictionaryValue by cloning the parameters specified by
+ // |mapping| from |params|.
+ base::DictionaryValue MapParams(
+@@ -33,48 +29,6 @@ base::DictionaryValue MapParams(
+ return options;
+ }
+
+-// Converts the string |keys| in |params| from base64url to base64. Returns a
+-// status error if conversion of one of the keys failed.
+-Status ConvertBase64UrlToBase64(base::Value* params,
+- const std::vector<const std::string> keys) {
+- for (const std::string key : keys) {
+- base::Value* maybe_value = params->FindKey(key);
+- if (!maybe_value)
+- continue;
+-
+- if (!maybe_value->is_string())
+- return Status(kInvalidArgument, key + kBase64UrlError);
+-
+- std::string& value = maybe_value->GetString();
+- std::string temp;
+- if (!Base64UrlDecode(value, base::Base64UrlDecodePolicy::IGNORE_PADDING,
+- &temp)) {
+- return Status(kInvalidArgument, key + kBase64UrlError);
+- }
+-
+- base::Base64Encode(temp, &value);
+- }
+-
+- return Status(kOk);
+-}
+-
+-// Converts the string |keys| in |params| from base64 to base64url.
+-void ConvertBase64ToBase64Url(base::Value* params,
+- const std::vector<const std::string> keys) {
+- for (const std::string key : keys) {
+- std::string* maybe_value = params->FindStringKey(key);
+- if (!maybe_value)
+- continue;
+-
+- std::string temp;
+- bool result = base::Base64Decode(*maybe_value, &temp);
+- DCHECK(result);
+-
+- base::Base64UrlEncode(temp, base::Base64UrlEncodePolicy::OMIT_PADDING,
+- maybe_value);
+- }
+-}
+-
+ } // namespace
+
+ Status ExecuteWebAuthnCommand(const WebAuthnCommand& command,
+@@ -125,40 +79,18 @@ Status ExecuteRemoveVirtualAuthenticator(WebView* web_view,
+ Status ExecuteAddCredential(WebView* web_view,
+ const base::Value& params,
+ std::unique_ptr<base::Value>* value) {
+- base::DictionaryValue mapped_params = MapParams(
+- {
+- {"authenticatorId", "authenticatorId"},
+- {"credential.credentialId", "credentialId"},
+- {"credential.isResidentCredential", "isResidentCredential"},
+- {"credential.rpId", "rpId"},
+- {"credential.privateKey", "privateKey"},
+- {"credential.userHandle", "userHandle"},
+- {"credential.signCount", "signCount"},
+- },
+- params);
+- Status status =
+- ConvertBase64UrlToBase64(mapped_params.FindKey("credential"),
+- {"credentialId", "privateKey", "userHandle"});
+- if (status.IsError())
+- return status;
+-
+- return web_view->SendCommandAndGetResult("WebAuthn.addCredential",
+- std::move(mapped_params), value);
+-}
+-
+-Status ExecuteGetCredentials(WebView* web_view,
+- const base::Value& params,
+- std::unique_ptr<base::Value>* value) {
+- Status status = web_view->SendCommandAndGetResult(
+- "WebAuthn.getCredentials",
+- MapParams({{"authenticatorId", "authenticatorId"}}, params), value);
+- if (status.IsError())
+- return status;
+-
+- for (base::Value& credential : (*value)->FindKey("credentials")->GetList()) {
+- ConvertBase64ToBase64Url(&credential,
+- {"credentialId", "privateKey", "userHandle"});
+- }
+-
+- return status;
++ return web_view->SendCommandAndGetResult(
++ "WebAuthn.addCredential",
++ MapParams(
++ {
++ {"authenticatorId", "authenticatorId"},
++ {"credential.credentialId", "credentialId"},
++ {"credential.isResidentCredential", "isResidentCredential"},
++ {"credential.rpId", "rpId"},
++ {"credential.privateKey", "privateKey"},
++ {"credential.userHandle", "userHandle"},
++ {"credential.signCount", "signCount"},
++ },
++ params),
++ value);
+ }
+diff --git a/chrome/test/chromedriver/webauthn_commands.h b/chrome/test/chromedriver/webauthn_commands.h
+index dcc278428..fd75ecfed 100644
+--- a/chrome/test/chromedriver/webauthn_commands.h
++++ b/chrome/test/chromedriver/webauthn_commands.h
+@@ -44,9 +44,4 @@ Status ExecuteAddCredential(WebView* web_view,
+ const base::Value& params,
+ std::unique_ptr<base::Value>* value);
+
+-// Retrieve all the credentials stored in an authenticator.
+-Status ExecuteGetCredentials(WebView* web_view,
+- const base::Value& params,
+- std::unique_ptr<base::Value>* value);
+-
+ #endif // CHROME_TEST_CHROMEDRIVER_WEBAUTHN_COMMANDS_H_
+diff --git a/device/fido/virtual_ctap2_device.cc b/device/fido/virtual_ctap2_device.cc
+index 672b61cb5..843bd0f4e 100644
+--- a/device/fido/virtual_ctap2_device.cc
++++ b/device/fido/virtual_ctap2_device.cc
+@@ -864,7 +864,6 @@ base::Optional<CtapDeviceResponseCode> VirtualCtap2Device::OnMakeCredential(
+
+ registration.is_resident = true;
+ registration.user = request.user;
+- registration.rp = request.rp;
+ }
+
+ if (request.cred_protect) {
diff --git a/www-client/chromium/files/chromium-serviceworker-83.patch b/www-client/chromium/files/chromium-serviceworker-83.patch
new file mode 100644
index 0000000..a836e7f
--- /dev/null
+++ b/www-client/chromium/files/chromium-serviceworker-83.patch
@@ -0,0 +1,130 @@
+From 0914a38252f205fc04fa50e858b24fa5f535ab11 Mon Sep 17 00:00:00 2001
+From: Hiroki Nakagawa <nhiroki@chromium.org>
+Date: Wed, 29 Apr 2020 11:46:54 +0900
+Subject: [PATCH] ServiceWorker: Avoid double destruction of ServiceWorkerObjectHost on connection error
+
+This CL avoids the case where ServiceWorkerObjectHost is destroyed twice
+on ServiceWorkerObjectHost::OnConnectionError() when Chromium is built
+with the GCC build toolchain.
+
+> How does the issue happen?
+
+ServiceWorkerObjectHost has a cyclic reference like this:
+
+ServiceWorkerObjectHost
+ --([1] scoped_refptr)--> ServiceWorkerVersion
+ --([2] std::unique_ptr)--> ServiceWorkerProviderHost
+ --([3] std::unique_ptr)--> ServiceWorkerContainerHost
+ --([4] std::unique_ptr)--> ServiceWorkerObjectHost
+
+Note that ServiceWorkerContainerHost manages ServiceWorkerObjectHost in
+map<int64_t version_id, std::unique_ptr<ServiceWorkerObjectHost>>.
+
+When ServiceWorkerObjectHost::OnConnectionError() is called, the
+function removes the reference [4] from the map, and destroys
+ServiceWorkerObjectHost. If the object host has the last reference [1]
+to ServiceWorkerVersion, the destruction also cuts off the references
+[2] and [3], and destroys ServiceWorkerProviderHost and
+ServiceWorkerContainerHost.
+
+This seems to work well on the Chromium's default toolchain, but not
+work on the GCC toolchain. According to the report, destruction of
+ServiceWorkerContainerHost happens while the map owned by the container
+host is erasing the ServiceWorkerObjectHost, and this results in crash
+due to double destruction of the object host.
+
+I don't know the reason why this happens only on the GCC toolchain, but
+I suspect the order of object destruction on std::map::erase() could be
+different depending on the toolchains.
+
+> How does this CL fix this?
+
+The ideal fix is to redesign the ownership model of
+ServiceWorkerVersion, but it's not feasible in the short term.
+
+Instead, this CL avoids destruction of ServiceWorkerObjectHost on
+std::map::erase(). The new code takes the ownership of the object host
+from the map first, and then erases the entry from the map. This
+separates timings to erase the map entry and to destroy the object host,
+so the crash should no longer happen.
+
+Bug: 1056598
+Change-Id: Id30654cb575bc557c42044d6f0c6f1f9bfaed613
+---
+
+diff --git a/content/browser/service_worker/service_worker_container_host.cc b/content/browser/service_worker/service_worker_container_host.cc
+index c631bcd..ff917f8 100644
+--- a/content/browser/service_worker/service_worker_container_host.cc
++++ b/content/browser/service_worker/service_worker_container_host.cc
+@@ -717,6 +717,16 @@
+ int64_t version_id) {
+ DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
+ DCHECK(base::Contains(service_worker_object_hosts_, version_id));
++
++ // ServiceWorkerObjectHost to be deleted may have the last reference to
++ // ServiceWorkerVersion that indirectly owns this ServiceWorkerContainerHost.
++ // If we erase the object host directly from the map, |this| could be deleted
++ // during the map operation and may crash. To avoid the case, we take the
++ // ownership of the object host from the map first, and then erase the entry
++ // from the map. See https://crbug.com/1056598 for details.
++ std::unique_ptr<ServiceWorkerObjectHost> to_be_deleted =
++ std::move(service_worker_object_hosts_[version_id]);
++ DCHECK(to_be_deleted);
+ service_worker_object_hosts_.erase(version_id);
+ }
+
+diff --git a/content/browser/service_worker/service_worker_object_host_unittest.cc b/content/browser/service_worker/service_worker_object_host_unittest.cc
+index 238cb8b..f60c7a2 100644
+--- a/content/browser/service_worker/service_worker_object_host_unittest.cc
++++ b/content/browser/service_worker/service_worker_object_host_unittest.cc
+@@ -200,6 +200,19 @@
+ return registration_info;
+ }
+
++ void CallOnConnectionError(ServiceWorkerContainerHost* container_host,
++ int64_t version_id) {
++ // ServiceWorkerObjectHost has the last reference to the version.
++ ServiceWorkerObjectHost* object_host =
++ GetServiceWorkerObjectHost(container_host, version_id);
++ EXPECT_TRUE(object_host->version_->HasOneRef());
++
++ // Make sure that OnConnectionError induces destruction of the version and
++ // the object host.
++ object_host->receivers_.Clear();
++ object_host->OnConnectionError();
++ }
++
+ BrowserTaskEnvironment task_environment_;
+ std::unique_ptr<EmbeddedWorkerTestHelper> helper_;
+ scoped_refptr<ServiceWorkerRegistration> registration_;
+@@ -409,5 +422,30 @@
+ events[0]->source_info_for_client->client_type);
+ }
+
++// This is a regression test for https://crbug.com/1056598.
++TEST_F(ServiceWorkerObjectHostTest, OnConnectionError) {
++ const GURL scope("https://www.example.com/");
++ const GURL script_url("https://www.example.com/service_worker.js");
++ Initialize(std::make_unique<EmbeddedWorkerTestHelper>(base::FilePath()));
++ SetUpRegistration(scope, script_url);
++
++ // Create the provider host.
++ ASSERT_EQ(blink::ServiceWorkerStatusCode::kOk,
++ StartServiceWorker(version_.get()));
++
++ // Set up the case where the last reference to the version is owned by the
++ // service worker object host.
++ ServiceWorkerContainerHost* container_host =
++ version_->provider_host()->container_host();
++ ServiceWorkerVersion* version_rawptr = version_.get();
++ version_ = nullptr;
++ ASSERT_TRUE(version_rawptr->HasOneRef());
++
++ // Simulate the connection error that induces the object host destruction.
++ // This shouldn't crash.
++ CallOnConnectionError(container_host, version_rawptr->version_id());
++ base::RunLoop().RunUntilIdle();
++}
++
+ } // namespace service_worker_object_host_unittest
+ } // namespace content
diff --git a/www-client/chromium/files/chromium-shim_headers.patch b/www-client/chromium/files/chromium-shim_headers.patch
new file mode 100644
index 0000000..9372632
--- /dev/null
+++ b/www-client/chromium/files/chromium-shim_headers.patch
@@ -0,0 +1,48 @@
+From e273172bbafedca36984fc40f4aa6c44b79ac2ef Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 25 Dec 2020 09:10:32 +0000
+Subject: [PATCH] shim_headers: fix outputs generation
+
+---
+ build/shim_headers.gni | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/build/shim_headers.gni b/build/shim_headers.gni
+index 0900cba..5138647 100644
+--- a/build/shim_headers.gni
++++ b/build/shim_headers.gni
+@@ -6,6 +6,8 @@ template("shim_headers") {
+ action_name = "gen_${target_name}"
+ config_name = "${target_name}_config"
+ shim_headers_path = "${root_gen_dir}/shim_headers/${target_name}"
++ shim_root_path = rebase_path(invoker.root_path)
++ shim_rel_path = rebase_path("${shim_root_path}", rebase_path("//"))
+
+ config(config_name) {
+ include_dirs = [ shim_headers_path ]
+@@ -16,7 +18,7 @@ template("shim_headers") {
+ args = [
+ "--generate",
+ "--headers-root",
+- rebase_path(invoker.root_path),
++ "${shim_root_path}",
+ "--output-directory",
+ rebase_path(shim_headers_path),
+ ]
+@@ -27,9 +29,10 @@ template("shim_headers") {
+ ]
+ }
+ args += invoker.headers
+-
+- outputs = process_file_template(invoker.headers,
+- "${shim_headers_path}/{{source_file_part}}")
++ outputs = []
++ foreach(shim_header, invoker.headers) {
++ outputs += [ "${shim_headers_path}/${shim_rel_path}/" + shim_header ]
++ }
+ }
+
+ group(target_name) {
+--
+2.26.2
+
diff --git a/www-client/chromium/files/chromium-simhash-include-84.patch b/www-client/chromium/files/chromium-simhash-include-84.patch
new file mode 100644
index 0000000..eb77921
--- /dev/null
+++ b/www-client/chromium/files/chromium-simhash-include-84.patch
@@ -0,0 +1,26 @@
+diff --git a/components/federated_learning/sim_hash.cc b/components/federated_learning/sim_hash.cc
+index 3624459f3..9287dbe72 100644
+--- a/components/federated_learning/sim_hash.cc
++++ b/components/federated_learning/sim_hash.cc
+@@ -6,6 +6,7 @@
+
+ #include "base/hash/legacy_hash.h"
+
++#include <cmath>
+ #include <algorithm>
+
+ namespace federated_learning {
+diff --git a/components/federated_learning/sim_hash.h b/components/federated_learning/sim_hash.h
+index 55030d9d2..26087e74e 100644
+--- a/components/federated_learning/sim_hash.h
++++ b/components/federated_learning/sim_hash.h
+@@ -5,7 +5,9 @@
+ #ifndef COMPONENTS_FEDERATED_LEARNING_SIM_HASH_H_
+ #define COMPONENTS_FEDERATED_LEARNING_SIM_HASH_H_
+
++#include <stdint.h>
+ #include <set>
++#include <string>
+ #include <unordered_set>
+
+ namespace federated_learning {
diff --git a/www-client/chromium/files/chromium-simhash-include-85.patch b/www-client/chromium/files/chromium-simhash-include-85.patch
new file mode 100644
index 0000000..4075548
--- /dev/null
+++ b/www-client/chromium/files/chromium-simhash-include-85.patch
@@ -0,0 +1,15 @@
+diff --git a/components/federated_learning/sim_hash.h b/components/federated_learning/sim_hash.h
+index 55030d9d2..ab7e57132 100644
+--- a/components/federated_learning/sim_hash.h
++++ b/components/federated_learning/sim_hash.h
+@@ -5,7 +5,10 @@
+ #ifndef COMPONENTS_FEDERATED_LEARNING_SIM_HASH_H_
+ #define COMPONENTS_FEDERATED_LEARNING_SIM_HASH_H_
+
++#include <stdint.h>
++
+ #include <set>
++#include <string>
+ #include <unordered_set>
+
+ namespace federated_learning {
diff --git a/www-client/chromium/files/chromium-sqrt.patch b/www-client/chromium/files/chromium-sqrt.patch
new file mode 100644
index 0000000..4e391fd
--- /dev/null
+++ b/www-client/chromium/files/chromium-sqrt.patch
@@ -0,0 +1,13 @@
+diff --git a/ui/gfx/color_utils.cc b/ui/gfx/color_utils.cc
+index c868cd54b..ed33c5c18 100644
+--- a/ui/gfx/color_utils.cc
++++ b/ui/gfx/color_utils.cc
+@@ -431,7 +431,7 @@ SkColor SetDarkestColorForTesting(SkColor color) {
+ // GetContrastRatio(kWhiteLuminance, g_luminance_midpoint). The formula below
+ // can be verified by plugging it into how GetContrastRatio() operates.
+ g_luminance_midpoint =
+- std::sqrtf((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
++ (float)std::sqrt((dark_luminance + 0.05f) * (kWhiteLuminance + 0.05f)) - 0.05f;
+
+ return previous_darkest_color;
+ }
diff --git a/www-client/chromium/files/chromium-std-nullptr-83.patch b/www-client/chromium/files/chromium-std-nullptr-83.patch
new file mode 100644
index 0000000..a2efc76
--- /dev/null
+++ b/www-client/chromium/files/chromium-std-nullptr-83.patch
@@ -0,0 +1,22 @@
+diff --git a/third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h b/third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h
+index a6b8547f5..5fa03cb35 100644
+--- a/third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h
++++ b/third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h
+@@ -36,7 +36,7 @@ class NotShared {
+ template <typename U, std::enable_if_t<std::is_base_of<T, U>::value, int> = 0>
+ NotShared(const NotShared<U>& other) : typed_array_(other.Get()) {}
+
+- explicit NotShared(nullptr_t) {}
++ explicit NotShared(std::nullptr_t) {}
+ explicit NotShared(T* typed_array) : typed_array_(typed_array) {
+ DCHECK(!typed_array || !typed_array->IsShared());
+ }
+@@ -95,7 +95,7 @@ class MaybeShared {
+ template <typename U, std::enable_if_t<std::is_base_of<T, U>::value, int> = 0>
+ MaybeShared(const MaybeShared<U>& other) : typed_array_(other.Get()) {}
+
+- explicit MaybeShared(nullptr_t) {}
++ explicit MaybeShared(std::nullptr_t) {}
+ // [AllowShared] array buffer view may be a view of non-shared array buffer,
+ // so we don't check if the buffer is SharedArrayBuffer or not.
+ // https://heycam.github.io/webidl/#AllowShared
diff --git a/www-client/chromium/files/chromium-stdint.patch b/www-client/chromium/files/chromium-stdint.patch
new file mode 100644
index 0000000..8774439
--- /dev/null
+++ b/www-client/chromium/files/chromium-stdint.patch
@@ -0,0 +1,21 @@
+From 0235c2b657d936f3cdb09053776e5929fc84704b Mon Sep 17 00:00:00 2001
+From: Tomas Popela <tomas.popela@gmail.com>
+Date: Wed, 31 Jan 2018 18:57:07 +0000
+Subject: [PATCH] Add missing stdint include
+
+diff --git a/chrome/browser/vr/sample_queue.cc b/chrome/browser/vr/sample_queue.cc
+index c2ca777ce90c..53cb3aab1576 100644
+--- a/chrome/browser/vr/sample_queue.cc
++++ b/chrome/browser/vr/sample_queue.cc
+@@ -2,6 +2,8 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
++#include <stdint.h>
++
+ #include "chrome/browser/vr/sample_queue.h"
+
+ namespace vr {
+--
+2.16.2
+
diff --git a/www-client/chromium/files/chromium-stdset.patch b/www-client/chromium/files/chromium-stdset.patch
new file mode 100644
index 0000000..6ac0346
--- /dev/null
+++ b/www-client/chromium/files/chromium-stdset.patch
@@ -0,0 +1,13 @@
+diff --git a/components/language/core/browser/language_prefs.cc b/components/language/core/browser/language_prefs.cc
+index 317aa1d82..df258ca62 100644
+--- a/components/language/core/browser/language_prefs.cc
++++ b/components/language/core/browser/language_prefs.cc
+@@ -85,7 +85,7 @@ void LanguagePrefs::ResetEmptyFluentLanguagesToDefault() {
+ }
+
+ base::Value LanguagePrefs::GetDefaultFluentLanguages() {
+- std::set<const std::string> languages;
++ std::set<std::string> languages;
+ #if defined(OS_CHROMEOS)
+ // Preferred languages.
+ std::string language = language::kFallbackInputMethodLocale;
diff --git a/www-client/chromium/files/chromium-string_view-79.patch b/www-client/chromium/files/chromium-string_view-79.patch
new file mode 100644
index 0000000..11ad56d
--- /dev/null
+++ b/www-client/chromium/files/chromium-string_view-79.patch
@@ -0,0 +1,78 @@
+diff --git a/components/safe_browsing/browser/threat_details.cc b/components/safe_browsing/browser/threat_details.cc
+index 05bcd3ff3..5149e911d 100644
+--- a/components/safe_browsing/browser/threat_details.cc
++++ b/components/safe_browsing/browser/threat_details.cc
+@@ -8,7 +8,6 @@
+
+ #include <stddef.h>
+ #include <stdint.h>
+-#include <string_view>
+ #include <unordered_set>
+ #include <utility>
+ #include <vector>
+@@ -18,6 +17,7 @@
+ #include "base/lazy_instance.h"
+ #include "base/metrics/histogram_macros.h"
+ #include "base/stl_util.h"
++#include "base/strings/string_piece.h"
+ #include "base/strings/string_util.h"
+ #include "base/task/post_task.h"
+ #include "components/history/core/browser/history_service.h"
+@@ -312,7 +312,7 @@ void TrimElements(const std::set<int> target_ids,
+ }
+
+ void DisableBackForwardCache(content::RenderFrameHost* rfh,
+- std::string_view reason) {
++ base::StringPiece reason) {
+ content::WebContents::FromRenderFrameHost(rfh)
+ ->GetController()
+ .GetBackForwardCache()
+diff --git a/content/browser/frame_host/back_forward_cache_impl.cc b/content/browser/frame_host/back_forward_cache_impl.cc
+index a7c06949b..3c72b7e9e 100644
+--- a/content/browser/frame_host/back_forward_cache_impl.cc
++++ b/content/browser/frame_host/back_forward_cache_impl.cc
+@@ -360,7 +360,7 @@ void BackForwardCacheImpl::PostTaskToDestroyEvictedFrames() {
+ }
+
+ void BackForwardCacheImpl::DisableForRenderFrameHost(GlobalFrameRoutingId id,
+- std::string_view reason) {
++ base::StringPiece reason) {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ auto* rfh = RenderFrameHostImpl::FromID(id);
+ if (rfh)
+diff --git a/content/browser/frame_host/back_forward_cache_impl.h b/content/browser/frame_host/back_forward_cache_impl.h
+index 712594a3d..6ed6931a3 100644
+--- a/content/browser/frame_host/back_forward_cache_impl.h
++++ b/content/browser/frame_host/back_forward_cache_impl.h
+@@ -175,7 +175,7 @@ class CONTENT_EXPORT BackForwardCacheImpl : public BackForwardCache {
+
+ // BackForwardCache:
+ void DisableForRenderFrameHost(GlobalFrameRoutingId id,
+- std::string_view reason) override;
++ base::StringPiece reason) override;
+
+ private:
+ // Destroys all evicted frames in the BackForwardCache.
+diff --git a/content/public/browser/back_forward_cache.h b/content/public/browser/back_forward_cache.h
+index f7abe8bec..bb7298651 100644
+--- a/content/public/browser/back_forward_cache.h
++++ b/content/public/browser/back_forward_cache.h
+@@ -5,8 +5,7 @@
+ #ifndef CONTENT_PUBLIC_BROWSER_BACK_FORWARD_CACHE_H_
+ #define CONTENT_PUBLIC_BROWSER_BACK_FORWARD_CACHE_H_
+
+-#include <string_view>
+-
++#include "base/strings/string_piece.h"
+ #include "content/common/content_export.h"
+ #include "content/public/browser/global_routing_id.h"
+
+@@ -43,7 +42,7 @@ class CONTENT_EXPORT BackForwardCache {
+ // |id|: If no RenderFrameHost can be found for the given id nothing happens.
+ // |reason|: Free form string to be used in logging and metrics.
+ virtual void DisableForRenderFrameHost(GlobalFrameRoutingId id,
+- std::string_view reason) = 0;
++ base::StringPiece reason) = 0;
+
+ protected:
+ BackForwardCache() = default;
diff --git a/www-client/chromium/files/chromium-swiftshader-77.patch b/www-client/chromium/files/chromium-swiftshader-77.patch
new file mode 100644
index 0000000..34d5032
--- /dev/null
+++ b/www-client/chromium/files/chromium-swiftshader-77.patch
@@ -0,0 +1,53 @@
+diff --git a/third_party/swiftshader/src/OpenGL/libEGL/BUILD.gn b/third_party/swiftshader/src/OpenGL/libEGL/BUILD.gn
+index f4c826d..993ca6a 100644
+--- a/third_party/swiftshader/src/OpenGL/libEGL/BUILD.gn
++++ b/third_party/swiftshader/src/OpenGL/libEGL/BUILD.gn
+@@ -78,6 +78,9 @@
+ if (use_x11) {
+ sources += [ "../../Main/libX11.cpp" ]
+ }
++ inputs = [
++ "libEGL.lds",
++ ]
+ ldflags =
+ [ "-Wl,--version-script=" + rebase_path("libEGL.lds", root_build_dir) ]
+ }
+diff --git a/third_party/swiftshader/src/OpenGL/libGLESv2/BUILD.gn b/third_party/swiftshader/src/OpenGL/libGLESv2/BUILD.gn
+index 571b08a..d7037ca 100644
+--- a/third_party/swiftshader/src/OpenGL/libGLESv2/BUILD.gn
++++ b/third_party/swiftshader/src/OpenGL/libGLESv2/BUILD.gn
+@@ -127,6 +127,9 @@
+ if (is_mac) {
+ ldflags = [ "-Wl,-install_name,@rpath/libswiftshader_libGLESv2.dylib" ]
+ } else if (is_linux) {
++ inputs = [
++ "libGLESv2.lds",
++ ]
+ ldflags = [ "-Wl,--version-script=" +
+ rebase_path("libGLESv2.lds", root_build_dir) ]
+ }
+diff --git a/third_party/swiftshader/src/Vulkan/BUILD.gn b/third_party/swiftshader/src/Vulkan/BUILD.gn
+index 2627f03..6aeaec8 100644
+--- a/third_party/swiftshader/src/Vulkan/BUILD.gn
++++ b/third_party/swiftshader/src/Vulkan/BUILD.gn
+@@ -99,7 +99,6 @@
+ "VulkanPlatform.h",
+ "libVulkan.cpp",
+ "libvk_swiftshader.def",
+- "libvk_swiftshader.lds",
+ "main.cpp",
+ "resource.h",
+ ]
+@@ -109,8 +108,10 @@
+ output_name = "libvulkan"
+ output_dir = "$root_out_dir/swiftshader"
+
+- if (is_linux)
+- {
++ if (is_linux) {
++ inputs = [
++ "libvk_swiftshader.lds",
++ ]
+ ldflags = [ "-Wl,--version-script=" +
+ rebase_path("libvk_swiftshader.lds", root_build_dir) ]
+ }
diff --git a/www-client/chromium/files/chromium-unbundle-zlib.patch b/www-client/chromium/files/chromium-unbundle-zlib.patch
new file mode 100644
index 0000000..d6c45ad
--- /dev/null
+++ b/www-client/chromium/files/chromium-unbundle-zlib.patch
@@ -0,0 +1,25 @@
+From e1bbdec720a333937bd1b990ae0f7ee97db0d3b0 Mon Sep 17 00:00:00 2001
+From: Your Name <you@example.com>
+Date: Fri, 28 Jun 2019 15:56:23 +0000
+Subject: [PATCH] update zlib
+
+---
+ third_party/perfetto/gn/BUILD.gn | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/third_party/perfetto/gn/BUILD.gn b/third_party/perfetto/gn/BUILD.gn
+index c951f5f..297eee3 100644
+--- a/third_party/perfetto/gn/BUILD.gn
++++ b/third_party/perfetto/gn/BUILD.gn
+@@ -200,7 +200,7 @@ group("zlib") {
+ "//buildtools:zlib",
+ ]
+ } else if (build_with_chromium) {
+- public_configs = [ "//third_party/zlib:zlib_config" ]
++ public_configs = [ "//third_party/zlib:system_zlib" ]
+ public_deps = [
+ "//third_party/zlib",
+ ]
+--
+2.21.0
+
diff --git a/www-client/chromium/files/chromium-union.patch b/www-client/chromium/files/chromium-union.patch
new file mode 100644
index 0000000..be41f6d
--- /dev/null
+++ b/www-client/chromium/files/chromium-union.patch
@@ -0,0 +1,54 @@
+diff --git a/base/values.h b/base/values.h
+index 6f2cd3cc3..7f148d259 100644
+--- a/base/values.h
++++ b/base/values.h
+@@ -415,42 +415,13 @@ class BASE_EXPORT Value {
+ // of 24, without losing any information. Results are unchanged for x86,
+ // x86_64 and arm64 (16, 32 and 32 bytes respectively).
+ union {
+- struct {
+- // TODO(crbug.com/646113): Make these private once DictionaryValue and
+- // ListValue are properly inlined.
+- Type type_ : 8;
+- };
+- struct {
+- Type bool_type_ : 8;
+- bool bool_value_;
+- };
+- struct {
+- Type int_type_ : 8;
+- int int_value_;
+- };
+- struct {
+- Type double_type_ : 8;
+- // Subtle: On architectures that require it, the compiler will ensure
+- // that |double_value_|'s offset is a multiple of 8 (e.g. 32-bit ARM).
+- // See technical note above to understand why it is important.
+- double double_value_;
+- };
+- struct {
+- Type string_type_ : 8;
+- std::string string_value_;
+- };
+- struct {
+- Type binary_type_ : 8;
+- BlobStorage binary_value_;
+- };
+- struct {
+- Type dict_type_ : 8;
+- DictStorage dict_;
+- };
+- struct {
+- Type list_type_ : 8;
+- ListStorage list_;
+- };
++ bool bool_value_;
++ int int_value_;
++ double double_value_;
++ std::string string_value_;
++ BlobStorage binary_value_;
++ DictStorage dict_;
++ ListStorage list_;
+ };
+
+ private:
diff --git a/www-client/chromium/files/chromium-unique_ptr-80-r1.patch b/www-client/chromium/files/chromium-unique_ptr-80-r1.patch
new file mode 100644
index 0000000..fb377db
--- /dev/null
+++ b/www-client/chromium/files/chromium-unique_ptr-80-r1.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/renderer/core/core_initializer.h b/third_party/blink/renderer/core/core_initializer.h
+index 5e67f468f..3f6d8de03 100644
+--- a/third_party/blink/renderer/core/core_initializer.h
++++ b/third_party/blink/renderer/core/core_initializer.h
+@@ -31,6 +31,8 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CORE_INITIALIZER_H_
+ #define THIRD_PARTY_BLINK_RENDERER_CORE_CORE_INITIALIZER_H_
+
++#include <memory>
++
+ #include "base/macros.h"
+ #include "third_party/blink/public/common/dom_storage/session_storage_namespace_id.h"
+ #include "third_party/blink/renderer/core/core_export.h"
diff --git a/www-client/chromium/files/chromium-unique_ptr-80.patch b/www-client/chromium/files/chromium-unique_ptr-80.patch
new file mode 100644
index 0000000..4da5f0b
--- /dev/null
+++ b/www-client/chromium/files/chromium-unique_ptr-80.patch
@@ -0,0 +1,12 @@
+diff --git a/net/dns/address_info.h b/net/dns/address_info.h
+index 782898535..95bc277c3 100644
+--- a/net/dns/address_info.h
++++ b/net/dns/address_info.h
+@@ -5,6 +5,7 @@
+ #ifndef NET_DNS_ADDRESS_INFO_H_
+ #define NET_DNS_ADDRESS_INFO_H_
+
++#include <memory>
+ #include <string>
+ #include <tuple>
+
diff --git a/www-client/chromium/files/chromium-use-oauth2-client-switches-as-default.patch b/www-client/chromium/files/chromium-use-oauth2-client-switches-as-default.patch
new file mode 100644
index 0000000..9d9c57b
--- /dev/null
+++ b/www-client/chromium/files/chromium-use-oauth2-client-switches-as-default.patch
@@ -0,0 +1,17 @@
+diff -upr chromium-89.0.4389.58.orig/google_apis/google_api_keys.cc chromium-89.0.4389.58/google_apis/google_api_keys.cc
+--- chromium-89.0.4389.58.orig/google_apis/google_api_keys.cc 2021-02-24 22:37:18.494007649 +0000
++++ chromium-89.0.4389.58/google_apis/google_api_keys.cc 2021-02-24 22:35:00.865777600 +0000
+@@ -154,11 +154,11 @@ class APIKeyCache {
+
+ std::string default_client_id = CalculateKeyValue(
+ GOOGLE_DEFAULT_CLIENT_ID,
+- STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID), nullptr,
++ STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_ID), ::switches::kOAuth2ClientID,
+ std::string(), environment.get(), command_line, gaia_config);
+ std::string default_client_secret = CalculateKeyValue(
+ GOOGLE_DEFAULT_CLIENT_SECRET,
+- STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_SECRET), nullptr,
++ STRINGIZE_NO_EXPANSION(GOOGLE_DEFAULT_CLIENT_SECRET), ::switches::kOAuth2ClientSecret,
+ std::string(), environment.get(), command_line, gaia_config);
+
+ // We currently only allow overriding the baked-in values for the
diff --git a/www-client/chromium/files/chromium-vaapi-76-r1.patch b/www-client/chromium/files/chromium-vaapi-76-r1.patch
new file mode 100644
index 0000000..6080901
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-76-r1.patch
@@ -0,0 +1,213 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index f3759b099..11c0982ab 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1314,7 +1314,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ #if defined(OS_CHROMEOS)
+@@ -1768,12 +1768,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // ENABLE_ISOLATED_XR_SERVICE
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"v8-cache-options", flag_descriptions::kV8CacheOptionsName,
+ flag_descriptions::kV8CacheOptionsDescription, kOsAll,
+ MULTI_VALUE_TYPE(kV8CacheOptionsChoices)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index d05bc47f4..5d5c77b5e 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -2760,13 +2760,22 @@ const char kMacSystemMediaPermissionsInfoUiDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++#endif // defined(OS_CHROMEOS) defined(OS_LINUX) and !defined(OS_ANDROID)
++
++#if defined(OS_CHROMEOS)
+
+ const char kAppServiceAshName[] = "App Service Ash";
+ const char kAppServiceAshDescription[] =
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index aef7105e3..149c5c034 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1650,11 +1650,17 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
+ extern const char kAppServiceAshName[];
+ extern const char kAppServiceAshDescription[];
+
+diff --git a/components/viz/service/main/viz_main_impl.cc b/components/viz/service/main/viz_main_impl.cc
+index 53292ae76..d5007860c 100644
+--- a/components/viz/service/main/viz_main_impl.cc
++++ b/components/viz/service/main/viz_main_impl.cc
+@@ -36,7 +36,7 @@ std::unique_ptr<base::Thread> CreateAndStartIOThread() {
+ // It should be possible to use |main_task_runner_| for doing IO tasks.
+ base::Thread::Options thread_options(base::MessageLoop::TYPE_IO, 0);
+ thread_options.priority = base::ThreadPriority::NORMAL;
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ // TODO(reveman): Remove this in favor of setting it explicitly for each
+ // type of process.
+ thread_options.priority = base::ThreadPriority::DISPLAY;
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 2b1165264..fec963bd9 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -127,4 +128,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
+index a838f0ccf..4c891fb92 100644
+--- a/content/gpu/gpu_main.cc
++++ b/content/gpu/gpu_main.cc
+@@ -288,7 +288,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ base::PlatformThread::SetName("CrGpuMain");
+
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ // Set thread priority before sandbox initialization.
+ base::PlatformThread::SetCurrentThreadPriority(base::ThreadPriority::DISPLAY);
+ #endif
+@@ -321,7 +321,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+ GetContentClient()->SetGpuInfo(gpu_init->gpu_info());
+
+ base::ThreadPriority io_thread_priority = base::ThreadPriority::NORMAL;
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ io_thread_priority = base::ThreadPriority::DISPLAY;
+ #endif
+
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index 0042a3457..efe1b3f4d 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -369,17 +369,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index 2e364d0cf..728cab164 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -520,7 +520,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn
+index 1324da986..b4d235f50 100644
+--- a/media/filters/BUILD.gn
++++ b/media/filters/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("//build/config/jumbo.gni")
+ import("//media/media_options.gni")
+ import("//third_party/libaom/options.gni")
++import("//media/gpu/args.gni")
+
+ jumbo_source_set("filters") {
+ # Do not expand the visibility here without double-checking with OWNERS, this
+@@ -207,7 +208,7 @@ jumbo_source_set("filters") {
+ deps += [ "//media/base/android" ]
+ }
+
+- if (current_cpu != "arm" && is_linux) {
++ if (use_vaapi && is_linux) {
+ sources += [
+ "h264_bitstream_buffer.cc",
+ "h264_bitstream_buffer.h",
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index 2020a4c23..af61e3e75 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -499,9 +499,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media:test_support" ]
+ testonly = true
diff --git a/www-client/chromium/files/chromium-vaapi-76.patch b/www-client/chromium/files/chromium-vaapi-76.patch
new file mode 100644
index 0000000..6b9c372
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-76.patch
@@ -0,0 +1,218 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index e727a7633..321ec6374 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1344,7 +1344,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ #if defined(OS_WIN)
+@@ -1840,12 +1840,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // ENABLE_ISOLATED_XR_SERVICE
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"v8-cache-options", flag_descriptions::kV8CacheOptionsName,
+ flag_descriptions::kV8CacheOptionsDescription, kOsAll,
+ MULTI_VALUE_TYPE(kV8CacheOptionsChoices)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index e935e0fd6..3225adb3b 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -2873,13 +2873,22 @@ const char kMacSystemMediaPermissionsInfoUiDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++#endif // defined(OS_CHROMEOS) defined(OS_LINUX) and !defined(OS_ANDROID)
++
++#if defined(OS_CHROMEOS)
+
+ const char kAppServiceAshName[] = "App Service Ash";
+ const char kAppServiceAshDescription[] =
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index 8450a5b76..80b68b724 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1723,11 +1723,17 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
+ extern const char kAppServiceAshName[];
+ extern const char kAppServiceAshDescription[];
+
+diff --git a/components/viz/service/main/viz_main_impl.cc b/components/viz/service/main/viz_main_impl.cc
+index a5a38f8ec..7a110c4f9 100644
+--- a/components/viz/service/main/viz_main_impl.cc
++++ b/components/viz/service/main/viz_main_impl.cc
+@@ -36,7 +36,7 @@ std::unique_ptr<base::Thread> CreateAndStartIOThread() {
+ // It should be possible to use |main_task_runner_| for doing IO tasks.
+ base::Thread::Options thread_options(base::MessageLoop::TYPE_IO, 0);
+ thread_options.priority = base::ThreadPriority::NORMAL;
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ // TODO(reveman): Remove this in favor of setting it explicitly for each
+ // type of process.
+ thread_options.priority = base::ThreadPriority::DISPLAY;
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 2b1165264..fec963bd9 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -127,4 +128,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
+index a838f0ccf..4c891fb92 100644
+--- a/content/gpu/gpu_main.cc
++++ b/content/gpu/gpu_main.cc
+@@ -288,7 +288,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ base::PlatformThread::SetName("CrGpuMain");
+
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ // Set thread priority before sandbox initialization.
+ base::PlatformThread::SetCurrentThreadPriority(base::ThreadPriority::DISPLAY);
+ #endif
+@@ -321,7 +321,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+ GetContentClient()->SetGpuInfo(gpu_init->gpu_info());
+
+ base::ThreadPriority io_thread_priority = base::ThreadPriority::NORMAL;
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ io_thread_priority = base::ThreadPriority::DISPLAY;
+ #endif
+
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index d4c3b4364..935fdeb86 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -369,17 +369,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index a8b11a3b9..a6ac202f9 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -509,7 +509,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn
+index 4fac91144..7086ada95 100644
+--- a/media/filters/BUILD.gn
++++ b/media/filters/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("//build/config/jumbo.gni")
+ import("//media/media_options.gni")
+ import("//third_party/libaom/options.gni")
++import("//media/gpu/args.gni")
+
+ jumbo_source_set("filters") {
+ # Do not expand the visibility here without double-checking with OWNERS, this
+@@ -211,7 +212,7 @@ jumbo_source_set("filters") {
+ deps += [ "//media/base/android" ]
+ }
+
+- if (current_cpu != "arm" && is_linux) {
++ if (use_vaapi && is_linux) {
+ sources += [
+ "h264_bitstream_buffer.cc",
+ "h264_bitstream_buffer.h",
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index 6eed6db69..ffd81b968 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -510,6 +510,13 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
++
+ if (use_v4l2_codec || use_vaapi) {
+ test("jpeg_encode_accelerator_unittest") {
+ deps = [
+@@ -580,6 +587,7 @@ if (is_chromeos || is_linux) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
diff --git a/www-client/chromium/files/chromium-vaapi-77.patch b/www-client/chromium/files/chromium-vaapi-77.patch
new file mode 100644
index 0000000..01ad8c5
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-77.patch
@@ -0,0 +1,213 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index b6747f0d7..5c8a4d3e1 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1420,7 +1420,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ {
+@@ -1867,12 +1867,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // ENABLE_ISOLATED_XR_SERVICE
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 8573fb58f..ece9a30ea 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -2791,13 +2791,22 @@ const char kMacSystemMediaPermissionsInfoUiDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++#endif // defined(OS_CHROMEOS) defined(OS_LINUX) and !defined(OS_ANDROID)
++
++#if defined(OS_CHROMEOS)
+
+ const char kAppServiceAshName[] = "App Service Ash";
+ const char kAppServiceAshDescription[] =
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index f21e223fc..f9527ea64 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1661,11 +1661,17 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
+ extern const char kAppServiceAshName[];
+ extern const char kAppServiceAshDescription[];
+
+diff --git a/components/viz/service/main/viz_main_impl.cc b/components/viz/service/main/viz_main_impl.cc
+index 53292ae76..d5007860c 100644
+--- a/components/viz/service/main/viz_main_impl.cc
++++ b/components/viz/service/main/viz_main_impl.cc
+@@ -36,7 +36,7 @@ std::unique_ptr<base::Thread> CreateAndStartIOThread() {
+ // It should be possible to use |main_task_runner_| for doing IO tasks.
+ base::Thread::Options thread_options(base::MessageLoop::TYPE_IO, 0);
+ thread_options.priority = base::ThreadPriority::NORMAL;
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ // TODO(reveman): Remove this in favor of setting it explicitly for each
+ // type of process.
+ thread_options.priority = base::ThreadPriority::DISPLAY;
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 29e78fec4..0ab429013 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -128,4 +129,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
+index bf47f4738..73a8b2daa 100644
+--- a/content/gpu/gpu_main.cc
++++ b/content/gpu/gpu_main.cc
+@@ -294,7 +294,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ base::PlatformThread::SetName("CrGpuMain");
+
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ // Set thread priority before sandbox initialization.
+ base::PlatformThread::SetCurrentThreadPriority(base::ThreadPriority::DISPLAY);
+ #endif
+@@ -327,7 +327,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+ GetContentClient()->SetGpuInfo(gpu_init->gpu_info());
+
+ base::ThreadPriority io_thread_priority = base::ThreadPriority::NORMAL;
+-#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE)
++#if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(USE_OZONE) || defined(OS_LINUX)
+ io_thread_priority = base::ThreadPriority::DISPLAY;
+ #endif
+
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index 03e251547..9eb0f1148 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -368,17 +368,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index 4652a24f4..4e5259a9e 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -528,7 +528,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn
+index 13d433354..8d89253fb 100644
+--- a/media/filters/BUILD.gn
++++ b/media/filters/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("//build/config/jumbo.gni")
+ import("//media/media_options.gni")
+ import("//third_party/libaom/options.gni")
++import("//media/gpu/args.gni")
+
+ jumbo_source_set("filters") {
+ # Do not expand the visibility here without double-checking with OWNERS, this
+@@ -196,7 +197,7 @@ jumbo_source_set("filters") {
+ deps += [ "//media/base/android" ]
+ }
+
+- if (current_cpu != "arm" && is_linux) {
++ if (use_vaapi && is_linux) {
+ sources += [
+ "h264_bitstream_buffer.cc",
+ "h264_bitstream_buffer.h",
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index b3f43cd64..1d4a432fd 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -521,9 +521,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media:test_support" ]
+ testonly = true
diff --git a/www-client/chromium/files/chromium-vaapi-78-r1.patch b/www-client/chromium/files/chromium-vaapi-78-r1.patch
new file mode 100644
index 0000000..8e9aeb4
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-78-r1.patch
@@ -0,0 +1,220 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index ce15485ef..097b757dd 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1704,7 +1704,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ {
+@@ -2184,12 +2184,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // !defined(OS_ANDROID)
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 87d4934a5..2f4842e2e 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -3049,7 +3049,7 @@ const char kMacSystemMediaPermissionsInfoUiDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+@@ -3057,6 +3057,21 @@ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
+
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++const char kVaapiWebPImageDecodeAccelerationName[] =
++ "VA-API WebP decode acceleration for images";
++const char kVaapiWebPImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of WebP images using the VA-API.";
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ const char kAggregatedMlAppRankingName[] = "Rank suggested apps with ML.";
+ const char kAggregatedMlAppRankingDescription[] =
+ "Use the aggregated ML model to rank the suggested apps.";
+@@ -3577,17 +3592,6 @@ const char kUsbguardDescription[] =
+ " until Chrome OS is unlocked to protect against malicious USB devices."
+ " Already connected USB devices will continue to function.";
+
+-const char kVaapiJpegImageDecodeAccelerationName[] =
+- "VA-API JPEG decode acceleration for images";
+-const char kVaapiJpegImageDecodeAccelerationDescription[] =
+- "Enable or disable decode acceleration of JPEG images (as opposed to camera"
+- " captures) using the VA-API.";
+-
+-const char kVaapiWebPImageDecodeAccelerationName[] =
+- "VA-API WebP decode acceleration for images";
+-const char kVaapiWebPImageDecodeAccelerationDescription[] =
+- "Enable or disable decode acceleration of WebP images using the VA-API.";
+-
+ const char kVirtualKeyboardName[] = "Virtual Keyboard";
+ const char kVirtualKeyboardDescription[] = "Enable virtual keyboard support.";
+
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index 1b73f5985..61d965e7d 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1812,11 +1812,21 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++extern const char kVaapiWebPImageDecodeAccelerationName[];
++extern const char kVaapiWebPImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ extern const char kAggregatedMlAppRankingName[];
+ extern const char kAggregatedMlAppRankingDescription[];
+
+@@ -2144,12 +2154,6 @@ extern const char kUsbguardDescription[];
+ extern const char kUseMonitorColorSpaceName[];
+ extern const char kUseMonitorColorSpaceDescription[];
+
+-extern const char kVaapiJpegImageDecodeAccelerationName[];
+-extern const char kVaapiJpegImageDecodeAccelerationDescription[];
+-
+-extern const char kVaapiWebPImageDecodeAccelerationName[];
+-extern const char kVaapiWebPImageDecodeAccelerationDescription[];
+-
+ extern const char kVirtualKeyboardName[];
+ extern const char kVirtualKeyboardDescription[];
+
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 0939d25cc..69f31c724 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -128,4 +129,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index ea1294e4c..5ba052ec6 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -332,17 +332,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index 08c606b39..0ac5dce80 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -582,7 +582,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn
+index ac554920d..e10321d88 100644
+--- a/media/filters/BUILD.gn
++++ b/media/filters/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("//build/config/jumbo.gni")
+ import("//media/media_options.gni")
+ import("//third_party/libaom/options.gni")
++import("//media/gpu/args.gni")
+
+ jumbo_source_set("filters") {
+ # Do not expand the visibility here without double-checking with OWNERS, this
+@@ -196,7 +197,7 @@ jumbo_source_set("filters") {
+ deps += [ "//media/base/android" ]
+ }
+
+- if (current_cpu != "arm" && is_linux) {
++ if (use_vaapi && is_linux) {
+ sources += [
+ "h264_bitstream_buffer.cc",
+ "h264_bitstream_buffer.h",
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index 85cb6c363..95ae2bb1e 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -525,9 +525,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media:test_support" ]
+ testonly = true
diff --git a/www-client/chromium/files/chromium-vaapi-78.patch b/www-client/chromium/files/chromium-vaapi-78.patch
new file mode 100644
index 0000000..8525792
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-78.patch
@@ -0,0 +1,178 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index 1f68539de..e739ed7e0 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1605,7 +1605,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ {
+@@ -2075,12 +2075,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // !defined(OS_ANDROID)
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 81b32eb3e..0b3396198 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -2919,13 +2919,22 @@ const char kMacSystemMediaPermissionsInfoUiDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++#endif // defined(OS_CHROMEOS) defined(OS_LINUX) and !defined(OS_ANDROID)
++
++#if defined(OS_CHROMEOS)
+
+ const char kAppServiceAshName[] = "App Service Ash";
+ const char kAppServiceAshDescription[] =
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index e079d7aa2..761d28974 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1733,11 +1733,17 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
+ extern const char kAppServiceAshName[];
+ extern const char kAppServiceAshDescription[];
+
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 0939d25cc..69f31c724 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -128,4 +129,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index 9def82b55..1f5a03ea0 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -368,17 +368,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index 37f1a2380..d21c59439 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -550,7 +550,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn
+index f33ca5866..70736d7fc 100644
+--- a/media/filters/BUILD.gn
++++ b/media/filters/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("//build/config/jumbo.gni")
+ import("//media/media_options.gni")
+ import("//third_party/libaom/options.gni")
++import("//media/gpu/args.gni")
+
+ jumbo_source_set("filters") {
+ # Do not expand the visibility here without double-checking with OWNERS, this
+@@ -196,7 +197,7 @@ jumbo_source_set("filters") {
+ deps += [ "//media/base/android" ]
+ }
+
+- if (current_cpu != "arm" && is_linux) {
++ if (use_vaapi && is_linux) {
+ sources += [
+ "h264_bitstream_buffer.cc",
+ "h264_bitstream_buffer.h",
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index eec3b7fc7..aa27959b1 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -533,9 +533,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media:test_support" ]
+ testonly = true
diff --git a/www-client/chromium/files/chromium-vaapi-79.patch b/www-client/chromium/files/chromium-vaapi-79.patch
new file mode 100644
index 0000000..dc2c1ee
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-79.patch
@@ -0,0 +1,220 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index 2a4ca2365..a657df74d 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1747,7 +1747,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ {
+@@ -2219,12 +2219,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // !defined(OS_ANDROID)
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 929544e4f..be0884a73 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -3080,7 +3080,7 @@ const char kMacSystemMediaPermissionsInfoUiDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+@@ -3088,6 +3088,21 @@ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
+
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++const char kVaapiWebPImageDecodeAccelerationName[] =
++ "VA-API WebP decode acceleration for images";
++const char kVaapiWebPImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of WebP images using the VA-API.";
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ const char kAggregatedMlAppRankingName[] = "Rank suggested apps with ML.";
+ const char kAggregatedMlAppRankingDescription[] =
+ "Use the aggregated ML model to rank the suggested apps.";
+@@ -3618,17 +3633,6 @@ const char kUsbguardDescription[] =
+ " until Chrome OS is unlocked to protect against malicious USB devices."
+ " Already connected USB devices will continue to function.";
+
+-const char kVaapiJpegImageDecodeAccelerationName[] =
+- "VA-API JPEG decode acceleration for images";
+-const char kVaapiJpegImageDecodeAccelerationDescription[] =
+- "Enable or disable decode acceleration of JPEG images (as opposed to camera"
+- " captures) using the VA-API.";
+-
+-const char kVaapiWebPImageDecodeAccelerationName[] =
+- "VA-API WebP decode acceleration for images";
+-const char kVaapiWebPImageDecodeAccelerationDescription[] =
+- "Enable or disable decode acceleration of WebP images using the VA-API.";
+-
+ const char kVirtualKeyboardName[] = "Virtual Keyboard";
+ const char kVirtualKeyboardDescription[] = "Enable virtual keyboard support.";
+
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index dc9450374..93fc6f14f 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1822,11 +1822,21 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++extern const char kVaapiWebPImageDecodeAccelerationName[];
++extern const char kVaapiWebPImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ extern const char kAggregatedMlAppRankingName[];
+ extern const char kAggregatedMlAppRankingDescription[];
+
+@@ -2160,12 +2170,6 @@ extern const char kUseFakeDeviceForMediaStreamDescription[];
+ extern const char kUseMonitorColorSpaceName[];
+ extern const char kUseMonitorColorSpaceDescription[];
+
+-extern const char kVaapiJpegImageDecodeAccelerationName[];
+-extern const char kVaapiJpegImageDecodeAccelerationDescription[];
+-
+-extern const char kVaapiWebPImageDecodeAccelerationName[];
+-extern const char kVaapiWebPImageDecodeAccelerationDescription[];
+-
+ extern const char kVirtualKeyboardName[];
+ extern const char kVirtualKeyboardDescription[];
+
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 0939d25cc..69f31c724 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -128,4 +129,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index ea1294e4c..5ba052ec6 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -332,17 +332,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index e7b6efa18..2a3ad90ae 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -612,7 +612,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn
+index 481216a18..bde7319e6 100644
+--- a/media/filters/BUILD.gn
++++ b/media/filters/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("//build/config/jumbo.gni")
+ import("//media/media_options.gni")
+ import("//third_party/libaom/options.gni")
++import("//media/gpu/args.gni")
+
+ jumbo_source_set("filters") {
+ # Do not expand the visibility here without double-checking with OWNERS, this
+@@ -196,7 +197,7 @@ jumbo_source_set("filters") {
+ deps += [ "//media/base/android" ]
+ }
+
+- if (current_cpu != "arm" && is_linux) {
++ if (use_vaapi && is_linux) {
+ sources += [
+ "h264_bitstream_buffer.cc",
+ "h264_bitstream_buffer.h",
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index c290ec2ef..1c06865b8 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -530,9 +530,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media/gpu/*" ]
+ testonly = true
diff --git a/www-client/chromium/files/chromium-vaapi-80.patch b/www-client/chromium/files/chromium-vaapi-80.patch
new file mode 100644
index 0000000..d9982dd
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-80.patch
@@ -0,0 +1,168 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index f9ddeca39..a581bca3d 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1754,7 +1754,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ {
+@@ -2228,12 +2228,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // !defined(OS_ANDROID)
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 90a193991..87d1eedac 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -3132,7 +3132,7 @@ const char kMetalDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+@@ -3140,6 +3140,21 @@ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
+
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++const char kVaapiWebPImageDecodeAccelerationName[] =
++ "VA-API WebP decode acceleration for images";
++const char kVaapiWebPImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of WebP images using the VA-API.";
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ const char kAggregatedMlAppRankingName[] = "Rank suggested apps with ML.";
+ const char kAggregatedMlAppRankingDescription[] =
+ "Use the aggregated ML model to rank the suggested apps.";
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index 4d7349337..ea4838826 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1847,11 +1847,21 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++extern const char kVaapiWebPImageDecodeAccelerationName[];
++extern const char kVaapiWebPImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ extern const char kAggregatedMlAppRankingName[];
+ extern const char kAggregatedMlAppRankingDescription[];
+
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index fde557cc3..b150ccbad 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -129,4 +130,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index c1da1d8b7..bd83de134 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -332,17 +332,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index 981cb7a08..33f3e8312 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -632,7 +632,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index 875c3515a..db52819f9 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -456,9 +456,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media/gpu/*" ]
+ testonly = true
diff --git a/www-client/chromium/files/chromium-vaapi-81.patch b/www-client/chromium/files/chromium-vaapi-81.patch
new file mode 100644
index 0000000..aac31c0
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-81.patch
@@ -0,0 +1,181 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index 54c97b37d..8a72db3ab 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1846,7 +1846,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ {
+@@ -2307,12 +2307,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // !defined(OS_ANDROID)
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 5c2b3f3fa..67edf526e 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -3172,7 +3172,7 @@ const char kMetalDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+@@ -3180,6 +3180,21 @@ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
+
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++const char kVaapiWebPImageDecodeAccelerationName[] =
++ "VA-API WebP decode acceleration for images";
++const char kVaapiWebPImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of WebP images using the VA-API.";
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ const char kAggregatedMlAppRankingName[] = "Rank suggested apps with ML.";
+ const char kAggregatedMlAppRankingDescription[] =
+ "Use the aggregated ML model to rank the suggested apps.";
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index 384a7bed3..719b1fce5 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1872,11 +1872,21 @@ extern const char kPermissionPromptPersistenceToggleDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++extern const char kVaapiWebPImageDecodeAccelerationName[];
++extern const char kVaapiWebPImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ extern const char kAggregatedMlAppRankingName[];
+ extern const char kAggregatedMlAppRankingDescription[];
+
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index d777b767b..34df35560 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -134,4 +135,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index 837bb8dd2..36c79fe83 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -332,17 +332,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247],
+- "os": {
+- "type": "linux"
+- },
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index d089b3975..2c8c2b885 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -653,7 +653,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index 76514826b..080a1d2ee 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -455,9 +455,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media/gpu/*" ]
+ testonly = true
+diff --git a/media/gpu/test/BUILD.gn b/media/gpu/test/BUILD.gn
+index 21ff52759..9f3232a1b 100644
+--- a/media/gpu/test/BUILD.gn
++++ b/media/gpu/test/BUILD.gn
+@@ -158,7 +158,7 @@ if (use_vaapi || use_v4l2_codec) {
+ }
+ }
+
+-if (is_chromeos) {
++if (is_chromeos || is_linux) {
+ static_library("local_gpu_memory_buffer_manager") {
+ testonly = true
+ sources = [
diff --git a/www-client/chromium/files/chromium-vaapi-82.patch b/www-client/chromium/files/chromium-vaapi-82.patch
new file mode 100644
index 0000000..18115e3
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-82.patch
@@ -0,0 +1,186 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index 77785e7a8..303f8c9f7 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -1957,7 +1957,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ {
+@@ -2390,12 +2390,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(service_manager::features::kXRSandbox)},
+ #endif // !defined(OS_ANDROID)
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 3a5ea1399..f92d626fa 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -2995,7 +2995,7 @@ const char kMetalDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+@@ -3003,6 +3003,21 @@ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
+
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++const char kVaapiWebPImageDecodeAccelerationName[] =
++ "VA-API WebP decode acceleration for images";
++const char kVaapiWebPImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of WebP images using the VA-API.";
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ const char kAggregatedMlAppRankingName[] = "Rank suggested apps with ML.";
+ const char kAggregatedMlAppRankingDescription[] =
+ "Use the aggregated ML model to rank the suggested apps.";
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index a3c3bf194..8e0730dbd 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1724,11 +1724,21 @@ extern const char kMetalDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++extern const char kVaapiWebPImageDecodeAccelerationName[];
++extern const char kVaapiWebPImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ extern const char kAggregatedMlAppRankingName[];
+ extern const char kAggregatedMlAppRankingDescription[];
+
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 088c791f0..464cf018c 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -131,4 +132,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index 22712bdbf..a06dd19a5 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -335,22 +335,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247, 1032907],
+- "os": {
+- "type": "linux"
+- },
+- "exceptions": [
+- {
+- "machine_model_name": ["Chromecast"]
+- }
+- ],
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index 4b271023c..94b0d8c79 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -693,7 +693,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index 13443f3d3..195208fed 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -451,9 +451,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media/gpu/*" ]
+ testonly = true
+diff --git a/media/gpu/test/BUILD.gn b/media/gpu/test/BUILD.gn
+index 8d1275a43..71e5c9dca 100644
+--- a/media/gpu/test/BUILD.gn
++++ b/media/gpu/test/BUILD.gn
+@@ -152,7 +152,7 @@ if (use_vaapi || use_v4l2_codec) {
+ }
+ }
+
+-if (is_chromeos) {
++if (is_chromeos || is_linux) {
+ static_library("local_gpu_memory_buffer_manager") {
+ testonly = true
+ sources = [
diff --git a/www-client/chromium/files/chromium-vaapi-83.patch b/www-client/chromium/files/chromium-vaapi-83.patch
new file mode 100644
index 0000000..d614b94
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-83.patch
@@ -0,0 +1,186 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index 0524711d0..0477b7bbd 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -2092,7 +2092,7 @@ const FeatureEntry kFeatureEntries[] = {
+ "disable-accelerated-video-decode",
+ flag_descriptions::kAcceleratedVideoDecodeName,
+ flag_descriptions::kAcceleratedVideoDecodeDescription,
+- kOsMac | kOsWin | kOsCrOS | kOsAndroid,
++ kOsMac | kOsWin | kOsCrOS | kOsAndroid | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
+ },
+ {
+@@ -2514,12 +2514,12 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kWebXrForceRuntimeDescription, kOsDesktop,
+ MULTI_VALUE_TYPE(kWebXrForceRuntimeChoices)},
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index 834232048..a77b963af 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -2954,7 +2954,7 @@ const char kMetalDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+@@ -2962,6 +2962,21 @@ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
+
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++const char kVaapiWebPImageDecodeAccelerationName[] =
++ "VA-API WebP decode acceleration for images";
++const char kVaapiWebPImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of WebP images using the VA-API.";
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ const char kAggregatedMlAppRankingName[] = "Rank suggested apps with ML.";
+ const char kAggregatedMlAppRankingDescription[] =
+ "Use the aggregated ML model to rank the suggested apps.";
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index f497d6197..5762ce62e 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -1696,11 +1696,21 @@ extern const char kMetalDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++extern const char kVaapiWebPImageDecodeAccelerationName[];
++extern const char kVaapiWebPImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ extern const char kAggregatedMlAppRankingName[];
+ extern const char kAggregatedMlAppRankingDescription[];
+
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 64ebb18c5..682b4ffeb 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -6,6 +6,7 @@ import("//build/config/jumbo.gni")
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -133,4 +134,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json
+index 7eefd9966..747971b46 100644
+--- a/gpu/config/software_rendering_list.json
++++ b/gpu/config/software_rendering_list.json
+@@ -335,22 +335,6 @@
+ "all"
+ ]
+ },
+- {
+- "id": 48,
+- "description": "Accelerated video decode is unavailable on Linux",
+- "cr_bugs": [137247, 1032907],
+- "os": {
+- "type": "linux"
+- },
+- "exceptions": [
+- {
+- "machine_model_name": ["Chromecast"]
+- }
+- ],
+- "features": [
+- "accelerated_video_decode"
+- ]
+- },
+ {
+ "id": 50,
+ "description": "Disable VMware software renderer on older Mesa",
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index bc7f518ae..eed869232 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -714,7 +714,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index be9406674..95782e01a 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -457,9 +457,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media/gpu/*" ]
+ testonly = true
+diff --git a/media/gpu/test/BUILD.gn b/media/gpu/test/BUILD.gn
+index 5dd95ec1f..3dd7a1a20 100644
+--- a/media/gpu/test/BUILD.gn
++++ b/media/gpu/test/BUILD.gn
+@@ -182,7 +182,7 @@ if (use_vaapi || use_v4l2_codec) {
+ }
+ }
+
+-if (is_chromeos) {
++if (is_chromeos || is_linux) {
+ static_library("local_gpu_memory_buffer_manager") {
+ testonly = true
+ sources = [
diff --git a/www-client/chromium/files/chromium-vaapi-87.patch b/www-client/chromium/files/chromium-vaapi-87.patch
new file mode 100644
index 0000000..508a2f4
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-87.patch
@@ -0,0 +1,137 @@
+diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
+index 78eedbcbf..eda2d0c48 100644
+--- a/chrome/browser/about_flags.cc
++++ b/chrome/browser/about_flags.cc
+@@ -3150,12 +3150,12 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kWebXrForceRuntimeDescription, kOsDesktop,
+ MULTI_VALUE_TYPE(kWebXrForceRuntimeChoices)},
+ #endif // ENABLE_VR
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ {"disable-accelerated-mjpeg-decode",
+ flag_descriptions::kAcceleratedMjpegDecodeName,
+- flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
++ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS | kOsLinux,
+ SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
+-#endif // OS_CHROMEOS
++#endif // OS_CHROMEOS OS_LINUX
+ {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
+ flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
+diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
+index e4f4cf856..d448035db 100644
+--- a/chrome/browser/flag_descriptions.cc
++++ b/chrome/browser/flag_descriptions.cc
+@@ -3542,7 +3542,7 @@ const char kVideoToolboxVp9DecodingDescription[] =
+
+ // Chrome OS -------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ const char kAcceleratedMjpegDecodeName[] =
+ "Hardware-accelerated mjpeg decode for captured frame";
+@@ -3550,6 +3550,21 @@ const char kAcceleratedMjpegDecodeDescription[] =
+ "Enable hardware-accelerated mjpeg decode for captured frame where "
+ "available.";
+
++const char kVaapiJpegImageDecodeAccelerationName[] =
++ "VA-API JPEG decode acceleration for images";
++const char kVaapiJpegImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of JPEG images (as opposed to camera"
++ " captures) using the VA-API.";
++
++const char kVaapiWebPImageDecodeAccelerationName[] =
++ "VA-API WebP decode acceleration for images";
++const char kVaapiWebPImageDecodeAccelerationDescription[] =
++ "Enable or disable decode acceleration of WebP images using the VA-API.";
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ const char kAggregatedMlAppRankingName[] = "Rank suggested apps with ML.";
+ const char kAggregatedMlAppRankingDescription[] =
+ "Use the aggregated ML model to rank the suggested apps.";
+diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
+index a8a80f118..beddafe6f 100644
+--- a/chrome/browser/flag_descriptions.h
++++ b/chrome/browser/flag_descriptions.h
+@@ -2041,11 +2041,21 @@ extern const char kVideoToolboxVp9DecodingDescription[];
+
+ // Chrome OS ------------------------------------------------------------------
+
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID))
+
+ extern const char kAcceleratedMjpegDecodeName[];
+ extern const char kAcceleratedMjpegDecodeDescription[];
+
++extern const char kVaapiJpegImageDecodeAccelerationName[];
++extern const char kVaapiJpegImageDecodeAccelerationDescription[];
++
++extern const char kVaapiWebPImageDecodeAccelerationName[];
++extern const char kVaapiWebPImageDecodeAccelerationDescription[];
++
++#endif
++
++#if defined(OS_CHROMEOS)
++
+ extern const char kAggregatedMlAppRankingName[];
+ extern const char kAggregatedMlAppRankingDescription[];
+
+diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
+index 747df62b1..eb973a881 100644
+--- a/content/gpu/BUILD.gn
++++ b/content/gpu/BUILD.gn
+@@ -5,6 +5,7 @@
+ import("//build/config/ui.gni")
+ import("//gpu/vulkan/features.gni")
+ import("//media/media_options.gni")
++import("//media/gpu/args.gni")
+ import("//ui/ozone/ozone.gni")
+
+ # See //content/BUILD.gn for how this works.
+@@ -128,4 +129,8 @@ target(link_target_type, "gpu_sources") {
+ (!is_chromecast || is_cast_desktop_build)) {
+ configs += [ "//build/config/linux/dri" ]
+ }
++ # Use vaapi on desktop Linux builds when use_vaapi is set
++ if (is_desktop_linux && use_vaapi) {
++ public_configs = [ "//media/gpu:libva_config" ]
++ }
+ }
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+index d9cf7349d..03d6ba73f 100644
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -792,7 +792,7 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
+ switches::kUseFakeMjpegDecodeAccelerator)) {
+ return true;
+ }
+-#if defined(OS_CHROMEOS)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX)
+ return true;
+ #endif
+ return false;
+diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
+index e3d961939..4e2963f9f 100644
+--- a/media/gpu/BUILD.gn
++++ b/media/gpu/BUILD.gn
+@@ -462,9 +462,16 @@ if (use_v4l2_codec || use_vaapi || is_mac || is_win) {
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
++ public_configs = [ ":libva_config" ]
+ }
+ }
+
++import("//build/config/linux/pkg_config.gni")
++
++pkg_config("libva_config") {
++ packages = [ "libva" ]
++}
++
+ static_library("test_support") {
+ visibility = [ "//media/gpu/*" ]
+ testonly = true
diff --git a/www-client/chromium/files/chromium-vaapi-fix-87.patch b/www-client/chromium/files/chromium-vaapi-fix-87.patch
new file mode 100644
index 0000000..231434b
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-fix-87.patch
@@ -0,0 +1,200 @@
+diff --git a/media/gpu/vaapi/vaapi_picture_native_pixmap_angle.cc b/media/gpu/vaapi/vaapi_picture_native_pixmap_angle.cc
+index 843cf226e..af0389503 100644
+--- a/media/gpu/vaapi/vaapi_picture_native_pixmap_angle.cc
++++ b/media/gpu/vaapi/vaapi_picture_native_pixmap_angle.cc
+@@ -7,6 +7,8 @@
+ #include "media/gpu/vaapi/va_surface.h"
+ #include "media/gpu/vaapi/vaapi_wrapper.h"
+ #include "ui/base/ui_base_features.h"
++#include "ui/gfx/x/connection.h"
++#include "ui/gfx/x/xproto.h"
+ #include "ui/gl/gl_bindings.h"
+ #include "ui/gl/gl_image_egl_pixmap.h"
+ #include "ui/gl/scoped_binders.h"
+@@ -15,25 +17,31 @@ namespace media {
+
+ namespace {
+
+-inline Pixmap CreatePixmap(const gfx::Size& size) {
+- auto* display = gfx::GetXDisplay();
+- if (!display)
+- return 0;
++inline ::Pixmap CreatePixmap(const gfx::Size& size) {
++ auto* connection = x11::Connection::Get();
++ if (!connection->Ready())
++ return base::strict_cast<::Pixmap>(x11::Pixmap::None);
+
+- int screen = DefaultScreen(display);
+- auto root = XRootWindow(display, screen);
+- if (root == BadValue)
+- return 0;
++ auto root = connection->default_root();
+
+- XWindowAttributes win_attr = {};
+- // returns 0 on failure, see:
+- // https://tronche.com/gui/x/xlib/introduction/errors.html#Status
+- if (!XGetWindowAttributes(display, root, &win_attr))
+- return 0;
++ uint8_t depth = 0;
++ if (auto reply = connection->GetGeometry({root}).Sync())
++ depth = reply->depth;
++ else
++ return base::strict_cast<::Pixmap>(x11::Pixmap::None);
+
+ // TODO(tmathmeyer) should we use the depth from libva instead of root window?
+- return XCreatePixmap(display, root, size.width(), size.height(),
+- win_attr.depth);
++ auto pixmap = connection->GenerateId<x11::Pixmap>();
++ uint16_t pixmap_width, pixmap_height;
++ if (!base::CheckedNumeric<int>(size.width()).AssignIfValid(&pixmap_width) ||
++ !base::CheckedNumeric<int>(size.height()).AssignIfValid(&pixmap_height)) {
++ return base::strict_cast<::Pixmap>(x11::Pixmap::None);
++ }
++ auto req = connection->CreatePixmap(
++ {depth, pixmap, root, pixmap_width, pixmap_height});
++ if (req.Sync().error)
++ pixmap = x11::Pixmap::None;
++ return base::strict_cast<::Pixmap>(pixmap);
+ }
+
+ } // namespace
+@@ -71,11 +79,8 @@ VaapiPictureNativePixmapAngle::~VaapiPictureNativePixmapAngle() {
+ DCHECK_EQ(glGetError(), static_cast<GLenum>(GL_NO_ERROR));
+ }
+
+- if (x_pixmap_) {
+- if (auto* display = gfx::GetXDisplay()) {
+- XFreePixmap(display, x_pixmap_);
+- }
+- }
++ if (x_pixmap_)
++ x11::Connection::Get()->FreePixmap({static_cast<x11::Pixmap>(x_pixmap_)});
+ }
+
+ Status VaapiPictureNativePixmapAngle::Allocate(gfx::BufferFormat format) {
+diff --git a/media/gpu/vaapi/vaapi_picture_native_pixmap_angle.h b/media/gpu/vaapi/vaapi_picture_native_pixmap_angle.h
+index de4698abe..41f52376d 100644
+--- a/media/gpu/vaapi/vaapi_picture_native_pixmap_angle.h
++++ b/media/gpu/vaapi/vaapi_picture_native_pixmap_angle.h
+@@ -46,7 +46,7 @@ class VaapiPictureNativePixmapAngle : public VaapiPictureNativePixmap {
+ VASurfaceID va_surface_id() const override;
+
+ private:
+- Pixmap x_pixmap_ = 0;
++ ::Pixmap x_pixmap_ = 0;
+
+ DISALLOW_COPY_AND_ASSIGN(VaapiPictureNativePixmapAngle);
+ };
+diff --git a/media/gpu/vaapi/vaapi_picture_tfp.cc b/media/gpu/vaapi/vaapi_picture_tfp.cc
+index 9ff0372fa..a571b4b2b 100644
+--- a/media/gpu/vaapi/vaapi_picture_tfp.cc
++++ b/media/gpu/vaapi/vaapi_picture_tfp.cc
+@@ -7,6 +7,7 @@
+ #include "media/gpu/vaapi/va_surface.h"
+ #include "media/gpu/vaapi/vaapi_wrapper.h"
+ #include "ui/base/ui_base_features.h"
++#include "ui/gfx/x/connection.h"
+ #include "ui/gfx/x/x11_types.h"
+ #include "ui/gl/gl_bindings.h"
+ #include "ui/gl/gl_image_glx.h"
+@@ -33,7 +34,7 @@ VaapiTFPPicture::VaapiTFPPicture(
+ texture_id,
+ client_texture_id,
+ texture_target),
+- x_display_(gfx::GetXDisplay()),
++ connection_(x11::Connection::Get()),
+ x_pixmap_(0) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ DCHECK(!features::IsUsingOzonePlatform());
+@@ -49,7 +50,7 @@ VaapiTFPPicture::~VaapiTFPPicture() {
+ }
+
+ if (x_pixmap_)
+- XFreePixmap(x_display_, x_pixmap_);
++ connection_->FreePixmap({static_cast<x11::Pixmap>(x_pixmap_)});
+ }
+
+ Status VaapiTFPPicture::Initialize() {
+@@ -84,16 +85,33 @@ Status VaapiTFPPicture::Allocate(gfx::BufferFormat format) {
+ return StatusCode::kVaapiUnsupportedFormat;
+ }
+
+- XWindowAttributes win_attr;
+- int screen = DefaultScreen(x_display_);
+- XGetWindowAttributes(x_display_, XRootWindow(x_display_, screen), &win_attr);
++ if (!connection_->Ready())
++ return StatusCode::kVaapiNoPixmap;
++
++ auto root = connection_->default_root();
++
++ uint8_t depth = 0;
++ if (auto reply = connection_->GetGeometry({root}).Sync())
++ depth = reply->depth;
++ else
++ return StatusCode::kVaapiNoPixmap;
++
+ // TODO(posciak): pass the depth required by libva, not the RootWindow's
+ // depth
+- x_pixmap_ = XCreatePixmap(x_display_, XRootWindow(x_display_, screen),
+- size_.width(), size_.height(), win_attr.depth);
+- if (!x_pixmap_) {
++ auto pixmap = connection_->GenerateId<x11::Pixmap>();
++ uint16_t pixmap_width, pixmap_height;
++ if (!base::CheckedNumeric<int>(size_.width()).AssignIfValid(&pixmap_width) ||
++ !base::CheckedNumeric<int>(size_.height())
++ .AssignIfValid(&pixmap_height)) {
++ return StatusCode::kVaapiNoPixmap;
++ }
++ auto req = connection_->CreatePixmap(
++ {depth, pixmap, root, pixmap_width, pixmap_height});
++ if (req.Sync().error) {
+ DLOG(ERROR) << "Failed creating an X Pixmap for TFP";
+ return StatusCode::kVaapiNoPixmap;
++ } else {
++ x_pixmap_ = base::strict_cast<::Pixmap>(pixmap);
+ }
+
+ return Initialize();
+diff --git a/media/gpu/vaapi/vaapi_picture_tfp.h b/media/gpu/vaapi/vaapi_picture_tfp.h
+index c4eb2c1b5..8da323717 100644
+--- a/media/gpu/vaapi/vaapi_picture_tfp.h
++++ b/media/gpu/vaapi/vaapi_picture_tfp.h
+@@ -11,6 +11,7 @@
+ #include "base/memory/ref_counted.h"
+ #include "media/gpu/vaapi/vaapi_picture.h"
+ #include "ui/gfx/geometry/size.h"
++#include "ui/gfx/x/connection.h"
+ #include "ui/gl/gl_bindings.h"
+
+ namespace gl {
+@@ -47,9 +48,9 @@ class VaapiTFPPicture : public VaapiPicture {
+ private:
+ Status Initialize();
+
+- Display* x_display_;
++ x11::Connection* const connection_;
+
+- Pixmap x_pixmap_;
++ ::Pixmap x_pixmap_;
+ scoped_refptr<gl::GLImageGLX> glx_image_;
+
+ DISALLOW_COPY_AND_ASSIGN(VaapiTFPPicture);
+diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc
+index 2ad0b997e..a98823343 100644
+--- a/media/gpu/vaapi/vaapi_wrapper.cc
++++ b/media/gpu/vaapi/vaapi_wrapper.cc
+@@ -57,8 +57,13 @@
+ #include "ui/gl/gl_implementation.h"
+
+ #if defined(USE_X11)
+-#include <va/va_x11.h>
+ #include "ui/gfx/x/x11_types.h" // nogncheck
++
++typedef XID Drawable;
++
++extern "C" {
++#include "media/gpu/vaapi/va_x11.sigs"
++}
+ #endif
+
+ #if defined(USE_OZONE)
diff --git a/www-client/chromium/files/chromium-vaapi-signature.patch b/www-client/chromium/files/chromium-vaapi-signature.patch
new file mode 100644
index 0000000..c84cc37
--- /dev/null
+++ b/www-client/chromium/files/chromium-vaapi-signature.patch
@@ -0,0 +1,26 @@
+diff --git a/media/gpu/vaapi/vaapi_picture_tfp.cc b/media/gpu/vaapi/vaapi_picture_tfp.cc
+index dca5b5c46..f65d580da 100644
+--- a/media/gpu/vaapi/vaapi_picture_tfp.cc
++++ b/media/gpu/vaapi/vaapi_picture_tfp.cc
+@@ -97,7 +97,7 @@ bool VaapiTFPPicture::Allocate(gfx::BufferFormat format) {
+
+ bool VaapiTFPPicture::ImportGpuMemoryBufferHandle(
+ gfx::BufferFormat format,
+- const gfx::GpuMemoryBufferHandle& gpu_memory_buffer_handle) {
++ gfx::GpuMemoryBufferHandle gpu_memory_buffer_handle) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ NOTIMPLEMENTED() << "GpuMemoryBufferHandle import not implemented";
+ return false;
+diff --git a/media/gpu/vaapi/vaapi_picture_tfp.h b/media/gpu/vaapi/vaapi_picture_tfp.h
+index a9ba8a1c5..9fb27a5cd 100644
+--- a/media/gpu/vaapi/vaapi_picture_tfp.h
++++ b/media/gpu/vaapi/vaapi_picture_tfp.h
+@@ -40,7 +40,7 @@ class VaapiTFPPicture : public VaapiPicture {
+ bool Allocate(gfx::BufferFormat format) override;
+ bool ImportGpuMemoryBufferHandle(
+ gfx::BufferFormat format,
+- const gfx::GpuMemoryBufferHandle& gpu_memory_buffer_handle) override;
++ gfx::GpuMemoryBufferHandle gpu_memory_buffer_handle) override;
+ bool DownloadFromSurface(const scoped_refptr<VASurface>& va_surface) override;
+
+ private:
diff --git a/www-client/chromium/files/chromium-vector-include-81.patch b/www-client/chromium/files/chromium-vector-include-81.patch
new file mode 100644
index 0000000..21c0bb1
--- /dev/null
+++ b/www-client/chromium/files/chromium-vector-include-81.patch
@@ -0,0 +1,13 @@
+diff --git a/chrome/browser/ui/autofill/payments/virtual_card_selection_dialog_controller.h b/chrome/browser/ui/autofill/payments/virtual_card_selection_dialog_controller.h
+index 401717c18..952bbad4a 100644
+--- a/chrome/browser/ui/autofill/payments/virtual_card_selection_dialog_controller.h
++++ b/chrome/browser/ui/autofill/payments/virtual_card_selection_dialog_controller.h
+@@ -5,6 +5,8 @@
+ #ifndef CHROME_BROWSER_UI_AUTOFILL_PAYMENTS_VIRTUAL_CARD_SELECTION_DIALOG_CONTROLLER_H_
+ #define CHROME_BROWSER_UI_AUTOFILL_PAYMENTS_VIRTUAL_CARD_SELECTION_DIALOG_CONTROLLER_H_
+
++#include <vector>
++
+ #include "base/macros.h"
+ #include "base/strings/string16.h"
+
diff --git a/www-client/chromium/files/chromium-vector-init.patch b/www-client/chromium/files/chromium-vector-init.patch
new file mode 100644
index 0000000..ba8a18f
--- /dev/null
+++ b/www-client/chromium/files/chromium-vector-init.patch
@@ -0,0 +1,13 @@
+diff --git a/chrome/browser/ui/tabs/tab_strip_model_observer.h b/chrome/browser/ui/tabs/tab_strip_model_observer.h
+index 8dacb579e..495e31bc5 100644
+--- a/chrome/browser/ui/tabs/tab_strip_model_observer.h
++++ b/chrome/browser/ui/tabs/tab_strip_model_observer.h
+@@ -125,7 +125,7 @@ class TabStripModelChange {
+
+ private:
+ const Type type_ = kSelectionOnly;
+- const std::vector<Delta> deltas_;
++ const std::vector<Delta> deltas_ = {};
+
+ DISALLOW_COPY_AND_ASSIGN(TabStripModelChange);
+ };
diff --git a/www-client/chromium/files/chromium-vk.patch b/www-client/chromium/files/chromium-vk.patch
new file mode 100644
index 0000000..c170c9c
--- /dev/null
+++ b/www-client/chromium/files/chromium-vk.patch
@@ -0,0 +1,21 @@
+diff --git a/third_party/skia/src/gpu/vk/GrVkVulkan.h b/third_party/skia/src/gpu/vk/GrVkVulkan.h
+index 1b78dc766..3bea44b20 100644
+--- a/third_party/skia/src/gpu/vk/GrVkVulkan.h
++++ b/third_party/skia/src/gpu/vk/GrVkVulkan.h
+@@ -14,14 +14,14 @@
+ #error "Skia's private vulkan header must be included before any other vulkan header."
+ #endif
+
+-#include "../../../include/third_party/vulkan/vulkan/vulkan_core.h"
++#include "vulkan/vulkan_core.h"
+
+ #ifdef SK_BUILD_FOR_ANDROID
+ #ifdef VULKAN_ANDROID_H_
+ #error "Skia's private vulkan android header must be included before any other vulkan header."
+ #endif
+ // This is needed to get android extensions for external memory
+-#include "../../../include/third_party/vulkan/vulkan/vulkan_android.h"
++#include "vulkan/vulkan_android.h"
+ #endif
+
+ #endif
diff --git a/www-client/chromium/files/chromium-vr.patch b/www-client/chromium/files/chromium-vr.patch
new file mode 100644
index 0000000..00230bb
--- /dev/null
+++ b/www-client/chromium/files/chromium-vr.patch
@@ -0,0 +1,47 @@
+diff --git a/tools/perf/contrib/vr_benchmarks/BUILD.gn b/tools/perf/contrib/vr_benchmarks/BUILD.gn
+index fef976f5c..14547d8e7 100644
+--- a/tools/perf/contrib/vr_benchmarks/BUILD.gn
++++ b/tools/perf/contrib/vr_benchmarks/BUILD.gn
+@@ -56,22 +56,23 @@ group("vr_perf_tests") {
+
+ # Copies files to the gen/ directory and creates a manifest so that the VR
+ # assets component can be used during Telemetry tests.
+-action("generate_vr_assets_profile") {
+- script = "generate_vr_assets_profile.py"
+-
+- # We should re-run anytime the version or any related files change.
+- inputs = [
+- "//chrome/browser/resources/vr/assets/google_chrome",
+- "//chrome/browser/resources/vr/assets/VERSION",
+- "//chrome/browser/resources/vr/assets/vr_assets_component_files.json",
+- ]
+- outputs = [
+- "$target_gen_dir/vr_assets_profile/",
+- ]
+- args = [
+- "--output",
+- rebase_path(target_gen_dir, root_build_dir),
+- "--asset-dir",
+- rebase_path("//chrome/browser/resources/vr/assets", root_build_dir),
+- ]
+-}
++#action("generate_vr_assets_profile") {
++# script = "generate_vr_assets_profile.py"
++#
++# # We should re-run anytime the version or any related files change.
++# inputs = [
++# "//chrome/browser/resources/vr/assets/google_chrome",
++# "//chrome/browser/resources/vr/assets/VERSION",
++# "//chrome/browser/resources/vr/assets/vr_assets_component_files.json",
++# ]
++# outputs = [
++# "$target_gen_dir/vr_assets_profile/",
++# ]
++# args = [
++# "--output",
++# rebase_path(target_gen_dir, root_build_dir),
++# "--asset-dir",
++# rebase_path("//chrome/browser/resources/vr/assets", root_build_dir),
++# ]
++#}
++#
diff --git a/www-client/chromium/files/chromium-webrtc-include-84.patch b/www-client/chromium/files/chromium-webrtc-include-84.patch
new file mode 100644
index 0000000..48ea179
--- /dev/null
+++ b/www-client/chromium/files/chromium-webrtc-include-84.patch
@@ -0,0 +1,10 @@
+--- a/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h 2020-05-22 15:16:41.083666290 +0800
++++ b/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h 2020-05-22 15:16:05.620205159 +0800
+@@ -11,6 +11,7 @@
+ #ifndef MODULES_AUDIO_PROCESSING_AEC3_CLOCKDRIFT_DETECTOR_H_
+ #define MODULES_AUDIO_PROCESSING_AEC3_CLOCKDRIFT_DETECTOR_H_
+
++#include <cstddef>
+ #include <array>
+
+ namespace webrtc {
diff --git a/www-client/chromium/files/chromium-webrtc-r0.patch b/www-client/chromium/files/chromium-webrtc-r0.patch
new file mode 100644
index 0000000..e14b185
--- /dev/null
+++ b/www-client/chromium/files/chromium-webrtc-r0.patch
@@ -0,0 +1,34 @@
+From 7f90e2cceda0458cf56026eb6ccffb961a47804b Mon Sep 17 00:00:00 2001
+From: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+Date: Fri, 13 Oct 2017 15:49:32 +0200
+Subject: [PATCH] IWYU: Include math.h for round(3).
+
+math.h was being implicitly included, which can break the build with
+alternative libc implementations.
+
+Bug: None
+Change-Id: I969b320b65d0f44abb33d3e1036cfbcb859a4952
+Reviewed-on: https://webrtc-review.googlesource.com/9384
+Reviewed-by: Tommi <tommi@webrtc.org>
+Commit-Queue: Raphael Kubo da Costa (rakuco) <raphael.kubo.da.costa@intel.com>
+Cr-Commit-Position: refs/heads/master@{#20292}
+---
+ p2p/base/port.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/p2p/base/port.cc b/p2p/base/port.cc
+index a1b478d11..81aa0aadb 100644
+--- a/third_party/webrtc/p2p/base/port.cc
++++ b/third_party/webrtc/p2p/base/port.cc
+@@ -10,6 +10,8 @@
+
+ #include "p2p/base/port.h"
+
++#include <math.h>
++
+ #include <algorithm>
+ #include <vector>
+
+--
+2.15.0.rc2
+
diff --git a/www-client/chromium/files/chromium-webrtc.patch b/www-client/chromium/files/chromium-webrtc.patch
new file mode 100644
index 0000000..07b770b
--- /dev/null
+++ b/www-client/chromium/files/chromium-webrtc.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/webrtc/api/ice_transport_factory.cc b/third_party/webrtc/api/ice_transport_factory.cc
+index b632f0913..6cc399aef 100644
+--- a/third_party/webrtc/api/ice_transport_factory.cc
++++ b/third_party/webrtc/api/ice_transport_factory.cc
+@@ -42,7 +42,7 @@ class IceTransportWithTransportChannel : public IceTransportInterface {
+ }
+
+ private:
+- const rtc::ThreadChecker thread_checker_;
++ const rtc::ThreadChecker thread_checker_{};
+ const std::unique_ptr<cricket::IceTransportInternal> internal_
+ RTC_GUARDED_BY(thread_checker_);
+ };
diff --git a/www-client/chromium/files/chromium-widevine-80.patch b/www-client/chromium/files/chromium-widevine-80.patch
new file mode 100644
index 0000000..ac03150
--- /dev/null
+++ b/www-client/chromium/files/chromium-widevine-80.patch
@@ -0,0 +1,11 @@
+diff --git a/third_party/widevine/cdm/widevine_cdm_version.h b/third_party/widevine/cdm/widevine_cdm_version.h
+index dd6efed02..eaa017197 100644
+--- a/third_party/widevine/cdm/widevine_cdm_version.h
++++ b/third_party/widevine/cdm/widevine_cdm_version.h
+@@ -11,5 +11,6 @@
+ // If the Widevine CDM is available define the following:
+ // - WIDEVINE_CDM_VERSION_STRING (with the version of the CDM that's available
+ // as a string, e.g., "1.0.123.456").
++#define WIDEVINE_CDM_VERSION_STRING "unknown"
+
+ #endif // WIDEVINE_CDM_VERSION_H_
diff --git a/www-client/chromium/files/chromium-widevine-r2.patch b/www-client/chromium/files/chromium-widevine-r2.patch
new file mode 100644
index 0000000..5527f7f
--- /dev/null
+++ b/www-client/chromium/files/chromium-widevine-r2.patch
@@ -0,0 +1,39 @@
+Minimal patch to get chromium to compile with widevine support.
+
+Exactly the same as -r1, but we now need to patch
+ninja to pretty please not terminate our build.
+
+caveat emptor: it's in no way clear that building chromium this
+way is safer, from a security perspective, than whatever Google
+Chrome does.
+
+Upstream appears to be cooking up a code-signing trust-chain
+which may protect users against malicious cdm blobs; I doubt
+we benefit from these using this kludge. Ideally, someone
+would look into this more carefully than I have ... tbh as
+soon as I got my "stories" back, I pretty much lost interest :)
+
+-gmt
+
+--
+--- a/third_party/widevine/cdm/stub/widevine_cdm_version.h
++++ b/third_party/widevine/cdm/stub/widevine_cdm_version.h
+@@ -10,6 +10,7 @@
+
+ #include "third_party/widevine/cdm/widevine_cdm_common.h"
+
++#define WIDEVINE_CDM_VERSION_STRING "unknown"
+ #define WIDEVINE_CDM_AVAILABLE
+
+ #endif // WIDEVINE_CDM_VERSION_H_
+--- a/third_party/widevine/cdm/BUILD.gn
++++ b/third_party/widevine/cdm/BUILD.gn
+@@ -11,7 +11,7 @@ import("//third_party/widevine/cdm/widev
+ # Internal Cast builds set enable_widevine=true to bring in Widevine support.
+ # TODO(xhwang): Support component updated CDM on other platforms and remove this
+ # assert.
+-assert(!enable_widevine || is_win || is_mac || is_chromecast,
++assert(!enable_widevine || is_win || is_mac || is_chromecast || is_linux,
+ "Component updated CDM only supported on Windows and Mac for now.")
+
+ widevine_arch = current_cpu
diff --git a/www-client/chromium/files/chromium-widevine-r3.patch b/www-client/chromium/files/chromium-widevine-r3.patch
new file mode 100644
index 0000000..a126084
--- /dev/null
+++ b/www-client/chromium/files/chromium-widevine-r3.patch
@@ -0,0 +1,23 @@
+From 5818fdbef3d399fe1bfbb56f81e59184e1a8e467 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppymaster@gmail.com>
+Date: Sun, 14 Oct 2018 20:04:03 -0400
+Subject: [PATCH] Define WIDEVINE_CDM_VERSION_STRING
+
+---
+ third_party/widevine/cdm/widevine_cdm_version.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/third_party/widevine/cdm/widevine_cdm_version.h b/third_party/widevine/cdm/widevine_cdm_version.h
+index dd6efed02646..eaa017197e61 100644
+--- a/third_party/widevine/cdm/widevine_cdm_version.h
++++ b/third_party/widevine/cdm/widevine_cdm_version.h
+@@ -11,5 +11,6 @@
+ // If the Widevine CDM is available define the following:
+ // - WIDEVINE_CDM_VERSION_STRING (with the version of the CDM that's available
+ // as a string, e.g., "1.0.123.456").
++#define WIDEVINE_CDM_VERSION_STRING "unknown"
+
+ #endif // WIDEVINE_CDM_VERSION_H_
+--
+2.19.1
+
diff --git a/www-client/chromium/files/chromium-widevine-r4.patch b/www-client/chromium/files/chromium-widevine-r4.patch
new file mode 100644
index 0000000..d5a3be8
--- /dev/null
+++ b/www-client/chromium/files/chromium-widevine-r4.patch
@@ -0,0 +1,26 @@
+Define WIDEVINE_CDM_VERSION_STRING && re-re-re-patch for latest ninja
+
+Stolen from Arch basically.
+
+gmt
+
+--- a/chrome/common/chrome_content_client.cc
++++ b/chrome/common/chrome_content_client.cc
+@@ -99,7 +99,7 @@
+ // Registers Widevine CDM if Widevine is enabled, the Widevine CDM is
+ // bundled and not a component. When the Widevine CDM is a component, it is
+ // registered in widevine_cdm_component_installer.cc.
+-#if BUILDFLAG(BUNDLE_WIDEVINE_CDM) && !BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
++#if BUILDFLAG(ENABLE_WIDEVINE) && !BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
+ #define REGISTER_BUNDLED_WIDEVINE_CDM
+ #include "third_party/widevine/cdm/widevine_cdm_common.h" // nogncheck
+ // TODO(crbug.com/663554): Needed for WIDEVINE_CDM_VERSION_STRING. Support
+--- a/third_party/widevine/cdm/widevine_cdm_version.h
++++ b/third_party/widevine/cdm/widevine_cdm_version.h
+@@ -11,5 +11,6 @@
+ // If the Widevine CDM is available define the following:
+ // - WIDEVINE_CDM_VERSION_STRING (with the version of the CDM that's available
+ // as a string, e.g., "1.0.123.456").
++#define WIDEVINE_CDM_VERSION_STRING "unknown"
+
+ #endif // WIDEVINE_CDM_VERSION_H_
diff --git a/www-client/chromium/files/chromium-wpt-gn-78.patch b/www-client/chromium/files/chromium-wpt-gn-78.patch
new file mode 100644
index 0000000..fc750e8
--- /dev/null
+++ b/www-client/chromium/files/chromium-wpt-gn-78.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/blink/tools/BUILD.gn b/third_party/blink/tools/BUILD.gn
+index d3004ee7b..ef293e3bf 100644
+--- a/third_party/blink/tools/BUILD.gn
++++ b/third_party/blink/tools/BUILD.gn
+@@ -13,7 +13,7 @@ action("build_wpt_metadata") {
+ "../../third_party/blink/web_tests/WPTOverrideExpectations",
+ ]
+ outputs = [
+- "$root_out_dir/wpt_expectations_metadata/",
++ "$root_out_dir/wpt_expectations_metadata",
+ ]
+ data = [
+ # Include the blinkpy tools to access expectations data
diff --git a/www-client/chromium/files/chromium-zlib-78.patch b/www-client/chromium/files/chromium-zlib-78.patch
new file mode 100644
index 0000000..a1da45f
--- /dev/null
+++ b/www-client/chromium/files/chromium-zlib-78.patch
@@ -0,0 +1,11 @@
+--- a/third_party/perfetto/gn/BUILD.gn 2019-09-06 23:54:00.697132348 +0800
++++ b/third_party/perfetto/gn/BUILD.gn 2019-09-06 23:54:41.235747858 +0800
+@@ -276,7 +276,7 @@
+ "//buildtools:zlib",
+ ]
+ } else {
+- public_configs = [ "//third_party/zlib:zlib_config" ]
++ public_configs = [ "//third_party/zlib:system_zlib" ]
+ public_deps = [
+ "//third_party/zlib",
+ ]
diff --git a/www-client/chromium/files/chromium-zlib-82.patch b/www-client/chromium/files/chromium-zlib-82.patch
new file mode 100644
index 0000000..1585445
--- /dev/null
+++ b/www-client/chromium/files/chromium-zlib-82.patch
@@ -0,0 +1,9 @@
+--- a/third_party/perfetto/gn/BUILD.gn 2019-09-06 23:54:00.697132348 +0800
++++ b/third_party/perfetto/gn/BUILD.gn 2019-09-06 23:54:41.235747858 +0800
+@@ -299,4 +299,4 @@
+ public_deps = [ "//buildtools:zlib" ]
+ } else {
+- public_configs = [ "//third_party/zlib:zlib_config" ]
++ public_configs = [ "//third_party/zlib:system_zlib" ]
+ public_deps = [ "//third_party/zlib" ]
+
diff --git a/www-client/chromium/files/chromium.default b/www-client/chromium/files/chromium.default
new file mode 100644
index 0000000..c140cde
--- /dev/null
+++ b/www-client/chromium/files/chromium.default
@@ -0,0 +1,5 @@
+# Default settings for chromium. This file is sourced by /bin/bash from
+# the chromium launcher.
+
+# Options to pass to chromium.
+#CHROMIUM_FLAGS=""