Date: Saturday, September 18, 2021 @ 18:35:54 Author: foutrelis Revision: 1017058
archrelease: copy trunk to community-staging-x86_64 Added: electron9/repos/community-staging-x86_64/ electron9/repos/community-staging-x86_64/PKGBUILD (from rev 1017057, electron9/trunk/PKGBUILD) electron9/repos/community-staging-x86_64/add-missing-algorithm-header-in-crx_install_error.cc.patch (from rev 1017057, electron9/trunk/add-missing-algorithm-header-in-crx_install_error.cc.patch) electron9/repos/community-staging-x86_64/avoid-double-destruction-of-ServiceWorkerObjectHost.patch (from rev 1017057, electron9/trunk/avoid-double-destruction-of-ServiceWorkerObjectHost.patch) electron9/repos/community-staging-x86_64/chromium-83-gcc-10.patch (from rev 1017057, electron9/trunk/chromium-83-gcc-10.patch) electron9/repos/community-staging-x86_64/chromium-ffmpeg-4.3.patch (from rev 1017057, electron9/trunk/chromium-ffmpeg-4.3.patch) electron9/repos/community-staging-x86_64/chromium-harfbuzz-3.0.0.patch (from rev 1017057, electron9/trunk/chromium-harfbuzz-3.0.0.patch) electron9/repos/community-staging-x86_64/chromium-include-limits.patch (from rev 1017057, electron9/trunk/chromium-include-limits.patch) electron9/repos/community-staging-x86_64/chromium-skia-harmony.patch (from rev 1017057, electron9/trunk/chromium-skia-harmony.patch) electron9/repos/community-staging-x86_64/clean-up-a-call-to-set_utf8.patch (from rev 1017057, electron9/trunk/clean-up-a-call-to-set_utf8.patch) electron9/repos/community-staging-x86_64/default_app-icon.patch (from rev 1017057, electron9/trunk/default_app-icon.patch) electron9/repos/community-staging-x86_64/disk_data_allocator-Metadata-constructor.patch (from rev 1017057, electron9/trunk/disk_data_allocator-Metadata-constructor.patch) electron9/repos/community-staging-x86_64/electron9.desktop (from rev 1017057, electron9/trunk/electron9.desktop) electron9/repos/community-staging-x86_64/include-memory-header-to-get-the-definition-of-std-u.patch (from rev 1017057, electron9/trunk/include-memory-header-to-get-the-definition-of-std-u.patch) electron9/repos/community-staging-x86_64/iwyu-std-numeric_limits-is-defined-in-limits.patch (from rev 1017057, electron9/trunk/iwyu-std-numeric_limits-is-defined-in-limits.patch) electron9/repos/community-staging-x86_64/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch (from rev 1017057, electron9/trunk/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch) electron9/repos/community-staging-x86_64/make-some-of-blink-custom-iterators-STL-compatible.patch (from rev 1017057, electron9/trunk/make-some-of-blink-custom-iterators-STL-compatible.patch) electron9/repos/community-staging-x86_64/qt5-webengine-glibc-2.33.patch (from rev 1017057, electron9/trunk/qt5-webengine-glibc-2.33.patch) electron9/repos/community-staging-x86_64/skia-harfbuzz-3.0.0.patch (from rev 1017057, electron9/trunk/skia-harfbuzz-3.0.0.patch) electron9/repos/community-staging-x86_64/sql-make-VirtualCursor-standard-layout-type.patch (from rev 1017057, electron9/trunk/sql-make-VirtualCursor-standard-layout-type.patch) electron9/repos/community-staging-x86_64/use-system-libraries-in-node.patch (from rev 1017057, electron9/trunk/use-system-libraries-in-node.patch) electron9/repos/community-staging-x86_64/v8-call-new-ListFormatter-createInstance.patch (from rev 1017057, electron9/trunk/v8-call-new-ListFormatter-createInstance.patch) electron9/repos/community-staging-x86_64/v8-remove-soon-to-be-removed-getAllFieldPositions.patch (from rev 1017057, electron9/trunk/v8-remove-soon-to-be-removed-getAllFieldPositions.patch) ------------------------------------------------------------+ PKGBUILD | 250 +++++++++++ add-missing-algorithm-header-in-crx_install_error.cc.patch | 29 + avoid-double-destruction-of-ServiceWorkerObjectHost.patch | 138 ++++++ chromium-83-gcc-10.patch | 64 ++ chromium-ffmpeg-4.3.patch | 21 chromium-harfbuzz-3.0.0.patch | 20 chromium-include-limits.patch | 31 + chromium-skia-harmony.patch | 14 clean-up-a-call-to-set_utf8.patch | 34 + default_app-icon.patch | 21 disk_data_allocator-Metadata-constructor.patch | 18 electron9.desktop | 7 include-memory-header-to-get-the-definition-of-std-u.patch | 32 + iwyu-std-numeric_limits-is-defined-in-limits.patch | 29 + libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch | 62 ++ make-some-of-blink-custom-iterators-STL-compatible.patch | 95 ++++ qt5-webengine-glibc-2.33.patch | 144 ++++++ skia-harfbuzz-3.0.0.patch | 99 ++++ sql-make-VirtualCursor-standard-layout-type.patch | 238 ++++++++++ use-system-libraries-in-node.patch | 56 ++ v8-call-new-ListFormatter-createInstance.patch | 95 ++++ v8-remove-soon-to-be-removed-getAllFieldPositions.patch | 172 +++++++ 22 files changed, 1669 insertions(+) Copied: electron9/repos/community-staging-x86_64/PKGBUILD (from rev 1017057, electron9/trunk/PKGBUILD) =================================================================== --- community-staging-x86_64/PKGBUILD (rev 0) +++ community-staging-x86_64/PKGBUILD 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,250 @@ +# Maintainer: Nicola Squartini <tens...@gmail.com> + +pkgname=electron9 +pkgver=9.4.4 +_commit=f981f3a7c41767fa5ec13cbc8e2242129db96e7a +_chromiumver=83.0.4103.122 +pkgrel=2 +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' 'libnghttp2' + '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-harfbuzz-3.0.0.patch' + 'skia-harfbuzz-3.0.0.patch' + 'chromium-include-limits.patch' + 'chromium-skia-harmony.patch' + 'sql-make-VirtualCursor-standard-layout-type.patch' + 'disk_data_allocator-Metadata-constructor.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-call-new-ListFormatter-createInstance.patch' + 'v8-remove-soon-to-be-removed-getAllFieldPositions.patch' + ) +sha256sums=('SKIP' + 'SKIP' + '93236bbc903c6b990e6562f0aed33ebe67c1ee365b7ffd094a2febcd3a5cad76' + 'dd2d248831dd4944d385ebf008426e66efe61d6fdf66f8932c963a12167947b4' + 'c7eadac877179e586d0cce7f898aa1462b4c207733e68ecc17de9754b691713a' + '0e2a78e4aa7272ab0ff4a4c467750e01bad692a026ad9828aaf06d2a9418b9d8' + 'd793842e9584bf75e3779918297ba0ffa6dd05394ef5b2bf5fb73aa9c86a7e2f' + '3e5ba8c0a70a4bc673deec0c61eb2b58f05a4c784cbdb7c8118be1eb6580db6d' + '5390304b5f544868985ce00a3ec082d4ece2dacb1c73cdb35dd4facfea12449a' + '5600cfa40254fa3fa2cb541d3b55cc8f7a9231de8d2830c25a7651aa392de16f' + '7ce947944a139e66774dfc7249bf7c3069f07f83a0f1b2c1a1b14287a7e15928' + 'fffbdd7479292462a1b4e3846c610ee5a0f0d409ded11426f21dd47051604dfd' + 'cb8e4c347169f145d2f08329e25125eb2a3682bfc3530c674cf1ffad89431bdf' + '771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1' + 'dd317f85e5abfdcfc89c6f23f4c8edbcdebdd5e083dcec770e5da49ee647d150' + '52a63a84a10dc501a0712a76170cfa12abc02ed4efe93486a1e6139b1670f90c' + '58c41713eb6fb33b6eef120f4324fa1fb8123b1fbc4ecbe5662f1f9779b9b6af' + '071326135bc25226aa165639dff80a03670a17548f2d2ff5cc4f40982b39c52a' + '675fb3d6276cce569a641436465f58d5709d1d4a5f62b7052989479fd4aaea24' + '50687079426094f2056d1f4806dc30fc8d6bad16190520e57ba087ec5db1d778' + '3d7f20e1d2ee7d73ed25e708c0d59a0cb215fcce10a379e3d48a856533c4b0b7' + '44ebcff050a1c849819d66399c14bd711801d0eb64f518d292d3d6efedce3b3a' + '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 -Np1 -i ../chromium-include-limits.patch + patch -Np0 -i ../chromium-skia-harmony.patch + patch -Np1 -i ../sql-make-VirtualCursor-standard-layout-type.patch + patch -Np0 -i ../disk_data_allocator-Metadata-constructor.patch + patch -Np4 -i ../qt5-webengine-glibc-2.33.patch + patch -Np1 -i ../chromium-harfbuzz-3.0.0.patch + patch -Np1 -d third_party/skia <../skia-harfbuzz-3.0.0.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-call-new-ListFormatter-createInstance.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 +} Copied: electron9/repos/community-staging-x86_64/add-missing-algorithm-header-in-crx_install_error.cc.patch (from rev 1017057, electron9/trunk/add-missing-algorithm-header-in-crx_install_error.cc.patch) =================================================================== --- community-staging-x86_64/add-missing-algorithm-header-in-crx_install_error.cc.patch (rev 0) +++ community-staging-x86_64/add-missing-algorithm-header-in-crx_install_error.cc.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,29 @@ +From 2b9d6daa0ab5ce45ec5555466d5a5a583a020ea8 Mon Sep 17 00:00:00 2001 +From: Daniel Playfair Cal <daniel.playfair....@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 <roc...@google.com> +Commit-Queue: Ken Rockot <roc...@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" + Copied: electron9/repos/community-staging-x86_64/avoid-double-destruction-of-ServiceWorkerObjectHost.patch (from rev 1017057, electron9/trunk/avoid-double-destruction-of-ServiceWorkerObjectHost.patch) =================================================================== --- community-staging-x86_64/avoid-double-destruction-of-ServiceWorkerObjectHost.patch (rev 0) +++ community-staging-x86_64/avoid-double-destruction-of-ServiceWorkerObjectHost.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,138 @@ +From bd59ce32629ef684624821419c43967b73d2989e Mon Sep 17 00:00:00 2001 +From: Hiroki Nakagawa <nhir...@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 <shim...@chromium.org> +Commit-Queue: Hiroki Nakagawa <nhir...@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 Copied: electron9/repos/community-staging-x86_64/chromium-83-gcc-10.patch (from rev 1017057, electron9/trunk/chromium-83-gcc-10.patch) =================================================================== --- community-staging-x86_64/chromium-83-gcc-10.patch (rev 0) +++ community-staging-x86_64/chromium-83-gcc-10.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,64 @@ +From e473f41284ccc8fa4bc4622d087194b18a1ec23a Mon Sep 17 00:00:00 2001 +From: Stephan Hartmann <sth...@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 + Copied: electron9/repos/community-staging-x86_64/chromium-ffmpeg-4.3.patch (from rev 1017057, electron9/trunk/chromium-ffmpeg-4.3.patch) =================================================================== --- community-staging-x86_64/chromium-ffmpeg-4.3.patch (rev 0) +++ community-staging-x86_64/chromium-ffmpeg-4.3.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -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) Copied: electron9/repos/community-staging-x86_64/chromium-harfbuzz-3.0.0.patch (from rev 1017057, electron9/trunk/chromium-harfbuzz-3.0.0.patch) =================================================================== --- community-staging-x86_64/chromium-harfbuzz-3.0.0.patch (rev 0) +++ community-staging-x86_64/chromium-harfbuzz-3.0.0.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,20 @@ +# https://github.com/chromium/chromium/commit/b289f6f3fcbc + +diff --git a/components/paint_preview/common/subset_font.cc b/components/paint_preview/common/subset_font.cc +index 8ff0540d9a..20a7d37474 100644 +--- a/components/paint_preview/common/subset_font.cc ++++ b/components/paint_preview/common/subset_font.cc +@@ -72,9 +72,11 @@ sk_sp<SkData> SubsetFont(SkTypeface* typeface, const GlyphUsage& usage) { + hb_set_t* glyphs = + hb_subset_input_glyph_set(input.get()); // Owned by |input|. + usage.ForEach(base::BindRepeating(&AddGlyphs, base::Unretained(glyphs))); +- hb_subset_input_set_retain_gids(input.get(), true); ++ hb_subset_input_set_flags(input.get(), HB_SUBSET_FLAGS_RETAIN_GIDS); + +- HbScoped<hb_face_t> subset_face(hb_subset(face.get(), input.get())); ++ HbScoped<hb_face_t> subset_face(hb_subset_or_fail(face.get(), input.get())); ++ if (!subset_face) ++ return nullptr; + HbScoped<hb_blob_t> subset_blob(hb_face_reference_blob(subset_face.get())); + if (!subset_blob) + return nullptr; Copied: electron9/repos/community-staging-x86_64/chromium-include-limits.patch (from rev 1017057, electron9/trunk/chromium-include-limits.patch) =================================================================== --- community-staging-x86_64/chromium-include-limits.patch (rev 0) +++ community-staging-x86_64/chromium-include-limits.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,31 @@ +--- a/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc ++++ b/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +@@ -37,6 +37,7 @@ + + #include <algorithm> + #include <array> ++#include <limits> + #include "absl/base/internal/hide_ptr.h" + #include "absl/base/internal/raw_logging.h" + #include "absl/base/internal/spinlock.h" +--- a/third_party/angle/src/libANGLE/HandleAllocator.cpp ++++ b/third_party/angle/src/libANGLE/HandleAllocator.cpp +@@ -11,6 +11,7 @@ + + #include <algorithm> + #include <functional> ++#include <limits> + + #include "common/debug.h" + +--- a/third_party/perfetto/src/trace_processor/containers/string_pool.h ++++ b/third_party/perfetto/src/trace_processor/containers/string_pool.h +@@ -17,6 +17,8 @@ + #ifndef SRC_TRACE_PROCESSOR_CONTAINERS_STRING_POOL_H_ + #define SRC_TRACE_PROCESSOR_CONTAINERS_STRING_POOL_H_ + ++#include <limits> ++ + #include <stddef.h> + #include <stdint.h> + Copied: electron9/repos/community-staging-x86_64/chromium-skia-harmony.patch (from rev 1017057, electron9/trunk/chromium-skia-harmony.patch) =================================================================== --- community-staging-x86_64/chromium-skia-harmony.patch (rev 0) +++ community-staging-x86_64/chromium-skia-harmony.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -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; Copied: electron9/repos/community-staging-x86_64/clean-up-a-call-to-set_utf8.patch (from rev 1017057, electron9/trunk/clean-up-a-call-to-set_utf8.patch) =================================================================== --- community-staging-x86_64/clean-up-a-call-to-set_utf8.patch (rev 0) +++ community-staging-x86_64/clean-up-a-call-to-set_utf8.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,34 @@ +From ede390a0b18e4565abf8ac1e1ff717e1d43fc320 Mon Sep 17 00:00:00 2001 +From: Paul Wankadia <jun...@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=parast...@google.com + +Change-Id: I62c48cd575a55b519d5264ed857f927c163068b2 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2145261 +Reviewed-by: Parastoo Geranmayeh <parast...@google.com> +Commit-Queue: Paul Wankadia <jun...@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; Copied: electron9/repos/community-staging-x86_64/default_app-icon.patch (from rev 1017057, electron9/trunk/default_app-icon.patch) =================================================================== --- community-staging-x86_64/default_app-icon.patch (rev 0) +++ community-staging-x86_64/default_app-icon.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -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", Copied: electron9/repos/community-staging-x86_64/disk_data_allocator-Metadata-constructor.patch (from rev 1017057, electron9/trunk/disk_data_allocator-Metadata-constructor.patch) =================================================================== --- community-staging-x86_64/disk_data_allocator-Metadata-constructor.patch (rev 0) +++ community-staging-x86_64/disk_data_allocator-Metadata-constructor.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,18 @@ +# Modeled after https://github.com/chromium/chromium/commit/d62de64e2fd2 + +--- third_party/blink/renderer/platform/disk_data_allocator.h.orig 2021-09-18 15:20:46.550131515 +0000 ++++ third_party/blink/renderer/platform/disk_data_allocator.h 2021-09-18 15:21:20.868676978 +0000 +@@ -36,12 +36,12 @@ class PLATFORM_EXPORT DiskDataAllocator + public: + int64_t start_offset() const { return start_offset_; } + size_t size() const { return size_; } +- Metadata(Metadata&& other) = delete; + + private: + Metadata(int64_t start_offset, size_t size) + : start_offset_(start_offset), size_(size) {} + Metadata(const Metadata& other) = default; ++ Metadata(Metadata&& other) = default; + Metadata& operator=(const Metadata& other) = default; + + int64_t start_offset_; Copied: electron9/repos/community-staging-x86_64/electron9.desktop (from rev 1017057, electron9/trunk/electron9.desktop) =================================================================== --- community-staging-x86_64/electron9.desktop (rev 0) +++ community-staging-x86_64/electron9.desktop 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=Electron 9 +Icon=electron9 +Exec=electron9 %u +Categories=Development;GTK; +StartupNotify=true Copied: electron9/repos/community-staging-x86_64/include-memory-header-to-get-the-definition-of-std-u.patch (from rev 1017057, electron9/trunk/include-memory-header-to-get-the-definition-of-std-u.patch) =================================================================== --- community-staging-x86_64/include-memory-header-to-get-the-definition-of-std-u.patch (rev 0) +++ community-staging-x86_64/include-memory-header-to-get-the-definition-of-std-u.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,32 @@ +From 40d994e4aa2e4d5077c1810e4623549618a19c05 Mon Sep 17 00:00:00 2001 +From: Piotr Tworek <ptwo...@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 <joc...@chromium.org> +Commit-Queue: Jochen Eisinger <joc...@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" Copied: electron9/repos/community-staging-x86_64/iwyu-std-numeric_limits-is-defined-in-limits.patch (from rev 1017057, electron9/trunk/iwyu-std-numeric_limits-is-defined-in-limits.patch) =================================================================== --- community-staging-x86_64/iwyu-std-numeric_limits-is-defined-in-limits.patch (rev 0) +++ community-staging-x86_64/iwyu-std-numeric_limits-is-defined-in-limits.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,29 @@ +From 74f76a6be385ef056b0be2362c32c728141cca16 Mon Sep 17 00:00:00 2001 +From: Stephan Hartmann <sth...@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 <fdo...@chromium.org> +Commit-Queue: François Doray <fdo...@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" + Copied: electron9/repos/community-staging-x86_64/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch (from rev 1017057, electron9/trunk/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch) =================================================================== --- community-staging-x86_64/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch (rev 0) +++ community-staging-x86_64/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,62 @@ +From aeef68888d4c00b69facead2b934095a8cd17329 Mon Sep 17 00:00:00 2001 +From: Stephan Hartmann <sth...@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 <dts...@chromium.org> +Commit-Queue: David Tseng <dts...@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. Copied: electron9/repos/community-staging-x86_64/make-some-of-blink-custom-iterators-STL-compatible.patch (from rev 1017057, electron9/trunk/make-some-of-blink-custom-iterators-STL-compatible.patch) =================================================================== --- community-staging-x86_64/make-some-of-blink-custom-iterators-STL-compatible.patch (rev 0) +++ community-staging-x86_64/make-some-of-blink-custom-iterators-STL-compatible.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,95 @@ +From d3cabbc7321d349a9bffda482df5afc0d4df1ac2 Mon Sep 17 00:00:00 2001 +From: Piotr Tworek <ptwo...@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 <hara...@chromium.org> +Commit-Queue: Piotr Tworek <ptwo...@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) Copied: electron9/repos/community-staging-x86_64/qt5-webengine-glibc-2.33.patch (from rev 1017057, electron9/trunk/qt5-webengine-glibc-2.33.patch) =================================================================== --- community-staging-x86_64/qt5-webengine-glibc-2.33.patch (rev 0) +++ community-staging-x86_64/qt5-webengine-glibc-2.33.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,144 @@ +# Patch made by Kevin Kofler <ke...@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_ Copied: electron9/repos/community-staging-x86_64/skia-harfbuzz-3.0.0.patch (from rev 1017057, electron9/trunk/skia-harfbuzz-3.0.0.patch) =================================================================== --- community-staging-x86_64/skia-harfbuzz-3.0.0.patch (rev 0) +++ community-staging-x86_64/skia-harfbuzz-3.0.0.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,99 @@ +# Minimal diff for harfbuzz 3.0.0 support; based on: +# https://github.com/google/skia/commit/66684b17b382 +# https://github.com/google/skia/commit/51d83abcd24a + +diff --git a/gn/skia.gni b/gn/skia.gni +index d98fdc19ee..199335d5c4 100644 +--- a/gn/skia.gni ++++ b/gn/skia.gni +@@ -34,7 +34,6 @@ declare_args() { + skia_include_multiframe_procs = false + skia_lex = false + skia_libgifcodec_path = "third_party/externals/libgifcodec" +- skia_pdf_subset_harfbuzz = false # TODO: set skia_pdf_subset_harfbuzz to skia_use_harfbuzz. + skia_qt_path = getenv("QT_PATH") + skia_skqp_global_error_tolerance = 0 + skia_tools_require_resources = false +@@ -99,6 +97,10 @@ declare_args() { + skia_use_libfuzzer_defaults = true + } + ++declare_args() { ++ skia_pdf_subset_harfbuzz = skia_use_harfbuzz ++} ++ + declare_args() { + skia_compile_sksl_tests = skia_compile_processors + skia_enable_fontmgr_android = skia_use_expat && skia_use_freetype +diff --git a/src/pdf/SkPDFSubsetFont.cpp b/src/pdf/SkPDFSubsetFont.cpp +index 81c37eef3a..2340a7937b 100644 +--- a/src/pdf/SkPDFSubsetFont.cpp ++++ b/src/pdf/SkPDFSubsetFont.cpp +@@ -49,6 +49,37 @@ static sk_sp<SkData> to_data(HBBlob blob) { + blob.release()); + } + ++template<typename...> using void_t = void; ++template<typename T, typename = void> ++struct SkPDFHarfBuzzSubset { ++ // This is the HarfBuzz 3.0 interface. ++ // hb_subset_flags_t does not exist in 2.0. It isn't dependent on T, so inline the value of ++ // HB_SUBSET_FLAGS_RETAIN_GIDS until 2.0 is no longer supported. ++ static HBFace Make(T input, hb_face_t* face) { ++ // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY. ++ // If it isn't known if a font is 'tricky', retain the hints. ++ hb_subset_input_set_flags(input, 2/*HB_SUBSET_FLAGS_RETAIN_GIDS*/); ++ return HBFace(hb_subset_or_fail(face, input)); ++ } ++}; ++template<typename T> ++struct SkPDFHarfBuzzSubset<T, void_t< ++ decltype(hb_subset_input_set_retain_gids(std::declval<T>(), std::declval<bool>())), ++ decltype(hb_subset_input_set_drop_hints(std::declval<T>(), std::declval<bool>())), ++ decltype(hb_subset(std::declval<hb_face_t*>(), std::declval<T>())) ++ >> ++{ ++ // This is the HarfBuzz 2.0 (non-public) interface, used if it exists. ++ // This code should be removed as soon as all users are migrated to the newer API. ++ static HBFace Make(T input, hb_face_t* face) { ++ hb_subset_input_set_retain_gids(input, true); ++ // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY. ++ // If it isn't known if a font is 'tricky', retain the hints. ++ hb_subset_input_set_drop_hints(input, false); ++ return HBFace(hb_subset(face, input)); ++ } ++}; ++ + static sk_sp<SkData> subset_harfbuzz(sk_sp<SkData> fontData, + const SkPDFGlyphUse& glyphUsage, + int ttcIndex) { +@@ -71,11 +102,10 @@ static sk_sp<SkData> subset_harfbuzz(sk_sp<SkData> fontData, + hb_set_t* glyphs = hb_subset_input_glyph_set(input.get()); + glyphUsage.getSetValues([&glyphs](unsigned gid) { hb_set_add(glyphs, gid);}); + +- hb_subset_input_set_retain_gids(input.get(), true); +- // TODO: When possible, check if a font is 'tricky' with FT_IS_TRICKY. +- // If it isn't known if a font is 'tricky', retain the hints. +- hb_subset_input_set_drop_hints(input.get(), false); +- HBFace subset(hb_subset(face.get(), input.get())); ++ HBFace subset = SkPDFHarfBuzzSubset<hb_subset_input_t*>::Make(input.get(), face.get()); ++ if (!subset) { ++ return nullptr; ++ } + HBBlob result(hb_face_reference_blob(subset.get())); + return to_data(std::move(result)); + } +diff --git a/third_party/harfbuzz/BUILD.gn b/third_party/harfbuzz/BUILD.gn +index 173830de62..4156607ef9 100644 +--- a/third_party/harfbuzz/BUILD.gn ++++ b/third_party/harfbuzz/BUILD.gn +@@ -14,6 +14,9 @@ if (skia_use_system_harfbuzz) { + "harfbuzz", + "harfbuzz-icu", + ] ++ if (skia_pdf_subset_harfbuzz) { ++ libs += [ "harfbuzz-subset" ] ++ } + } + } else { + third_party("harfbuzz") { Copied: electron9/repos/community-staging-x86_64/sql-make-VirtualCursor-standard-layout-type.patch (from rev 1017057, electron9/trunk/sql-make-VirtualCursor-standard-layout-type.patch) =================================================================== --- community-staging-x86_64/sql-make-VirtualCursor-standard-layout-type.patch (rev 0) +++ community-staging-x86_64/sql-make-VirtualCursor-standard-layout-type.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,238 @@ +From 80368f8ba7a8bab13440463a254888311efe3986 Mon Sep 17 00:00:00 2001 +From: Stephan Hartmann <sth...@googlemail.com> +Date: Tue, 4 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 +--- + sql/recover_module/btree.cc | 21 +++++++++++++++------ + sql/recover_module/btree.h | 17 +++++++++++++---- + sql/recover_module/cursor.cc | 24 ++++++++++++------------ + sql/recover_module/cursor.h | 2 +- + sql/recover_module/pager.cc | 7 +++---- + sql/recover_module/pager.h | 5 +++-- + 6 files changed, 47 insertions(+), 29 deletions(-) + +diff --git a/sql/recover_module/btree.cc b/sql/recover_module/btree.cc +index 9ecaafe8a3..839318abf9 100644 +--- a/sql/recover_module/btree.cc ++++ b/sql/recover_module/btree.cc +@@ -135,16 +135,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 d76d076bf6..33114b01fa 100644 +--- a/sql/recover_module/btree.h ++++ b/sql/recover_module/btree.h +@@ -102,7 +102,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; +@@ -150,6 +150,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. +@@ -163,14 +172,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 0029ff9295..42548bc4b5 100644 +--- a/sql/recover_module/cursor.cc ++++ b/sql/recover_module/cursor.cc +@@ -26,7 +26,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(); +@@ -36,18 +36,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()) +@@ -99,13 +99,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"; + +@@ -113,7 +113,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 afcd6900e1..b15c31d425 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 58e75de270..5fe96204e5 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 0e388ddc3b..99314e30ff 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 @@ 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. +@@ -137,7 +138,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_; Copied: electron9/repos/community-staging-x86_64/use-system-libraries-in-node.patch (from rev 1017057, electron9/trunk/use-system-libraries-in-node.patch) =================================================================== --- community-staging-x86_64/use-system-libraries-in-node.patch (rev 0) +++ community-staging-x86_64/use-system-libraries-in-node.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -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", Copied: electron9/repos/community-staging-x86_64/v8-call-new-ListFormatter-createInstance.patch (from rev 1017057, electron9/trunk/v8-call-new-ListFormatter-createInstance.patch) =================================================================== --- community-staging-x86_64/v8-call-new-ListFormatter-createInstance.patch (rev 0) +++ community-staging-x86_64/v8-call-new-ListFormatter-createInstance.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,95 @@ +From 035c305ce7761f51328b45f1bd83e26aef267c9d Mon Sep 17 00:00:00 2001 +From: Frank Tang <ft...@chromium.org> +Date: Thu, 15 Oct 2020 22:44:27 -0700 +Subject: [PATCH] [Intl] call new ListFormatter::createInstance + +The one we currently using is now marked as internal and to be removed +for 68. Migrating to the style which already avaiable in ICU 67-1. + +Bug: v8:11031 +Change-Id: I668382a2e1b8602ddca02bf231c5008a6c92bf2d +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2477751 +Reviewed-by: Jakob Kummerow <jkumme...@chromium.org> +Commit-Queue: Frank Tang <ft...@chromium.org> +Cr-Commit-Position: refs/heads/master@{#70638} +--- + src/objects/js-list-format.cc | 55 ++++++++++++----------------------- + 1 file changed, 18 insertions(+), 37 deletions(-) + +diff --git a/src/objects/js-list-format.cc b/src/objects/js-list-format.cc +index b17d38c43ff5..e48a387be50f 100644 +--- a/src/objects/js-list-format.cc ++++ b/src/objects/js-list-format.cc +@@ -29,46 +29,27 @@ namespace v8 { + namespace internal { + + namespace { +-const char* kStandard = "standard"; +-const char* kOr = "or"; +-const char* kUnit = "unit"; +-const char* kStandardShort = "standard-short"; +-const char* kOrShort = "or-short"; +-const char* kUnitShort = "unit-short"; +-const char* kStandardNarrow = "standard-narrow"; +-const char* kOrNarrow = "or-narrow"; +-const char* kUnitNarrow = "unit-narrow"; +- +-const char* GetIcuStyleString(JSListFormat::Style style, +- JSListFormat::Type type) { ++ ++UListFormatterWidth GetIcuWidth(JSListFormat::Style style) { ++ switch (style) { ++ case JSListFormat::Style::LONG: ++ return ULISTFMT_WIDTH_WIDE; ++ case JSListFormat::Style::SHORT: ++ return ULISTFMT_WIDTH_SHORT; ++ case JSListFormat::Style::NARROW: ++ return ULISTFMT_WIDTH_NARROW; ++ } ++ UNREACHABLE(); ++} ++ ++UListFormatterType GetIcuType(JSListFormat::Type type) { + switch (type) { + case JSListFormat::Type::CONJUNCTION: +- switch (style) { +- case JSListFormat::Style::LONG: +- return kStandard; +- case JSListFormat::Style::SHORT: +- return kStandardShort; +- case JSListFormat::Style::NARROW: +- return kStandardNarrow; +- } ++ return ULISTFMT_TYPE_AND; + case JSListFormat::Type::DISJUNCTION: +- switch (style) { +- case JSListFormat::Style::LONG: +- return kOr; +- case JSListFormat::Style::SHORT: +- return kOrShort; +- case JSListFormat::Style::NARROW: +- return kOrNarrow; +- } ++ return ULISTFMT_TYPE_OR; + case JSListFormat::Type::UNIT: +- switch (style) { +- case JSListFormat::Style::LONG: +- return kUnit; +- case JSListFormat::Style::SHORT: +- return kUnitShort; +- case JSListFormat::Style::NARROW: +- return kUnitNarrow; +- } ++ return ULISTFMT_TYPE_UNITS; + } + UNREACHABLE(); + } +@@ -143,7 +124,7 @@ MaybeHandle<JSListFormat> JSListFormat::New(Isolate* isolate, Handle<Map> map, + icu::Locale icu_locale = r.icu_locale; + UErrorCode status = U_ZERO_ERROR; + icu::ListFormatter* formatter = icu::ListFormatter::createInstance( +- icu_locale, GetIcuStyleString(style_enum, type_enum), status); ++ icu_locale, GetIcuType(type_enum), GetIcuWidth(style_enum), status); + if (U_FAILURE(status) || formatter == nullptr) { + delete formatter; + THROW_NEW_ERROR(isolate, NewRangeError(MessageTemplate::kIcuError), Copied: electron9/repos/community-staging-x86_64/v8-remove-soon-to-be-removed-getAllFieldPositions.patch (from rev 1017057, electron9/trunk/v8-remove-soon-to-be-removed-getAllFieldPositions.patch) =================================================================== --- community-staging-x86_64/v8-remove-soon-to-be-removed-getAllFieldPositions.patch (rev 0) +++ community-staging-x86_64/v8-remove-soon-to-be-removed-getAllFieldPositions.patch 2021-09-18 18:35:54 UTC (rev 1017058) @@ -0,0 +1,172 @@ +From 3f8dc4b2e5baf77b463334c769af85b79d8c1463 Mon Sep 17 00:00:00 2001 +From: Frank Tang <ft...@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 <jkumme...@chromium.org> +Commit-Queue: Frank Tang <ft...@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;