From f5d31cdf31abf5a2059cb4e8dbaec7d86ddc5e46 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich Date: Tue, 14 Jul 2020 19:36:03 +0000 Subject: [PATCH] extra/chromium to 84.0.4147.89-1 --- extra/chromium/PKGBUILD | 93 ++++------ ...rithm-header-in-crx_install_error.cc.patch | 29 --- ...teForCurrentDocument-from-destructor.patch | 71 ++++++++ ...struction-of-ServiceWorkerObjectHost.patch | 138 -------------- extra/chromium/chromium-83-gcc-10.patch | 64 ------- extra/chromium/chromium-ffmpeg-4.3.patch | 21 +++ .../clean-up-a-call-to-set_utf8.patch | 34 ---- ...eader-to-get-the-definition-of-std-u.patch | 32 ---- ...-numeric_limits-is-defined-in-limits.patch | 29 --- ...mplete-type-in-AXTree-for-NodeSetSiz.patch | 62 ------- ...link-custom-iterators-STL-compatible.patch | 95 ---------- ...calls-and-just-send-a-normal-message.patch | 42 +++++ ...n-to-be-removed-getAllFieldPositions.patch | 172 ------------------ 13 files changed, 173 insertions(+), 709 deletions(-) delete mode 100644 extra/chromium/add-missing-algorithm-header-in-crx_install_error.cc.patch create mode 100644 extra/chromium/avoid-calling-DeleteForCurrentDocument-from-destructor.patch delete mode 100644 extra/chromium/avoid-double-destruction-of-ServiceWorkerObjectHost.patch delete mode 100644 extra/chromium/chromium-83-gcc-10.patch create mode 100644 extra/chromium/chromium-ffmpeg-4.3.patch delete mode 100644 extra/chromium/clean-up-a-call-to-set_utf8.patch delete mode 100644 extra/chromium/include-memory-header-to-get-the-definition-of-std-u.patch delete mode 100644 extra/chromium/iwyu-std-numeric_limits-is-defined-in-limits.patch delete mode 100644 extra/chromium/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch delete mode 100644 extra/chromium/make-some-of-blink-custom-iterators-STL-compatible.patch create mode 100644 extra/chromium/remove-NotifyError-calls-and-just-send-a-normal-message.patch delete mode 100644 extra/chromium/v8-remove-soon-to-be-removed-getAllFieldPositions.patch diff --git a/extra/chromium/PKGBUILD b/extra/chromium/PKGBUILD index 6d13e2211..6c44fec00 100644 --- a/extra/chromium/PKGBUILD +++ b/extra/chromium/PKGBUILD @@ -15,9 +15,10 @@ buildarch=12 highmem=1 pkgname=chromium -pkgver=83.0.4103.116 -pkgrel=3 +pkgver=84.0.4147.89 +pkgrel=1 _launcher_ver=6 +_gcc_patchset=3 pkgdesc="A web browser built for speed, simplicity, and security" arch=('x86_64') url="https://www.chromium.org/Home" @@ -25,44 +26,34 @@ license=('BSD') depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt' 'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'json-glib' 'desktop-file-utils' 'hicolor-icon-theme') -makedepends=('python' 'python2' 'gperf' 'yasm' 'mesa' 'ninja' 'nodejs' 'git' - 'libpipewire02' 'libva' 'clang' 'lld' 'gn' 'java-runtime-headless' +makedepends=('python' 'python2' 'gperf' 'mesa' 'ninja' 'nodejs' 'git' 'libva' + 'libpipewire02' 'clang' 'lld' 'gn' 'java-runtime-headless' 'python2-setuptools') optdepends=('libpipewire02: WebRTC desktop sharing under Wayland' - 'libva: hardware-accelerated video decode (experimental)' + 'libva: hardware-accelerated video decode [experimental]' 'kdialog: needed for file dialogs in KDE' 'org.freedesktop.secrets: password storage backend on GNOME / Xfce' 'kwallet: for storing passwords in KWallet on KDE desktops') install=chromium.install source=(https://commondatastorage.googleapis.com/chromium-browser-official/$pkgname-$pkgver.tar.xz chromium-launcher-$_launcher_ver.tar.gz::https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver.tar.gz - clean-up-a-call-to-set_utf8.patch - iwyu-std-numeric_limits-is-defined-in-limits.patch - add-missing-algorithm-header-in-crx_install_error.cc.patch - libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch - include-memory-header-to-get-the-definition-of-std-u.patch - make-some-of-blink-custom-iterators-STL-compatible.patch - avoid-double-destruction-of-ServiceWorkerObjectHost.patch + https://github.com/stha09/chromium-patches/releases/download/chromium-${pkgver%%.*}-patchset-$_gcc_patchset/chromium-${pkgver%%.*}-patchset-$_gcc_patchset.tar.xz + remove-NotifyError-calls-and-just-send-a-normal-message.patch + avoid-calling-DeleteForCurrentDocument-from-destructor.patch force-mp3-files-to-have-a-start-time-of-zero.patch - v8-remove-soon-to-be-removed-getAllFieldPositions.patch + chromium-ffmpeg-4.3.patch chromium-fix-vaapi-on-intel.patch - chromium-83-gcc-10.patch chromium-skia-harmony.patch 0001-crashpad-include-limits.patch chromium-81.0.4044.122-Fix-sandbox-Aw-snap-for-syscalls-403-and-407.patch) -sha256sums=('bb0c7e8dfee9f3a5e30eca7f34fc9f21caefa82a86c058c552f52b1ae2da2ac3' +sha256sums=('17970d998c125b40765141f2cd346d1674f05dbd4a28fdcf31f9e3540890c679' '04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1' - '58c41713eb6fb33b6eef120f4324fa1fb8123b1fbc4ecbe5662f1f9779b9b6af' - '675fb3d6276cce569a641436465f58d5709d1d4a5f62b7052989479fd4aaea24' - '0e2a78e4aa7272ab0ff4a4c467750e01bad692a026ad9828aaf06d2a9418b9d8' - '50687079426094f2056d1f4806dc30fc8d6bad16190520e57ba087ec5db1d778' - '071326135bc25226aa165639dff80a03670a17548f2d2ff5cc4f40982b39c52a' - '3d7f20e1d2ee7d73ed25e708c0d59a0cb215fcce10a379e3d48a856533c4b0b7' - 'd793842e9584bf75e3779918297ba0ffa6dd05394ef5b2bf5fb73aa9c86a7e2f' + 'f77088dd59b170b767ba91c6b410abb778ff2e68553433b24124d398fa4d3ce7' + '3b10917f646f88ae988ca18be9cbef82025abb6a6e5cb00b77a11077192ce32c' + '4e41cb637e96bcef98c119ed052ba1aeab45fca5b89d65955583dab002de783e' 'abc3fad113408332c3b187b083bf33eba59eb5c87fa3ce859023984b5804623c' - 'e042024423027ad3ef729a7e4709bdf9714aea49d64cfbbf46a645a05703abc2' + '5390304b5f544868985ce00a3ec082d4ece2dacb1c73cdb35dd4facfea12449a' 'e495f2477091557b15bff2c99831e0a3db64ea2ebde7dcb22857a6469c944b9a' - '3e5ba8c0a70a4bc673deec0c61eb2b58f05a4c784cbdb7c8118be1eb6580db6d' '771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1' 'df99f49ad58b70c9a3e1827d7e80b62e4363419334ed83373cf55b79c17b6f10' '4837f797a910795bf3161805a3302d5f3701573ca90da8af32b2f4aa62510d20') @@ -78,7 +69,7 @@ declare -gA _system_libs=( [icu]=icu [libdrm]= [libjpeg]=libjpeg - #[libpng]=libpng # https://crbug.com/752403#c10 + [libpng]=libpng # https://crbug.com/752403#c10 [libvpx]=libvpx [libwebp]=libwebp [libxml]=libxml2 @@ -86,7 +77,6 @@ declare -gA _system_libs=( [opus]=opus [re2]=re2 [snappy]=snappy - [yasm]= [zlib]=minizip ) _unwanted_bundled_libs=( @@ -125,45 +115,39 @@ prepare() { third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ third_party/libxml/chromium/*.cc - # https://chromium-review.googlesource.com/c/chromium/src/+/2145261 - patch -Np1 -i ../clean-up-a-call-to-set_utf8.patch + # https://chromium-review.googlesource.com/c/chromium/src/+/2223010 + patch -Np1 -i ../remove-NotifyError-calls-and-just-send-a-normal-message.patch - # https://chromium-review.googlesource.com/c/chromium/src/+/2153111 - patch -Np1 -F3 -i ../iwyu-std-numeric_limits-is-defined-in-limits.patch - - # https://chromium-review.googlesource.com/c/chromium/src/+/2152333 - patch -Np1 -i ../add-missing-algorithm-header-in-crx_install_error.cc.patch - - # https://chromium-review.googlesource.com/c/chromium/src/+/2132403 - patch -Np1 -i ../libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch - - # https://chromium-review.googlesource.com/c/chromium/src/+/2164645 - patch -Np1 -i ../include-memory-header-to-get-the-definition-of-std-u.patch - - # https://chromium-review.googlesource.com/c/chromium/src/+/2174199 - patch -Np1 -i ../make-some-of-blink-custom-iterators-STL-compatible.patch - - # https://chromium-review.googlesource.com/c/chromium/src/+/2094496 - patch -Np1 -i ../avoid-double-destruction-of-ServiceWorkerObjectHost.patch + # https://chromium-review.googlesource.com/c/chromium/src/+/2224737 + patch -Np1 -i ../avoid-calling-DeleteForCurrentDocument-from-destructor.patch # https://chromium-review.googlesource.com/c/chromium/src/+/2268221 patch -Np1 -i ../force-mp3-files-to-have-a-start-time-of-zero.patch - # https://crbug.com/v8/10393 - patch -Np1 -d v8 <../v8-remove-soon-to-be-removed-getAllFieldPositions.patch + # Fixes for building with libstdc++ instead of libc++ + patch -Np1 -i ../patches/chromium-84-AXObject-stl-iterator.patch + patch -Np1 -i ../patches/chromium-84-ListContainerHelper-include-cstring.patch + patch -Np1 -i ../patches/chromium-84-crashpad-include-cstring.patch + patch -Np1 -i ../patches/chromium-84-gcc-10-include-stddef.patch + patch -Np1 -i ../patches/chromium-84-gcc-10-webrtc-include-stddef.patch + patch -Np1 -i ../patches/chromium-84-gcc-DCHECK_EQ-unique_ptr.patch + patch -Np1 -i ../patches/chromium-84-std-vector-const.patch - # Fixes from Gentoo - patch -Np1 -i ../chromium-83-gcc-10.patch - - # https://crbug.com/skia/6663#c10 - patch -Np0 -i ../chromium-skia-harmony.patch + # https://crbug.com/1095962 + patch -Np1 -i ../chromium-ffmpeg-4.3.patch # Patch from rpmfusion: chromium-freeworld patch -Np1 -i ../chromium-fix-vaapi-on-intel.patch + # https://crbug.com/skia/6663#c10 + patch -Np0 -i ../chromium-skia-harmony.patch + # Force script incompatible with Python 3 to use /usr/bin/python2 sed -i '1s|python$|&2|' third_party/dom_distiller_js/protoc_plugins/*.py + # Make xcbgen available to ui/gfx/x/gen_xproto.py running under Python 2 + ln -s /usr/lib/python3.*/site-packages/xcbgen "$srcdir/" + mkdir -p third_party/node/linux/node-linux-x64/bin ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ @@ -176,7 +160,6 @@ prepare() { \! -path "third_party/$_lib/chromium/*" \ \! -path "third_party/$_lib/google/*" \ \! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \ - \! -path 'third_party/yasm/run_yasm.py' \ \! -regex '.*\.\(gn\|gni\|isolate\)' \ -delete done @@ -195,6 +178,9 @@ build() { export CCACHE_SLOPPINESS=time_macros fi + # ui/gfx/x/gen_xproto.py needs xcbgen + export PYTHONPATH=$srcdir + export CC=clang export CXX=clang++ export AR=ar @@ -217,7 +203,6 @@ build() { 'use_gnome_keyring=false' 'use_gold=false' 'use_sysroot=false' - 'linux_use_bundled_binutils=false' 'use_custom_libcxx=false' 'enable_hangout_services_extension=true' 'enable_widevine=true' diff --git a/extra/chromium/add-missing-algorithm-header-in-crx_install_error.cc.patch b/extra/chromium/add-missing-algorithm-header-in-crx_install_error.cc.patch deleted file mode 100644 index 570f7b319..000000000 --- a/extra/chromium/add-missing-algorithm-header-in-crx_install_error.cc.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 2b9d6daa0ab5ce45ec5555466d5a5a583a020ea8 Mon Sep 17 00:00:00 2001 -From: Daniel Playfair Cal -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 -Commit-Queue: Ken Rockot -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 -+ - #include "base/logging.h" - #include "extensions/browser/install/sandboxed_unpacker_failure_reason.h" - diff --git a/extra/chromium/avoid-calling-DeleteForCurrentDocument-from-destructor.patch b/extra/chromium/avoid-calling-DeleteForCurrentDocument-from-destructor.patch new file mode 100644 index 000000000..30a3b3345 --- /dev/null +++ b/extra/chromium/avoid-calling-DeleteForCurrentDocument-from-destructor.patch @@ -0,0 +1,71 @@ +From 128869693a2519578896b41765df029d7adc4ae0 Mon Sep 17 00:00:00 2001 +From: Yuzu Saijo +Date: Tue, 2 Jun 2020 04:51:11 +0000 +Subject: [PATCH] [content] Avoid calling DeleteForCurrentDocument from + destructor + +This CL removes the call to DeleteForCurrentDocument from the destructor +of ManifestManagerHost. + +This intends to fix a crash which happens from time to time using +RenderDocumentHostUserData. + +Change-Id: I1336fb62328dcb0cf9991499f399bf3665d29b75 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2224737 +Reviewed-by: Rakina Zata Amni +Reviewed-by: Alexander Timin +Reviewed-by: Sreeja Kamishetty +Reviewed-by: Kinuko Yasuda +Commit-Queue: Yuzu Saijo +Cr-Commit-Position: refs/heads/master@{#774006} +--- + content/browser/manifest/manifest_manager_host.cc | 7 +++++-- + content/browser/manifest/manifest_manager_host.h | 2 ++ + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/content/browser/manifest/manifest_manager_host.cc b/content/browser/manifest/manifest_manager_host.cc +index 3a2efba889a..1bd88d91edc 100644 +--- a/content/browser/manifest/manifest_manager_host.cc ++++ b/content/browser/manifest/manifest_manager_host.cc +@@ -22,7 +22,7 @@ ManifestManagerHost::ManifestManagerHost(RenderFrameHost* render_frame_host) + } + + ManifestManagerHost::~ManifestManagerHost() { +- OnConnectionError(); ++ DispatchPendingCallbacks(); + } + + void ManifestManagerHost::BindObserver( +@@ -55,7 +55,7 @@ blink::mojom::ManifestManager& ManifestManagerHost::GetManifestManager() { + return *manifest_manager_; + } + +-void ManifestManagerHost::OnConnectionError() { ++void ManifestManagerHost::DispatchPendingCallbacks() { + std::vector callbacks; + for (CallbackMap::iterator it(&callbacks_); !it.IsAtEnd(); it.Advance()) { + callbacks.push_back(std::move(*it.GetCurrentValue())); +@@ -63,7 +63,10 @@ void ManifestManagerHost::OnConnectionError() { + callbacks_.Clear(); + for (auto& callback : callbacks) + std::move(callback).Run(GURL(), blink::Manifest()); ++} + ++void ManifestManagerHost::OnConnectionError() { ++ DispatchPendingCallbacks(); + if (GetForCurrentDocument(manifest_manager_frame_)) { + DeleteForCurrentDocument(manifest_manager_frame_); + } +diff --git a/content/browser/manifest/manifest_manager_host.h b/content/browser/manifest/manifest_manager_host.h +index 96951ae30bc..f706c20bdb8 100644 +--- a/content/browser/manifest/manifest_manager_host.h ++++ b/content/browser/manifest/manifest_manager_host.h +@@ -55,6 +55,8 @@ class ManifestManagerHost + using CallbackMap = base::IDMap>; + + blink::mojom::ManifestManager& GetManifestManager(); ++ ++ void DispatchPendingCallbacks(); + void OnConnectionError(); + + void OnRequestManifestResponse(int request_id, diff --git a/extra/chromium/avoid-double-destruction-of-ServiceWorkerObjectHost.patch b/extra/chromium/avoid-double-destruction-of-ServiceWorkerObjectHost.patch deleted file mode 100644 index 5e1df005c..000000000 --- a/extra/chromium/avoid-double-destruction-of-ServiceWorkerObjectHost.patch +++ /dev/null @@ -1,138 +0,0 @@ -From bd59ce32629ef684624821419c43967b73d2989e Mon Sep 17 00:00:00 2001 -From: Hiroki Nakagawa -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>. - -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 -Commit-Queue: Hiroki Nakagawa -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 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 helper_; - scoped_refptr 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(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/extra/chromium/chromium-83-gcc-10.patch b/extra/chromium/chromium-83-gcc-10.patch deleted file mode 100644 index 974b49cde..000000000 --- a/extra/chromium/chromium-83-gcc-10.patch +++ /dev/null @@ -1,64 +0,0 @@ -From e473f41284ccc8fa4bc4622d087194b18a1ec23a Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -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 -+#include - - 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 -+#include - - #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 -+#include - - 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 -+ - namespace ui { - - int GetFourCCFormatFromBufferFormat(gfx::BufferFormat format); --- -2.24.1 - diff --git a/extra/chromium/chromium-ffmpeg-4.3.patch b/extra/chromium/chromium-ffmpeg-4.3.patch new file mode 100644 index 000000000..6abb886ab --- /dev/null +++ b/extra/chromium/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 + #include "third_party/ffmpeg/ffmpeg_features.h" // nogncheck + extern "C" { + #include +@@ -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::max()); + #endif // BUILDFLAG(USE_ALLOCATOR_SHIM) + + #endif // BUILDFLAG(ENABLE_FFMPEG) diff --git a/extra/chromium/clean-up-a-call-to-set_utf8.patch b/extra/chromium/clean-up-a-call-to-set_utf8.patch deleted file mode 100644 index 01384c039..000000000 --- a/extra/chromium/clean-up-a-call-to-set_utf8.patch +++ /dev/null @@ -1,34 +0,0 @@ -From ede390a0b18e4565abf8ac1e1ff717e1d43fc320 Mon Sep 17 00:00:00 2001 -From: Paul Wankadia -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 -Commit-Queue: Paul Wankadia -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/extra/chromium/include-memory-header-to-get-the-definition-of-std-u.patch b/extra/chromium/include-memory-header-to-get-the-definition-of-std-u.patch deleted file mode 100644 index eb30ad243..000000000 --- a/extra/chromium/include-memory-header-to-get-the-definition-of-std-u.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 40d994e4aa2e4d5077c1810e4623549618a19c05 Mon Sep 17 00:00:00 2001 -From: Piotr Tworek -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 -Commit-Queue: Jochen Eisinger -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 -+ - #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/extra/chromium/iwyu-std-numeric_limits-is-defined-in-limits.patch b/extra/chromium/iwyu-std-numeric_limits-is-defined-in-limits.patch deleted file mode 100644 index e270242af..000000000 --- a/extra/chromium/iwyu-std-numeric_limits-is-defined-in-limits.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 74f76a6be385ef056b0be2362c32c728141cca16 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -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 -Commit-Queue: François Doray -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 -+#include - - #include "base/logging.h" - diff --git a/extra/chromium/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch b/extra/chromium/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch deleted file mode 100644 index 5e9d37aae..000000000 --- a/extra/chromium/libstdc-fix-incomplete-type-in-AXTree-for-NodeSetSiz.patch +++ /dev/null @@ -1,62 +0,0 @@ -From aeef68888d4c00b69facead2b934095a8cd17329 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -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 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 -Commit-Queue: David Tseng -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 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 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/extra/chromium/make-some-of-blink-custom-iterators-STL-compatible.patch b/extra/chromium/make-some-of-blink-custom-iterators-STL-compatible.patch deleted file mode 100644 index 30cbdefcc..000000000 --- a/extra/chromium/make-some-of-blink-custom-iterators-STL-compatible.patch +++ /dev/null @@ -1,95 +0,0 @@ -From d3cabbc7321d349a9bffda482df5afc0d4df1ac2 Mon Sep 17 00:00:00 2001 -From: Piotr Tworek -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 -Commit-Queue: Piotr Tworek -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 - 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 - 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/extra/chromium/remove-NotifyError-calls-and-just-send-a-normal-message.patch b/extra/chromium/remove-NotifyError-calls-and-just-send-a-normal-message.patch new file mode 100644 index 000000000..ab638bbef --- /dev/null +++ b/extra/chromium/remove-NotifyError-calls-and-just-send-a-normal-message.patch @@ -0,0 +1,42 @@ +From 3bfec15358b788a2b7e1beefaa177ba84a6da328 Mon Sep 17 00:00:00 2001 +From: Ted Meyer +Date: Mon, 1 Jun 2020 19:31:18 +0000 +Subject: [PATCH] Remove NotifyError calls and just send a normal message + instead + +rewrote the TODO as well. + +Bug: 1088055 +Change-Id: If83ceeb3a786a1813e41bd3ac6c7309791e92400 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2223010 +Auto-Submit: Ted Meyer +Commit-Queue: Dale Curtis +Reviewed-by: Dale Curtis +Cr-Commit-Position: refs/heads/master@{#773776} +--- + media/filters/decoder_selector.cc | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/media/filters/decoder_selector.cc b/media/filters/decoder_selector.cc +index bb06378b92d..9f510bb578c 100644 +--- a/media/filters/decoder_selector.cc ++++ b/media/filters/decoder_selector.cc +@@ -165,13 +165,11 @@ void DecoderSelector::OnDecoderInitializeDone(Status status) { + DCHECK(task_runner_->BelongsToCurrentThread()); + + if (!status.is_ok()) { +- // TODO(tmathmeyer) this might be noisy in media log. Consider batching +- // all failures as causes to a single Status object and only surfacing it if +- // decoder selection fails entirely. +- media_log_->NotifyError( +- Status(StatusCode::kDecoderFailedInitialization) +- .WithData("Decoder name", decoder_->GetDisplayName()) +- .AddCause(std::move(status))); ++ // TODO(tmathmeyer) this was too noisy in media log. Batch all the logs ++ // together and then send them as an informational notice instead of ++ // using NotifyError. ++ MEDIA_LOG(INFO, media_log_) ++ << "Failed to initialize " << decoder_->GetDisplayName(); + + // Try the next decoder on the list. + decoder_.reset(); diff --git a/extra/chromium/v8-remove-soon-to-be-removed-getAllFieldPositions.patch b/extra/chromium/v8-remove-soon-to-be-removed-getAllFieldPositions.patch deleted file mode 100644 index 41d1aced2..000000000 --- a/extra/chromium/v8-remove-soon-to-be-removed-getAllFieldPositions.patch +++ /dev/null @@ -1,172 +0,0 @@ -From 3f8dc4b2e5baf77b463334c769af85b79d8c1463 Mon Sep 17 00:00:00 2001 -From: Frank Tang -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 -Commit-Queue: Frank Tang -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::New(Isolate* isolate, - } - - namespace { --Maybe IcuFormatNumber( -+Maybe IcuFormatNumber( - Isolate* isolate, - const icu::number::LocalizedNumberFormatter& number_format, -- Handle numeric_obj, icu::FieldPositionIterator* fp_iter) { -+ Handle 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 big_int = Handle::cast(numeric_obj); - Handle big_int_string; - ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate, big_int_string, - BigInt::ToString(isolate, big_int), -- Nothing()); -- formatted = number_format.formatDecimal( -+ Nothing()); -+ *formatted = number_format.formatDecimal( - {big_int_string->ToCString().get(), big_int_string->length()}, status); - } else { - double number = numeric_obj->IsNaN() - ? std::numeric_limits::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()); -- } -- 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()); -+ THROW_NEW_ERROR_RETURN_VALUE( -+ isolate, NewTypeError(MessageTemplate::kIcuError), Nothing()); - } -- return Just(result); -+ return Just(true); - } - - } // namespace -@@ -1289,10 +1278,16 @@ MaybeHandle JSNumberFormat::FormatNumeric( - Handle numeric_obj) { - DCHECK(numeric_obj->IsNumeric()); - -- Maybe maybe_format = -- IcuFormatNumber(isolate, number_format, numeric_obj, nullptr); -+ icu::number::FormattedNumber formatted; -+ Maybe maybe_format = -+ IcuFormatNumber(isolate, number_format, numeric_obj, &formatted); - MAYBE_RETURN(maybe_format, Handle()); -- 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 FlattenRegionsToParts( - } - - namespace { --Maybe ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted, -- icu::FieldPositionIterator* fp_iter, -+Maybe ConstructParts(Isolate* isolate, -+ icu::number::FormattedNumber* formatted, - Handle result, int start_index, - Handle 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()); -+ } - 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 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 ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted, - Handle 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()); - Intl::AddElement(isolate, result, index, field_type_string, substring); - ++index; -@@ -1467,20 +1469,19 @@ MaybeHandle JSNumberFormat::FormatToParts( - number_format->icu_number_formatter().raw(); - CHECK_NOT_NULL(fmt); - -- icu::FieldPositionIterator fp_iter; -- Maybe maybe_format = -- IcuFormatNumber(isolate, *fmt, numeric_obj, &fp_iter); -+ icu::number::FormattedNumber formatted; -+ Maybe maybe_format = -+ IcuFormatNumber(isolate, *fmt, numeric_obj, &formatted); - MAYBE_RETURN(maybe_format, Handle()); -- - UErrorCode status = U_ZERO_ERROR; -+ - bool style_is_unit = - Style::UNIT == StyleFromSkeleton(fmt->toSkeleton(status)); - CHECK(U_SUCCESS(status)); - - Handle result = factory->NewJSArray(0); -- Maybe maybe_format_to_parts = -- ConstructParts(isolate, maybe_format.FromJust(), &fp_iter, result, 0, -- numeric_obj, style_is_unit); -+ Maybe maybe_format_to_parts = ConstructParts( -+ isolate, &formatted, result, 0, numeric_obj, style_is_unit); - MAYBE_RETURN(maybe_format_to_parts, Handle()); - - return result;