summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathon Fernyhough2021-03-07 00:33:48 +0000
committerJonathon Fernyhough2021-03-07 00:33:48 +0000
commit15c98bff7c7a7806120070ac49e3fb0976aa37e9 (patch)
tree5ff29429e4eaea5b9082f5db2395a654c506eb2c
downloadaur-15c98bff7c7a7806120070ac49e3fb0976aa37e9.tar.gz
Import to AUR
-rw-r--r--.SRCINFO77
-rw-r--r--PKGBUILD232
-rw-r--r--add-missing-algorithm-header-in-crx_install_error.cc.patch29
-rw-r--r--avoid-double-destruction-of-ServiceWorkerObjectHost.patch138
-rw-r--r--chromium-83-gcc-10.patch64
-rw-r--r--chromium-ffmpeg-4.3.patch21
-rw-r--r--chromium-skia-harmony.patch14
-rw-r--r--clean-up-a-call-to-set_utf8.patch34
-rw-r--r--default_app-icon.patch21
-rw-r--r--electron9.desktop7
-rw-r--r--include-memory-header-to-get-the-definition-of-std-u.patch32
-rw-r--r--iwyu-std-numeric_limits-is-defined-in-limits.patch29
-rw-r--r--libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch62
-rw-r--r--make-some-of-blink-custom-iterators-STL-compatible.patch95
-rw-r--r--qt5-webengine-glibc-2.33.patch144
-rw-r--r--use-system-libraries-in-node.patch56
-rw-r--r--v8-remove-soon-to-be-removed-getAllFieldPositions.patch172
17 files changed, 1227 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..a142e839ce34
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,77 @@
+pkgbase = electron9
+ pkgdesc = Build cross platform desktop apps with web technologies
+ pkgver = 9.4.3
+ pkgrel = 1
+ url = https://electronjs.org/
+ arch = x86_64
+ license = MIT
+ license = custom
+ makedepends = clang
+ makedepends = git
+ makedepends = gn-m85
+ makedepends = gperf
+ makedepends = harfbuzz-icu
+ makedepends = java-runtime-headless
+ makedepends = jsoncpp
+ makedepends = libnotify
+ makedepends = lld
+ makedepends = llvm
+ makedepends = ninja
+ makedepends = npm
+ makedepends = pciutils
+ makedepends = yarn
+ makedepends = python2
+ makedepends = wget
+ makedepends = yasm
+ depends = c-ares
+ depends = ffmpeg
+ depends = gtk3
+ depends = http-parser
+ depends = libevent
+ depends = libxslt
+ depends = libxss
+ depends = minizip
+ depends = nss
+ depends = re2
+ depends = snappy
+ optdepends = kde-cli-tools: file deletion support (kioclient5)
+ optdepends = libappindicator-gtk3: StatusNotifierItem support
+ optdepends = trash-cli: file deletion support (trash-put)
+ optdepends = xdg-utils: open URLs with desktop's default (xdg-email, xdg-open)
+ source = git+https://github.com/electron/electron.git
+ source = git+https://chromium.googlesource.com/chromium/tools/depot_tools.git
+ source = electron9.desktop
+ source = default_app-icon.patch
+ source = use-system-libraries-in-node.patch
+ source = add-missing-algorithm-header-in-crx_install_error.cc.patch
+ source = avoid-double-destruction-of-ServiceWorkerObjectHost.patch
+ source = chromium-83-gcc-10.patch
+ source = chromium-ffmpeg-4.3.patch
+ source = qt5-webengine-glibc-2.33.patch
+ source = chromium-skia-harmony.patch
+ source = clean-up-a-call-to-set_utf8.patch
+ source = include-memory-header-to-get-the-definition-of-std-u.patch
+ source = iwyu-std-numeric_limits-is-defined-in-limits.patch
+ source = libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
+ source = make-some-of-blink-custom-iterators-STL-compatible.patch
+ source = v8-remove-soon-to-be-removed-getAllFieldPositions.patch
+ sha256sums = SKIP
+ sha256sums = SKIP
+ sha256sums = 93236bbc903c6b990e6562f0aed33ebe67c1ee365b7ffd094a2febcd3a5cad76
+ sha256sums = dd2d248831dd4944d385ebf008426e66efe61d6fdf66f8932c963a12167947b4
+ sha256sums = c7eadac877179e586d0cce7f898aa1462b4c207733e68ecc17de9754b691713a
+ sha256sums = 0e2a78e4aa7272ab0ff4a4c467750e01bad692a026ad9828aaf06d2a9418b9d8
+ sha256sums = d793842e9584bf75e3779918297ba0ffa6dd05394ef5b2bf5fb73aa9c86a7e2f
+ sha256sums = 3e5ba8c0a70a4bc673deec0c61eb2b58f05a4c784cbdb7c8118be1eb6580db6d
+ sha256sums = 5390304b5f544868985ce00a3ec082d4ece2dacb1c73cdb35dd4facfea12449a
+ sha256sums = 5600cfa40254fa3fa2cb541d3b55cc8f7a9231de8d2830c25a7651aa392de16f
+ sha256sums = 771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1
+ sha256sums = 58c41713eb6fb33b6eef120f4324fa1fb8123b1fbc4ecbe5662f1f9779b9b6af
+ sha256sums = 071326135bc25226aa165639dff80a03670a17548f2d2ff5cc4f40982b39c52a
+ sha256sums = 675fb3d6276cce569a641436465f58d5709d1d4a5f62b7052989479fd4aaea24
+ sha256sums = 50687079426094f2056d1f4806dc30fc8d6bad16190520e57ba087ec5db1d778
+ sha256sums = 3d7f20e1d2ee7d73ed25e708c0d59a0cb215fcce10a379e3d48a856533c4b0b7
+ sha256sums = e042024423027ad3ef729a7e4709bdf9714aea49d64cfbbf46a645a05703abc2
+
+pkgname = electron9
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..666940854c36
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,232 @@
+# Maintainer: Nicola Squartini <tensor5@gmail.com>
+
+pkgname=electron9
+pkgver=9.4.3
+_commit=ca82414364002efa665ffa7427e267adf76ed1f3
+_chromiumver=83.0.4103.122
+pkgrel=1
+pkgdesc='Build cross platform desktop apps with web technologies'
+arch=('x86_64')
+url='https://electronjs.org/'
+license=('MIT' 'custom')
+depends=('c-ares' 'ffmpeg' 'gtk3' 'http-parser' 'libevent' 'libxslt' 'libxss'
+ 'minizip' 'nss' 're2' 'snappy')
+makedepends=('clang' 'git' 'gn-m85' 'gperf' 'harfbuzz-icu' 'java-runtime-headless'
+ 'jsoncpp' 'libnotify' 'lld' 'llvm' 'ninja' 'npm' 'pciutils' 'yarn'
+ 'python2' 'wget' 'yasm')
+optdepends=('kde-cli-tools: file deletion support (kioclient5)'
+ 'libappindicator-gtk3: StatusNotifierItem support'
+ 'trash-cli: file deletion support (trash-put)'
+ "xdg-utils: open URLs with desktop's default (xdg-email, xdg-open)")
+source=('git+https://github.com/electron/electron.git'
+ 'git+https://chromium.googlesource.com/chromium/tools/depot_tools.git'
+ 'electron9.desktop'
+ 'default_app-icon.patch'
+ 'use-system-libraries-in-node.patch'
+ 'add-missing-algorithm-header-in-crx_install_error.cc.patch'
+ 'avoid-double-destruction-of-ServiceWorkerObjectHost.patch'
+ 'chromium-83-gcc-10.patch'
+ 'chromium-ffmpeg-4.3.patch'
+ 'qt5-webengine-glibc-2.33.patch'
+ 'chromium-skia-harmony.patch'
+ 'clean-up-a-call-to-set_utf8.patch'
+ 'include-memory-header-to-get-the-definition-of-std-u.patch'
+ 'iwyu-std-numeric_limits-is-defined-in-limits.patch'
+ 'libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch'
+ 'make-some-of-blink-custom-iterators-STL-compatible.patch'
+ 'v8-remove-soon-to-be-removed-getAllFieldPositions.patch'
+ )
+sha256sums=('SKIP'
+ 'SKIP'
+ '93236bbc903c6b990e6562f0aed33ebe67c1ee365b7ffd094a2febcd3a5cad76'
+ 'dd2d248831dd4944d385ebf008426e66efe61d6fdf66f8932c963a12167947b4'
+ 'c7eadac877179e586d0cce7f898aa1462b4c207733e68ecc17de9754b691713a'
+ '0e2a78e4aa7272ab0ff4a4c467750e01bad692a026ad9828aaf06d2a9418b9d8'
+ 'd793842e9584bf75e3779918297ba0ffa6dd05394ef5b2bf5fb73aa9c86a7e2f'
+ '3e5ba8c0a70a4bc673deec0c61eb2b58f05a4c784cbdb7c8118be1eb6580db6d'
+ '5390304b5f544868985ce00a3ec082d4ece2dacb1c73cdb35dd4facfea12449a'
+ '5600cfa40254fa3fa2cb541d3b55cc8f7a9231de8d2830c25a7651aa392de16f'
+ '771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1'
+ '58c41713eb6fb33b6eef120f4324fa1fb8123b1fbc4ecbe5662f1f9779b9b6af'
+ '071326135bc25226aa165639dff80a03670a17548f2d2ff5cc4f40982b39c52a'
+ '675fb3d6276cce569a641436465f58d5709d1d4a5f62b7052989479fd4aaea24'
+ '50687079426094f2056d1f4806dc30fc8d6bad16190520e57ba087ec5db1d778'
+ '3d7f20e1d2ee7d73ed25e708c0d59a0cb215fcce10a379e3d48a856533c4b0b7'
+ 'e042024423027ad3ef729a7e4709bdf9714aea49d64cfbbf46a645a05703abc2'
+ )
+
+_system_libs=('ffmpeg'
+ 'flac'
+ 'fontconfig'
+ 'freetype'
+ 'harfbuzz-ng'
+ 'icu'
+ 'libdrm'
+ 'libevent'
+ 'libjpeg'
+# 'libpng'
+ 'libvpx'
+ 'libwebp'
+ 'libxml'
+ 'libxslt'
+# 'openh264'
+ 'opus'
+ 're2'
+ 'snappy'
+ 'yasm'
+ 'zlib'
+ )
+
+prepare() {
+ mkdir -p "${srcdir}"/python2-path
+ ln -sf /usr/bin/python2 "${srcdir}/python2-path/python"
+ export PATH="${srcdir}/python2-path:${PATH}:${srcdir}/depot_tools"
+
+ echo "Fetching chromium..."
+ git clone --branch=${_chromiumver} --depth=1 \
+ https://chromium.googlesource.com/chromium/src.git
+
+ echo "solutions = [
+ {
+ \"name\": \"src/electron\",
+ \"url\": \"file://${srcdir}/electron@${_commit}\",
+ \"deps_file\": \"DEPS\",
+ \"managed\": False,
+ \"custom_deps\": {
+ \"src\": None,
+ },
+ \"custom_vars\": {},
+ },
+]" > .gclient
+
+ python2 "${srcdir}/depot_tools/gclient.py" sync \
+ --with_branch_heads \
+ --with_tags \
+ --nohooks
+
+ sed -e "s/'am'/'apply'/" -i src/electron/script/lib/git.py
+
+ echo "Running hooks..."
+ # python2 "${srcdir}/depot_tools/gclient.py" runhooks
+ python2 src/build/landmines.py
+ python2 src/build/util/lastchange.py -o src/build/util/LASTCHANGE
+ python2 src/build/util/lastchange.py -m GPU_LISTS_VERSION \
+ --revision-id-only --header src/gpu/config/gpu_lists_version.h
+ python2 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \
+ -s src/third_party/skia --header src/skia/ext/skia_commit_hash.h
+ # Create sysmlink to system clang-format
+ ln -s /usr/bin/clang-format src/buildtools/linux64
+ # Create sysmlink to system Node.js
+ mkdir -p src/third_party/node/linux/node-linux-x64/bin
+ ln -sf /usr/bin/node src/third_party/node/linux/node-linux-x64/bin
+ python2 src/third_party/depot_tools/download_from_google_storage.py \
+ --no_resume --extract --no_auth --bucket chromium-nodejs \
+ -s src/third_party/node/node_modules.tar.gz.sha1
+ vpython src/tools/download_cros_provided_profile.py \
+ --newest_state=src/chrome/android/profiles/newest.txt \
+ --local_state=src/chrome/android/profiles/local.txt \
+ --output_name=src/chrome/android/profiles/afdo.prof \
+ --gs_url_base=chromeos-prebuilt/afdo-job/llvm
+ python2 src/electron/script/apply_all_patches.py \
+ src/electron/patches/config.json
+ cd src/electron
+ yarn install --frozen-lockfile
+ cd ..
+
+ echo "Applying local patches..."
+ patch -Np1 -i ../add-missing-algorithm-header-in-crx_install_error.cc.patch
+ patch -Np1 -i ../avoid-double-destruction-of-ServiceWorkerObjectHost.patch
+ patch -Np1 -i ../chromium-83-gcc-10.patch
+ patch -Np1 -i ../chromium-ffmpeg-4.3.patch
+ patch -Np0 -i ../chromium-skia-harmony.patch
+ patch -Np4 -i ../qt5-webengine-glibc-2.33.patch
+ patch -Np1 -i ../clean-up-a-call-to-set_utf8.patch
+ patch -Np1 -i ../include-memory-header-to-get-the-definition-of-std-u.patch
+ patch -Np1 -F3 -i ../iwyu-std-numeric_limits-is-defined-in-limits.patch
+ patch -Np1 -i ../libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
+ patch -Np1 -i ../make-some-of-blink-custom-iterators-STL-compatible.patch
+ patch -Np1 -d v8 <../v8-remove-soon-to-be-removed-getAllFieldPositions.patch
+ patch -Np1 -i ../use-system-libraries-in-node.patch
+ patch -Np1 -i ../default_app-icon.patch # Icon from .desktop file
+
+ echo "Patching Chromium for using system libraries..."
+ sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
+ tools/generate_shim_headers/generate_shim_headers.py
+ for lib in $(printf "%s\n" "${_system_libs[@]}" | sed 's/^libjpeg$/&_turbo/'); do
+ third_party_dir="third_party/${lib}"
+ if [ ! -d ${third_party_dir} ]; then
+ third_party_dir="base/${third_party_dir}"
+ fi
+ find ${third_party_dir} -type f \
+ \! -path "${third_party_dir}/chromium/*" \
+ \! -path "${third_party_dir}/google/*" \
+ \! -path 'third_party/harfbuzz-ng/utils/hb_scoped.h' \
+ \! -path 'third_party/yasm/run_yasm.py' \
+ \! -regex '.*\.\(gn\|gni\|isolate\)' \
+ -delete
+ done
+ python2 build/linux/unbundle/replace_gn_files.py \
+ --system-libraries \
+ "${_system_libs[@]}"
+}
+
+build() {
+ export CC=clang
+ export CXX=clang++
+ export AR=ar
+ export NM=nm
+
+ # Workaround for building with ICU 68.x
+ CPPFLAGS+=' -DU_DEFINE_FALSE_AND_TRUE=1'
+
+ # Do not warn about unknown warning options
+ CFLAGS+=' -Wno-unknown-warning-option'
+ CXXFLAGS+=' -Wno-unknown-warning-option'
+
+ cd src
+ export CHROMIUM_BUILDTOOLS_PATH="${PWD}/buildtools"
+ GN_EXTRA_ARGS='
+ blink_symbol_level = 0
+ clang_use_chrome_plugins = false
+ custom_toolchain = "//build/toolchain/linux/unbundle:default"
+ host_toolchain = "//build/toolchain/linux/unbundle:default"
+ icu_use_data_file = false
+ is_component_ffmpeg = false
+ link_pulseaudio = true
+ linux_use_bundled_binutils = false
+ treat_warnings_as_errors = false
+ use_custom_libcxx = false
+ use_gnome_keyring = false
+ use_sysroot = false
+ '
+ gn-m85 gen out/Release \
+ --args="import(\"//electron/build/args/release.gn\") ${GN_EXTRA_ARGS}"
+ ninja -C out/Release electron
+ # Strip before zip to avoid
+ # zipfile.LargeZipFile: Filesize would require ZIP64 extensions
+ strip -s out/Release/electron
+ ninja -C out/Release electron_dist_zip
+ # ninja -C out/Release third_party/electron_node:headers
+}
+
+package() {
+ install -dm755 "${pkgdir}/usr/lib/${pkgname}"
+ bsdtar -xf src/out/Release/dist.zip -C "${pkgdir}/usr/lib/${pkgname}"
+
+ chmod u+s "${pkgdir}/usr/lib/${pkgname}/chrome-sandbox"
+
+ install -dm755 "${pkgdir}/usr/share/licenses/${pkgname}"
+ for l in "${pkgdir}/usr/lib/${pkgname}"/{LICENSE,LICENSES.chromium.html}; do
+ ln -s \
+ $(realpath --relative-to="${pkgdir}/usr/share/licenses/${pkgname}" ${l}) \
+ "${pkgdir}/usr/share/licenses/${pkgname}"
+ done
+
+ install -dm755 "${pkgdir}"/usr/bin
+ ln -s ../lib/${pkgname}/electron "${pkgdir}"/usr/bin/${pkgname}
+
+ # Install .desktop and icon file (see default_app-icon.patch)
+ install -Dm644 -t "${pkgdir}/usr/share/applications" ${pkgname}.desktop
+ install -Dm644 src/electron/default_app/icon.png \
+ "${pkgdir}/usr/share/pixmaps/${pkgname}.png" # hicolor has no 1024x1024
+}
diff --git a/add-missing-algorithm-header-in-crx_install_error.cc.patch b/add-missing-algorithm-header-in-crx_install_error.cc.patch
new file mode 100644
index 000000000000..570f7b319534
--- /dev/null
+++ b/add-missing-algorithm-header-in-crx_install_error.cc.patch
@@ -0,0 +1,29 @@
+From 2b9d6daa0ab5ce45ec5555466d5a5a583a020ea8 Mon Sep 17 00:00:00 2001
+From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
+Date: Sat, 18 Apr 2020 00:27:38 +0000
+Subject: [PATCH] Add missing algorithm header in crx_install_error.cc
+
+This is needed for the use of std::find.
+
+Change-Id: I2dc43b3887c467986c5346be5a9e27a987e1e5b3
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2152333
+Reviewed-by: Ken Rockot <rockot@google.com>
+Commit-Queue: Ken Rockot <rockot@google.com>
+Cr-Commit-Position: refs/heads/master@{#760272}
+---
+ extensions/browser/install/crx_install_error.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/extensions/browser/install/crx_install_error.cc b/extensions/browser/install/crx_install_error.cc
+index a9765bb0a5a..bd0d3e35a16 100644
+--- a/extensions/browser/install/crx_install_error.cc
++++ b/extensions/browser/install/crx_install_error.cc
+@@ -4,6 +4,8 @@
+
+ #include "extensions/browser/install/crx_install_error.h"
+
++#include <algorithm>
++
+ #include "base/logging.h"
+ #include "extensions/browser/install/sandboxed_unpacker_failure_reason.h"
+
diff --git a/avoid-double-destruction-of-ServiceWorkerObjectHost.patch b/avoid-double-destruction-of-ServiceWorkerObjectHost.patch
new file mode 100644
index 000000000000..5e1df005c961
--- /dev/null
+++ b/avoid-double-destruction-of-ServiceWorkerObjectHost.patch
@@ -0,0 +1,138 @@
+From bd59ce32629ef684624821419c43967b73d2989e Mon Sep 17 00:00:00 2001
+From: Hiroki Nakagawa <nhiroki@chromium.org>
+Date: Fri, 8 May 2020 08:25:31 +0000
+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
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2094496
+Reviewed-by: Makoto Shimazu <shimazu@chromium.org>
+Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#766770}
+---
+ .../service_worker_container_host.cc | 10 +++++
+ .../service_worker_object_host_unittest.cc | 38 +++++++++++++++++++
+ 2 files changed, 48 insertions(+)
+
+diff --git a/content/browser/service_worker/service_worker_container_host.cc b/content/browser/service_worker/service_worker_container_host.cc
+index ec7fb1449af..98c62093b0e 100644
+--- a/content/browser/service_worker/service_worker_container_host.cc
++++ b/content/browser/service_worker/service_worker_container_host.cc
+@@ -669,6 +669,16 @@ void ServiceWorkerContainerHost::RemoveServiceWorkerObjectHost(
+ 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 408d7c1f9d1..6eab59040ab 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 @@ class ServiceWorkerObjectHostTest : public testing::Test {
+ 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 @@ TEST_F(ServiceWorkerObjectHostTest, DispatchExtendableMessageEvent_FromClient) {
+ 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/chromium-83-gcc-10.patch b/chromium-83-gcc-10.patch
new file mode 100644
index 000000000000..974b49cde703
--- /dev/null
+++ b/chromium-83-gcc-10.patch
@@ -0,0 +1,64 @@
+From e473f41284ccc8fa4bc4622d087194b18a1ec23a Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Tue, 7 Apr 2020 16:37:10 +0000
+Subject: [PATCH] GCC: fix includes for gcc-10
+
+---
+ chrome/browser/search/background/ntp_backgrounds.h | 1 +
+ third_party/webrtc/call/rtx_receive_stream.h | 1 +
+ .../webrtc/modules/audio_processing/aec3/clockdrift_detector.h | 1 +
+ ui/gfx/linux/drm_util_linux.h | 2 ++
+ 5 files changed, 6 insertions(+)
+
+diff --git a/chrome/browser/search/background/ntp_backgrounds.h b/chrome/browser/search/background/ntp_backgrounds.h
+index 7afc0a2..ea5818e 100644
+--- a/chrome/browser/search/background/ntp_backgrounds.h
++++ b/chrome/browser/search/background/ntp_backgrounds.h
+@@ -6,6 +6,7 @@
+ #define CHROME_BROWSER_SEARCH_BACKGROUND_NTP_BACKGROUNDS_H_
+
+ #include <array>
++#include <cstddef>
+
+ class GURL;
+
+diff --git a/third_party/webrtc/call/rtx_receive_stream.h b/third_party/webrtc/call/rtx_receive_stream.h
+index 8ffa440..113a816 100644
+--- a/third_party/webrtc/call/rtx_receive_stream.h
++++ b/third_party/webrtc/call/rtx_receive_stream.h
+@@ -12,6 +12,7 @@
+ #define CALL_RTX_RECEIVE_STREAM_H_
+
+ #include <map>
++#include <cstdint>
+
+ #include "call/rtp_packet_sink_interface.h"
+
+diff --git a/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h b/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
+index 22528c9..69e624e 100644
+--- a/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
++++ b/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
+@@ -12,6 +12,7 @@
+ #define MODULES_AUDIO_PROCESSING_AEC3_CLOCKDRIFT_DETECTOR_H_
+
+ #include <array>
++#include <cstddef>
+
+ namespace webrtc {
+
+diff --git a/ui/gfx/linux/drm_util_linux.h b/ui/gfx/linux/drm_util_linux.h
+index 86ff2eb..990f12c 100644
+--- a/ui/gfx/linux/drm_util_linux.h
++++ b/ui/gfx/linux/drm_util_linux.h
+@@ -7,6 +7,8 @@
+
+ #include "ui/gfx/buffer_types.h"
+
++#include <cstdint>
++
+ namespace ui {
+
+ int GetFourCCFormatFromBufferFormat(gfx::BufferFormat format);
+--
+2.24.1
+
diff --git a/chromium-ffmpeg-4.3.patch b/chromium-ffmpeg-4.3.patch
new file mode 100644
index 000000000000..6abb886ab990
--- /dev/null
+++ b/chromium-ffmpeg-4.3.patch
@@ -0,0 +1,21 @@
+diff --git a/media/base/media.cc b/media/base/media.cc
+index c282ee49a03..a298b40c79b 100644
+--- a/media/base/media.cc
++++ b/media/base/media.cc
+@@ -14,6 +14,7 @@
+ #include "third_party/libyuv/include/libyuv.h"
+
+ #if BUILDFLAG(ENABLE_FFMPEG)
++#include <limits>
+ #include "third_party/ffmpeg/ffmpeg_features.h" // nogncheck
+ extern "C" {
+ #include <libavutil/cpu.h>
+@@ -41,7 +42,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/chromium-skia-harmony.patch b/chromium-skia-harmony.patch
new file mode 100644
index 000000000000..c96d07e11489
--- /dev/null
+++ b/chromium-skia-harmony.patch
@@ -0,0 +1,14 @@
+--- third_party/skia/src/ports/SkFontHost_FreeType.cpp.orig 2019-07-19 11:08:34.770972665 +0000
++++ third_party/skia/src/ports/SkFontHost_FreeType.cpp 2019-07-19 11:08:44.274442065 +0000
+@@ -128,9 +128,9 @@ public:
+ : fGetVarDesignCoordinates(nullptr)
+ , fGetVarAxisFlags(nullptr)
+ , fLibrary(nullptr)
+- , fIsLCDSupported(false)
++ , fIsLCDSupported(true)
+ , fLightHintingIsYOnly(false)
+- , fLCDExtra(0)
++ , fLCDExtra(2)
+ {
+ if (FT_New_Library(&gFTMemory, &fLibrary)) {
+ return;
diff --git a/clean-up-a-call-to-set_utf8.patch b/clean-up-a-call-to-set_utf8.patch
new file mode 100644
index 000000000000..01384c039417
--- /dev/null
+++ b/clean-up-a-call-to-set_utf8.patch
@@ -0,0 +1,34 @@
+From ede390a0b18e4565abf8ac1e1ff717e1d43fc320 Mon Sep 17 00:00:00 2001
+From: Paul Wankadia <junyer@chromium.org>
+Date: Tue, 14 Apr 2020 16:54:51 +0000
+Subject: [PATCH] Clean up a call to set_utf8().
+
+This is part of an effort to rewrite calls to utf8() and set_utf8()
+(in RE2::Options) as calls to encoding() and set_encoding(),
+respectively. utf8() and set_utf8() have been marked as the "legacy"
+interface since 2008, so it is long past time that we get rid of them.
+
+R=parastoog@google.com
+
+Change-Id: I62c48cd575a55b519d5264ed857f927c163068b2
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2145261
+Reviewed-by: Parastoo Geranmayeh <parastoog@google.com>
+Commit-Queue: Paul Wankadia <junyer@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#758886}
+---
+ components/autofill/core/browser/address_rewriter.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/components/autofill/core/browser/address_rewriter.cc b/components/autofill/core/browser/address_rewriter.cc
+index 1b85a50974c..030a5aba146 100644
+--- a/components/autofill/core/browser/address_rewriter.cc
++++ b/components/autofill/core/browser/address_rewriter.cc
+@@ -57,7 +57,7 @@ void CompileRulesFromData(const std::string& data_string,
+ CompiledRuleVector* compiled_rules) {
+ base::StringPiece data = data_string;
+ re2::RE2::Options options;
+- options.set_utf8(true);
++ options.set_encoding(RE2::Options::EncodingUTF8);
+ options.set_word_boundary(true);
+
+ size_t token_end = 0;
diff --git a/default_app-icon.patch b/default_app-icon.patch
new file mode 100644
index 000000000000..b2a87707d1a2
--- /dev/null
+++ b/default_app-icon.patch
@@ -0,0 +1,21 @@
+--- a/electron/default_app/default_app.ts
++++ b/electron/default_app/default_app.ts
+@@ -60,7 +60,7 @@
+ };
+
+ if (process.platform === 'linux') {
+- options.icon = path.join(__dirname, 'icon.png');
++ options.icon = '/usr/share/pixmaps/electron.png';
+ }
+
+ mainWindow = new BrowserWindow(options);
+--- a/electron/filenames.gni
++++ b/electron/filenames.gni
+@@ -6,7 +6,6 @@
+ ]
+
+ default_app_static_sources = [
+- "default_app/icon.png",
+ "default_app/index.html",
+ "default_app/package.json",
+ "default_app/styles.css",
diff --git a/electron9.desktop b/electron9.desktop
new file mode 100644
index 000000000000..290870a3b086
--- /dev/null
+++ b/electron9.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Type=Application
+Name=Electron 9
+Icon=electron9
+Exec=electron9 %u
+Categories=Development;GTK;
+StartupNotify=true
diff --git a/include-memory-header-to-get-the-definition-of-std-u.patch b/include-memory-header-to-get-the-definition-of-std-u.patch
new file mode 100644
index 000000000000..eb30ad2437f1
--- /dev/null
+++ b/include-memory-header-to-get-the-definition-of-std-u.patch
@@ -0,0 +1,32 @@
+From 40d994e4aa2e4d5077c1810e4623549618a19c05 Mon Sep 17 00:00:00 2001
+From: Piotr Tworek <ptworek@vewd.com>
+Date: Mon, 27 Apr 2020 16:31:46 +0000
+Subject: [PATCH] Include "memory" header to get the definition of
+ std::unique_ptr.
+
+Right now the code im the affected fails to build when using libstdc++
+instead of bundled libcxx. Apparently libcxx pulls the necessary header
+indirectly.
+
+Change-Id: Ie5e86f228434ab16d622ae7a912d9ce607258931
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2164645
+Reviewed-by: Jochen Eisinger <jochen@chromium.org>
+Commit-Queue: Jochen Eisinger <jochen@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#762881}
+---
+ .../blink/renderer/core/html/trust_token_attribute_parsing.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h b/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h
+index f5a7ab03892..ef19cfaf680 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/iwyu-std-numeric_limits-is-defined-in-limits.patch b/iwyu-std-numeric_limits-is-defined-in-limits.patch
new file mode 100644
index 000000000000..e270242afd86
--- /dev/null
+++ b/iwyu-std-numeric_limits-is-defined-in-limits.patch
@@ -0,0 +1,29 @@
+From 74f76a6be385ef056b0be2362c32c728141cca16 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Fri, 17 Apr 2020 16:04:12 +0000
+Subject: [PATCH] IWYU: std::numeric_limits is defined in limits
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Change-Id: Ifbc379adc5bb7242c21e7da0bcfc28f49e4dd06f
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2153111
+Reviewed-by: François Doray <fdoray@chromium.org>
+Commit-Queue: François Doray <fdoray@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#760075}
+---
+ .../graph/policies/background_tab_loading_policy_helpers.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+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 4881c010bb9..593501d16a7 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
+@@ -5,6 +5,7 @@
+ #include "chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h"
+
+ #include <math.h>
++#include <limits>
+
+ #include "base/logging.h"
+
diff --git a/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch b/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
new file mode 100644
index 000000000000..5e9d37aae54f
--- /dev/null
+++ b/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch
@@ -0,0 +1,62 @@
+From aeef68888d4c00b69facead2b934095a8cd17329 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Mon, 20 Apr 2020 18:21:43 +0000
+Subject: [PATCH] libstdc++: fix incomplete-type in AXTree for
+ NodeSetSizePosInSetInfo
+
+has only forward declaration of NodeSetSizePosInSetInfo. Therefore,
+move declaration from ax_tree.cc.
+
+std: :unordered_map<T, U> requires U to be fully declared. ax_tree.h
+Bug: 957519
+Change-Id: Ic1f4bf3ebfea229ece84251e46d4461b31873868
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2132403
+Reviewed-by: David Tseng <dtseng@chromium.org>
+Commit-Queue: David Tseng <dtseng@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#760588}
+---
+ ui/accessibility/ax_tree.cc | 10 ++--------
+ ui/accessibility/ax_tree.h | 9 ++++++++-
+ 2 files changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
+index 7b8d9b1b161..e9154028d66 100644
+--- a/ui/accessibility/ax_tree.cc
++++ b/ui/accessibility/ax_tree.cc
+@@ -567,14 +567,8 @@ 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;
+-};
++AXTree::NodeSetSizePosInSetInfo::NodeSetSizePosInSetInfo() = default;
++AXTree::NodeSetSizePosInSetInfo::~NodeSetSizePosInSetInfo() = default;
+
+ struct AXTree::OrderedSetContent {
+ explicit OrderedSetContent(const AXNode* ordered_set = nullptr)
+diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h
+index a51ca8de4c8..8c1c57517ac 100644
+--- a/ui/accessibility/ax_tree.h
++++ b/ui/accessibility/ax_tree.h
+@@ -328,7 +328,14 @@ 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();
++ ~NodeSetSizePosInSetInfo();
++
++ 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/make-some-of-blink-custom-iterators-STL-compatible.patch b/make-some-of-blink-custom-iterators-STL-compatible.patch
new file mode 100644
index 000000000000..30cbdefcc65f
--- /dev/null
+++ b/make-some-of-blink-custom-iterators-STL-compatible.patch
@@ -0,0 +1,95 @@
+From d3cabbc7321d349a9bffda482df5afc0d4df1ac2 Mon Sep 17 00:00:00 2001
+From: Piotr Tworek <ptworek@vewd.com>
+Date: Thu, 30 Apr 2020 21:33:47 +0000
+Subject: [PATCH] Make some of blink custom iterators STL compatible.
+
+Blink has recently started using functions like std::any_of with some of
+the custom iterators it provides. On Linux this works in the default
+setup using libcxx, but fails with even the most recent versions of
+libstdc++. In all cases the error message (text in bug report) complains
+about lack of matching std::__iterator_category definition.
+
+From what I understand the error message is basically saying those
+iterators are not STL compatible due to missing traits as described
+in https://en.cppreference.com/w/cpp/iterator/iterator_traits. Such
+traits are provided by custom iterators defined in //base, or //cc.
+
+This patch adds the necessary traits to iterators that are currently
+affected by this problem.
+
+Bug: 1076869
+Change-Id: I9950a7100c32499ba96647317fa70b87dc22eaf9
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2174199
+Reviewed-by: Kentaro Hara <haraken@chromium.org>
+Commit-Queue: Piotr Tworek <ptworek@vewd.com>
+Cr-Commit-Position: refs/heads/master@{#764426}
+---
+ .../core/layout/ng/ng_physical_container_fragment.h | 6 ++++++
+ .../blink/renderer/platform/wtf/hash_iterators.h | 12 ++++++++++++
+ third_party/blink/renderer/platform/wtf/hash_table.h | 6 ++++++
+ 3 files changed, 24 insertions(+)
+
+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 1256e77c146..8b93107f2fc 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
+@@ -38,6 +38,12 @@ class CORE_EXPORT NGPhysicalContainerFragment : public NGPhysicalFragment {
+ STACK_ALLOCATED();
+
+ public:
++ using iterator_category = std::bidirectional_iterator_tag;
++ using value_type = NGLink;
++ using difference_type = ptrdiff_t;
++ using pointer = value_type*;
++ using reference = value_type&;
++
+ ConstIterator(const NGLink* current) : current_(current) {}
+
+ const NGLink& operator*() const { return *PostLayoutOrCurrent(); }
+diff --git a/third_party/blink/renderer/platform/wtf/hash_iterators.h b/third_party/blink/renderer/platform/wtf/hash_iterators.h
+index f8e66e6be85..6003d02c509 100644
+--- a/third_party/blink/renderer/platform/wtf/hash_iterators.h
++++ b/third_party/blink/renderer/platform/wtf/hash_iterators.h
+@@ -53,6 +53,12 @@ struct HashTableConstIteratorAdapter<HashTableType,
+ typedef HashTableConstValuesIterator<HashTableType, KeyType, MappedType>
+ ValuesIterator;
+
++ using iterator_category = std::bidirectional_iterator_tag;
++ using value_type = HashTableType;
++ using difference_type = ptrdiff_t;
++ using pointer = value_type*;
++ using reference = value_type&;
++
+ HashTableConstIteratorAdapter() = default;
+ HashTableConstIteratorAdapter(
+ const typename HashTableType::const_iterator& impl)
+@@ -94,6 +100,12 @@ struct HashTableIteratorAdapter<HashTableType,
+ typedef HashTableValuesIterator<HashTableType, KeyType, MappedType>
+ ValuesIterator;
+
++ using iterator_category = std::bidirectional_iterator_tag;
++ using value_type = HashTableType;
++ using difference_type = ptrdiff_t;
++ using pointer = value_type*;
++ using reference = value_type&;
++
+ HashTableIteratorAdapter() = default;
+ HashTableIteratorAdapter(const typename HashTableType::iterator& impl)
+ : impl_(impl) {}
+diff --git a/third_party/blink/renderer/platform/wtf/hash_table.h b/third_party/blink/renderer/platform/wtf/hash_table.h
+index f596fb5d41e..5a4468d6bd1 100644
+--- a/third_party/blink/renderer/platform/wtf/hash_table.h
++++ b/third_party/blink/renderer/platform/wtf/hash_table.h
+@@ -2204,6 +2204,12 @@ struct HashTableConstIteratorAdapter {
+ STACK_ALLOCATED();
+
+ public:
++ using iterator_category = std::bidirectional_iterator_tag;
++ using value_type = HashTableType;
++ using difference_type = ptrdiff_t;
++ using pointer = value_type*;
++ using reference = value_type&;
++
+ HashTableConstIteratorAdapter() = default;
+ HashTableConstIteratorAdapter(
+ const typename HashTableType::const_iterator& impl)
diff --git a/qt5-webengine-glibc-2.33.patch b/qt5-webengine-glibc-2.33.patch
new file mode 100644
index 000000000000..b97e52812e4c
--- /dev/null
+++ b/qt5-webengine-glibc-2.33.patch
@@ -0,0 +1,144 @@
+# Patch made by Kevin Kofler <Kevin@tigcc.ticalc.org>
+# https://bugzilla.redhat.com/show_bug.cgi?id=1904652
+
+diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc 2020-11-07 02:22:36.000000000 +0100
++++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc 2021-01-20 02:14:53.066223906 +0100
+@@ -248,6 +248,18 @@
+ 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
++
+ if (SyscallSets::IsFileSystem(sysno) ||
+ SyscallSets::IsCurrentDirectory(sysno)) {
+ return Error(fs_denied_errno);
+diff -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc
+--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc 2020-11-07 02:22:36.000000000 +0100
++++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.cc 2021-01-22 19:02:55.651668257 +0100
+@@ -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 <sys/syscall.h>
+@@ -353,6 +355,35 @@
+ 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);
+ }
+@@ -385,6 +416,10 @@
+ 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 -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h
+--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h 2020-11-07 02:22:36.000000000 +0100
++++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/sigsys_handlers.h 2021-01-20 02:11:04.583714199 +0100
+@@ -62,6 +62,10 @@
+ // sched_setparam(), sched_setscheduler()
+ SANDBOX_EXPORT intptr_t
+ SIGSYSSchedHandler(const struct 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 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 -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc
+--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc 2020-11-07 02:22:36.000000000 +0100
++++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.cc 2021-01-20 02:41:12.033133269 +0100
+@@ -261,4 +261,13 @@
+
+ #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 -ur qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h
+--- qtwebengine-everywhere-src-5.15.2/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h 2020-11-07 02:22:36.000000000 +0100
++++ qtwebengine-everywhere-src-5.15.2-#1904652/src/3rdparty/chromium/sandbox/linux/services/syscall_wrappers.h 2021-01-20 02:40:26.499827829 +0100
+@@ -17,6 +17,7 @@
+ struct rlimit64;
+ struct cap_hdr;
+ struct cap_data;
++struct stat64;
+
+ namespace sandbox {
+
+@@ -84,6 +85,9 @@
+ 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/use-system-libraries-in-node.patch b/use-system-libraries-in-node.patch
new file mode 100644
index 000000000000..660c89ea2390
--- /dev/null
+++ b/use-system-libraries-in-node.patch
@@ -0,0 +1,56 @@
+--- a/third_party/electron_node/BUILD.gn
++++ b/third_party/electron_node/BUILD.gn
+@@ -42,6 +42,18 @@
+ node_module_version = ""
+ }
+
++if (is_linux) {
++ import("//build/config/linux/pkg_config.gni")
++
++ pkg_config("cares") {
++ packages = [ "libcares" ]
++ }
++
++ pkg_config("nghttp2") {
++ packages = [ "libnghttp2" ]
++ }
++}
++
+ assert(!node_use_dtrace, "node_use_dtrace not supported in GN")
+ assert(!node_use_etw, "node_use_etw not supported in GN")
+
+@@ -203,12 +215,8 @@
+ component("node_lib") {
+ deps = [
+ ":node_js2c",
+- "deps/cares",
+ "deps/histogram",
+- "deps/http_parser",
+ "deps/llhttp",
+- "deps/nghttp2",
+- "deps/zlib",
+ "//third_party/brotli:dec",
+ "//third_party/brotli:enc",
+ "//v8:v8_libplatform",
+@@ -222,6 +230,21 @@
+ public_configs = [ ":node_lib_config" ]
+ include_dirs = [ "src" ]
+ libs = []
++ if (is_linux) {
++ configs += [
++ ":cares",
++ ":nghttp2",
++ ]
++ deps += [ "//third_party/zlib" ]
++ libs += [ "http_parser" ]
++ } else {
++ deps += [
++ "deps/cares",
++ "deps/http_parser",
++ "deps/nghttp2",
++ "deps/zlib",
++ ]
++ }
+ cflags_cc = [
+ "-Wno-deprecated-declarations",
+ "-Wno-implicit-fallthrough",
diff --git a/v8-remove-soon-to-be-removed-getAllFieldPositions.patch b/v8-remove-soon-to-be-removed-getAllFieldPositions.patch
new file mode 100644
index 000000000000..41d1aced2607
--- /dev/null
+++ b/v8-remove-soon-to-be-removed-getAllFieldPositions.patch
@@ -0,0 +1,172 @@
+From 3f8dc4b2e5baf77b463334c769af85b79d8c1463 Mon Sep 17 00:00:00 2001
+From: Frank Tang <ftang@chromium.org>
+Date: Fri, 3 Apr 2020 23:13:54 -0700
+Subject: [PATCH] [intl] Remove soon-to-be removed getAllFieldPositions
+
+Needed to land ICU67.1 soon.
+
+Bug: v8:10393
+Change-Id: I3c7737ca600d6ccfdc46ffaddfb318ce60bc7618
+Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2136489
+Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
+Commit-Queue: Frank Tang <ftang@chromium.org>
+Cr-Commit-Position: refs/heads/master@{#67027}
+---
+ src/objects/js-number-format.cc | 77 +++++++++++++++++----------------
+ 1 file changed, 39 insertions(+), 38 deletions(-)
+
+diff --git a/src/objects/js-number-format.cc b/src/objects/js-number-format.cc
+index ad831c5c36..bcd44031d5 100644
+--- a/src/objects/js-number-format.cc
++++ b/src/objects/js-number-format.cc
+@@ -1241,44 +1241,33 @@ MaybeHandle<JSNumberFormat> JSNumberFormat::New(Isolate* isolate,
+ }
+
+ namespace {
+-Maybe<icu::UnicodeString> IcuFormatNumber(
++Maybe<bool> IcuFormatNumber(
+ Isolate* isolate,
+ const icu::number::LocalizedNumberFormatter& number_format,
+- Handle<Object> numeric_obj, icu::FieldPositionIterator* fp_iter) {
++ Handle<Object> numeric_obj, icu::number::FormattedNumber* formatted) {
+ // If it is BigInt, handle it differently.
+ UErrorCode status = U_ZERO_ERROR;
+- icu::number::FormattedNumber formatted;
+ if (numeric_obj->IsBigInt()) {
+ Handle<BigInt> big_int = Handle<BigInt>::cast(numeric_obj);
+ Handle<String> big_int_string;
+ ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate, big_int_string,
+ BigInt::ToString(isolate, big_int),
+- Nothing<icu::UnicodeString>());
+- formatted = number_format.formatDecimal(
++ Nothing<bool>());
++ *formatted = number_format.formatDecimal(
+ {big_int_string->ToCString().get(), big_int_string->length()}, status);
+ } else {
+ double number = numeric_obj->IsNaN()
+ ? std::numeric_limits<double>::quiet_NaN()
+ : numeric_obj->Number();
+- formatted = number_format.formatDouble(number, status);
++ *formatted = number_format.formatDouble(number, status);
+ }
+ if (U_FAILURE(status)) {
+ // This happen because of icu data trimming trim out "unit".
+ // See https://bugs.chromium.org/p/v8/issues/detail?id=8641
+- THROW_NEW_ERROR_RETURN_VALUE(isolate,
+- NewTypeError(MessageTemplate::kIcuError),
+- Nothing<icu::UnicodeString>());
+- }
+- if (fp_iter) {
+- formatted.getAllFieldPositions(*fp_iter, status);
+- }
+- icu::UnicodeString result = formatted.toString(status);
+- if (U_FAILURE(status)) {
+- THROW_NEW_ERROR_RETURN_VALUE(isolate,
+- NewTypeError(MessageTemplate::kIcuError),
+- Nothing<icu::UnicodeString>());
++ THROW_NEW_ERROR_RETURN_VALUE(
++ isolate, NewTypeError(MessageTemplate::kIcuError), Nothing<bool>());
+ }
+- return Just(result);
++ return Just(true);
+ }
+
+ } // namespace
+@@ -1289,10 +1278,16 @@ MaybeHandle<String> JSNumberFormat::FormatNumeric(
+ Handle<Object> numeric_obj) {
+ DCHECK(numeric_obj->IsNumeric());
+
+- Maybe<icu::UnicodeString> maybe_format =
+- IcuFormatNumber(isolate, number_format, numeric_obj, nullptr);
++ icu::number::FormattedNumber formatted;
++ Maybe<bool> maybe_format =
++ IcuFormatNumber(isolate, number_format, numeric_obj, &formatted);
+ MAYBE_RETURN(maybe_format, Handle<String>());
+- return Intl::ToString(isolate, maybe_format.FromJust());
++ UErrorCode status = U_ZERO_ERROR;
++ icu::UnicodeString result = formatted.toString(status);
++ if (U_FAILURE(status)) {
++ THROW_NEW_ERROR(isolate, NewTypeError(MessageTemplate::kIcuError), String);
++ }
++ return Intl::ToString(isolate, result);
+ }
+
+ namespace {
+@@ -1405,12 +1400,18 @@ std::vector<NumberFormatSpan> FlattenRegionsToParts(
+ }
+
+ namespace {
+-Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
+- icu::FieldPositionIterator* fp_iter,
++Maybe<int> ConstructParts(Isolate* isolate,
++ icu::number::FormattedNumber* formatted,
+ Handle<JSArray> result, int start_index,
+ Handle<Object> numeric_obj, bool style_is_unit) {
++ UErrorCode status = U_ZERO_ERROR;
++ icu::UnicodeString formatted_text = formatted->toString(status);
++ if (U_FAILURE(status)) {
++ THROW_NEW_ERROR_RETURN_VALUE(
++ isolate, NewTypeError(MessageTemplate::kIcuError), Nothing<int>());
++ }
+ DCHECK(numeric_obj->IsNumeric());
+- int32_t length = formatted.length();
++ int32_t length = formatted_text.length();
+ int index = start_index;
+ if (length == 0) return Just(index);
+
+@@ -1419,13 +1420,14 @@ Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
+ // other region covers some part of the formatted string. It's possible
+ // there's another field with exactly the same begin and end as this backdrop,
+ // in which case the backdrop's field_id of -1 will give it lower priority.
+- regions.push_back(NumberFormatSpan(-1, 0, formatted.length()));
++ regions.push_back(NumberFormatSpan(-1, 0, formatted_text.length()));
+
+ {
+- icu::FieldPosition fp;
+- while (fp_iter->next(fp)) {
+- regions.push_back(NumberFormatSpan(fp.getField(), fp.getBeginIndex(),
+- fp.getEndIndex()));
++ icu::ConstrainedFieldPosition cfp;
++ cfp.constrainCategory(UFIELD_CATEGORY_NUMBER);
++ while (formatted->nextPosition(cfp, status)) {
++ regions.push_back(
++ NumberFormatSpan(cfp.getField(), cfp.getStart(), cfp.getLimit()));
+ }
+ }
+
+@@ -1447,7 +1449,7 @@ Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
+ Handle<String> substring;
+ ASSIGN_RETURN_ON_EXCEPTION_VALUE(
+ isolate, substring,
+- Intl::ToString(isolate, formatted, part.begin_pos, part.end_pos),
++ Intl::ToString(isolate, formatted_text, part.begin_pos, part.end_pos),
+ Nothing<int>());
+ Intl::AddElement(isolate, result, index, field_type_string, substring);
+ ++index;
+@@ -1467,20 +1469,19 @@ MaybeHandle<JSArray> JSNumberFormat::FormatToParts(
+ number_format->icu_number_formatter().raw();
+ CHECK_NOT_NULL(fmt);
+
+- icu::FieldPositionIterator fp_iter;
+- Maybe<icu::UnicodeString> maybe_format =
+- IcuFormatNumber(isolate, *fmt, numeric_obj, &fp_iter);
++ icu::number::FormattedNumber formatted;
++ Maybe<bool> maybe_format =
++ IcuFormatNumber(isolate, *fmt, numeric_obj, &formatted);
+ MAYBE_RETURN(maybe_format, Handle<JSArray>());
+-
+ UErrorCode status = U_ZERO_ERROR;
++
+ bool style_is_unit =
+ Style::UNIT == StyleFromSkeleton(fmt->toSkeleton(status));
+ CHECK(U_SUCCESS(status));
+
+ Handle<JSArray> result = factory->NewJSArray(0);
+- Maybe<int> maybe_format_to_parts =
+- ConstructParts(isolate, maybe_format.FromJust(), &fp_iter, result, 0,
+- numeric_obj, style_is_unit);
++ Maybe<int> maybe_format_to_parts = ConstructParts(
++ isolate, &formatted, result, 0, numeric_obj, style_is_unit);
+ MAYBE_RETURN(maybe_format_to_parts, Handle<JSArray>());
+
+ return result;