extra/chromium to 84.0.4147.89-1

This commit is contained in:
Kevin Mihelich 2020-07-14 19:36:03 +00:00
parent 14e6e6bae7
commit f5d31cdf31
13 changed files with 173 additions and 709 deletions

View file

@ -15,9 +15,10 @@ buildarch=12
highmem=1 highmem=1
pkgname=chromium pkgname=chromium
pkgver=83.0.4103.116 pkgver=84.0.4147.89
pkgrel=3 pkgrel=1
_launcher_ver=6 _launcher_ver=6
_gcc_patchset=3
pkgdesc="A web browser built for speed, simplicity, and security" pkgdesc="A web browser built for speed, simplicity, and security"
arch=('x86_64') arch=('x86_64')
url="https://www.chromium.org/Home" url="https://www.chromium.org/Home"
@ -25,44 +26,34 @@ license=('BSD')
depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt' depends=('gtk3' 'nss' 'alsa-lib' 'xdg-utils' 'libxss' 'libcups' 'libgcrypt'
'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'json-glib' 'ttf-liberation' 'systemd' 'dbus' 'libpulse' 'pciutils' 'json-glib'
'desktop-file-utils' 'hicolor-icon-theme') 'desktop-file-utils' 'hicolor-icon-theme')
makedepends=('python' 'python2' 'gperf' 'yasm' 'mesa' 'ninja' 'nodejs' 'git' makedepends=('python' 'python2' 'gperf' 'mesa' 'ninja' 'nodejs' 'git' 'libva'
'libpipewire02' 'libva' 'clang' 'lld' 'gn' 'java-runtime-headless' 'libpipewire02' 'clang' 'lld' 'gn' 'java-runtime-headless'
'python2-setuptools') 'python2-setuptools')
optdepends=('libpipewire02: WebRTC desktop sharing under Wayland' 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' 'kdialog: needed for file dialogs in KDE'
'org.freedesktop.secrets: password storage backend on GNOME / Xfce' 'org.freedesktop.secrets: password storage backend on GNOME / Xfce'
'kwallet: for storing passwords in KWallet on KDE desktops') 'kwallet: for storing passwords in KWallet on KDE desktops')
install=chromium.install install=chromium.install
source=(https://commondatastorage.googleapis.com/chromium-browser-official/$pkgname-$pkgver.tar.xz 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 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 https://github.com/stha09/chromium-patches/releases/download/chromium-${pkgver%%.*}-patchset-$_gcc_patchset/chromium-${pkgver%%.*}-patchset-$_gcc_patchset.tar.xz
iwyu-std-numeric_limits-is-defined-in-limits.patch remove-NotifyError-calls-and-just-send-a-normal-message.patch
add-missing-algorithm-header-in-crx_install_error.cc.patch avoid-calling-DeleteForCurrentDocument-from-destructor.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
force-mp3-files-to-have-a-start-time-of-zero.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-fix-vaapi-on-intel.patch
chromium-83-gcc-10.patch
chromium-skia-harmony.patch chromium-skia-harmony.patch
0001-crashpad-include-limits.patch 0001-crashpad-include-limits.patch
chromium-81.0.4044.122-Fix-sandbox-Aw-snap-for-syscalls-403-and-407.patch) chromium-81.0.4044.122-Fix-sandbox-Aw-snap-for-syscalls-403-and-407.patch)
sha256sums=('bb0c7e8dfee9f3a5e30eca7f34fc9f21caefa82a86c058c552f52b1ae2da2ac3' sha256sums=('17970d998c125b40765141f2cd346d1674f05dbd4a28fdcf31f9e3540890c679'
'04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1' '04917e3cd4307d8e31bfb0027a5dce6d086edb10ff8a716024fbb8bb0c7dccf1'
'58c41713eb6fb33b6eef120f4324fa1fb8123b1fbc4ecbe5662f1f9779b9b6af' 'f77088dd59b170b767ba91c6b410abb778ff2e68553433b24124d398fa4d3ce7'
'675fb3d6276cce569a641436465f58d5709d1d4a5f62b7052989479fd4aaea24' '3b10917f646f88ae988ca18be9cbef82025abb6a6e5cb00b77a11077192ce32c'
'0e2a78e4aa7272ab0ff4a4c467750e01bad692a026ad9828aaf06d2a9418b9d8' '4e41cb637e96bcef98c119ed052ba1aeab45fca5b89d65955583dab002de783e'
'50687079426094f2056d1f4806dc30fc8d6bad16190520e57ba087ec5db1d778'
'071326135bc25226aa165639dff80a03670a17548f2d2ff5cc4f40982b39c52a'
'3d7f20e1d2ee7d73ed25e708c0d59a0cb215fcce10a379e3d48a856533c4b0b7'
'd793842e9584bf75e3779918297ba0ffa6dd05394ef5b2bf5fb73aa9c86a7e2f'
'abc3fad113408332c3b187b083bf33eba59eb5c87fa3ce859023984b5804623c' 'abc3fad113408332c3b187b083bf33eba59eb5c87fa3ce859023984b5804623c'
'e042024423027ad3ef729a7e4709bdf9714aea49d64cfbbf46a645a05703abc2' '5390304b5f544868985ce00a3ec082d4ece2dacb1c73cdb35dd4facfea12449a'
'e495f2477091557b15bff2c99831e0a3db64ea2ebde7dcb22857a6469c944b9a' 'e495f2477091557b15bff2c99831e0a3db64ea2ebde7dcb22857a6469c944b9a'
'3e5ba8c0a70a4bc673deec0c61eb2b58f05a4c784cbdb7c8118be1eb6580db6d'
'771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1' '771292942c0901092a402cc60ee883877a99fb804cb54d568c8c6c94565a48e1'
'df99f49ad58b70c9a3e1827d7e80b62e4363419334ed83373cf55b79c17b6f10' 'df99f49ad58b70c9a3e1827d7e80b62e4363419334ed83373cf55b79c17b6f10'
'4837f797a910795bf3161805a3302d5f3701573ca90da8af32b2f4aa62510d20') '4837f797a910795bf3161805a3302d5f3701573ca90da8af32b2f4aa62510d20')
@ -78,7 +69,7 @@ declare -gA _system_libs=(
[icu]=icu [icu]=icu
[libdrm]= [libdrm]=
[libjpeg]=libjpeg [libjpeg]=libjpeg
#[libpng]=libpng # https://crbug.com/752403#c10 [libpng]=libpng # https://crbug.com/752403#c10
[libvpx]=libvpx [libvpx]=libvpx
[libwebp]=libwebp [libwebp]=libwebp
[libxml]=libxml2 [libxml]=libxml2
@ -86,7 +77,6 @@ declare -gA _system_libs=(
[opus]=opus [opus]=opus
[re2]=re2 [re2]=re2
[snappy]=snappy [snappy]=snappy
[yasm]=
[zlib]=minizip [zlib]=minizip
) )
_unwanted_bundled_libs=( _unwanted_bundled_libs=(
@ -125,45 +115,39 @@ prepare() {
third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \
third_party/libxml/chromium/*.cc third_party/libxml/chromium/*.cc
# https://chromium-review.googlesource.com/c/chromium/src/+/2145261 # https://chromium-review.googlesource.com/c/chromium/src/+/2223010
patch -Np1 -i ../clean-up-a-call-to-set_utf8.patch patch -Np1 -i ../remove-NotifyError-calls-and-just-send-a-normal-message.patch
# https://chromium-review.googlesource.com/c/chromium/src/+/2153111 # https://chromium-review.googlesource.com/c/chromium/src/+/2224737
patch -Np1 -F3 -i ../iwyu-std-numeric_limits-is-defined-in-limits.patch patch -Np1 -i ../avoid-calling-DeleteForCurrentDocument-from-destructor.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/+/2268221 # https://chromium-review.googlesource.com/c/chromium/src/+/2268221
patch -Np1 -i ../force-mp3-files-to-have-a-start-time-of-zero.patch patch -Np1 -i ../force-mp3-files-to-have-a-start-time-of-zero.patch
# https://crbug.com/v8/10393 # Fixes for building with libstdc++ instead of libc++
patch -Np1 -d v8 <../v8-remove-soon-to-be-removed-getAllFieldPositions.patch 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 # https://crbug.com/1095962
patch -Np1 -i ../chromium-83-gcc-10.patch patch -Np1 -i ../chromium-ffmpeg-4.3.patch
# https://crbug.com/skia/6663#c10
patch -Np0 -i ../chromium-skia-harmony.patch
# Patch from rpmfusion: chromium-freeworld # Patch from rpmfusion: chromium-freeworld
patch -Np1 -i ../chromium-fix-vaapi-on-intel.patch 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 # Force script incompatible with Python 3 to use /usr/bin/python2
sed -i '1s|python$|&2|' third_party/dom_distiller_js/protoc_plugins/*.py 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 mkdir -p third_party/node/linux/node-linux-x64/bin
ln -s /usr/bin/node 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/chromium/*" \
\! -path "third_party/$_lib/google/*" \ \! -path "third_party/$_lib/google/*" \
\! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \ \! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \
\! -path 'third_party/yasm/run_yasm.py' \
\! -regex '.*\.\(gn\|gni\|isolate\)' \ \! -regex '.*\.\(gn\|gni\|isolate\)' \
-delete -delete
done done
@ -195,6 +178,9 @@ build() {
export CCACHE_SLOPPINESS=time_macros export CCACHE_SLOPPINESS=time_macros
fi fi
# ui/gfx/x/gen_xproto.py needs xcbgen
export PYTHONPATH=$srcdir
export CC=clang export CC=clang
export CXX=clang++ export CXX=clang++
export AR=ar export AR=ar
@ -217,7 +203,6 @@ build() {
'use_gnome_keyring=false' 'use_gnome_keyring=false'
'use_gold=false' 'use_gold=false'
'use_sysroot=false' 'use_sysroot=false'
'linux_use_bundled_binutils=false'
'use_custom_libcxx=false' 'use_custom_libcxx=false'
'enable_hangout_services_extension=true' 'enable_hangout_services_extension=true'
'enable_widevine=true' 'enable_widevine=true'

View file

@ -1,29 +0,0 @@
From 2b9d6daa0ab5ce45ec5555466d5a5a583a020ea8 Mon Sep 17 00:00:00 2001
From: Daniel Playfair Cal <daniel.playfair.cal@gmail.com>
Date: Sat, 18 Apr 2020 00:27:38 +0000
Subject: [PATCH] Add missing algorithm header in crx_install_error.cc
This is needed for the use of std::find.
Change-Id: I2dc43b3887c467986c5346be5a9e27a987e1e5b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2152333
Reviewed-by: Ken Rockot <rockot@google.com>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#760272}
---
extensions/browser/install/crx_install_error.cc | 2 ++
1 file changed, 2 insertions(+)
diff --git a/extensions/browser/install/crx_install_error.cc b/extensions/browser/install/crx_install_error.cc
index a9765bb0a5a..bd0d3e35a16 100644
--- a/extensions/browser/install/crx_install_error.cc
+++ b/extensions/browser/install/crx_install_error.cc
@@ -4,6 +4,8 @@
#include "extensions/browser/install/crx_install_error.h"
+#include <algorithm>
+
#include "base/logging.h"
#include "extensions/browser/install/sandboxed_unpacker_failure_reason.h"

View file

@ -0,0 +1,71 @@
From 128869693a2519578896b41765df029d7adc4ae0 Mon Sep 17 00:00:00 2001
From: Yuzu Saijo <yuzus@chromium.org>
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 <rakina@chromium.org>
Reviewed-by: Alexander Timin <altimin@chromium.org>
Reviewed-by: Sreeja Kamishetty <sreejakshetty@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Yuzu Saijo <yuzus@chromium.org>
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<GetManifestCallback> 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<std::unique_ptr<GetManifestCallback>>;
blink::mojom::ManifestManager& GetManifestManager();
+
+ void DispatchPendingCallbacks();
void OnConnectionError();
void OnRequestManifestResponse(int request_id,

View file

@ -1,138 +0,0 @@
From bd59ce32629ef684624821419c43967b73d2989e Mon Sep 17 00:00:00 2001
From: Hiroki Nakagawa <nhiroki@chromium.org>
Date: Fri, 8 May 2020 08:25:31 +0000
Subject: [PATCH] ServiceWorker: Avoid double destruction of
ServiceWorkerObjectHost on connection error
This CL avoids the case where ServiceWorkerObjectHost is destroyed twice
on ServiceWorkerObjectHost::OnConnectionError() when Chromium is built
with the GCC build toolchain.
> How does the issue happen?
ServiceWorkerObjectHost has a cyclic reference like this:
ServiceWorkerObjectHost
--([1] scoped_refptr)--> ServiceWorkerVersion
--([2] std::unique_ptr)--> ServiceWorkerProviderHost
--([3] std::unique_ptr)--> ServiceWorkerContainerHost
--([4] std::unique_ptr)--> ServiceWorkerObjectHost
Note that ServiceWorkerContainerHost manages ServiceWorkerObjectHost in
map<int64_t version_id, std::unique_ptr<ServiceWorkerObjectHost>>.
When ServiceWorkerObjectHost::OnConnectionError() is called, the
function removes the reference [4] from the map, and destroys
ServiceWorkerObjectHost. If the object host has the last reference [1]
to ServiceWorkerVersion, the destruction also cuts off the references
[2] and [3], and destroys ServiceWorkerProviderHost and
ServiceWorkerContainerHost.
This seems to work well on the Chromium's default toolchain, but not
work on the GCC toolchain. According to the report, destruction of
ServiceWorkerContainerHost happens while the map owned by the container
host is erasing the ServiceWorkerObjectHost, and this results in crash
due to double destruction of the object host.
I don't know the reason why this happens only on the GCC toolchain, but
I suspect the order of object destruction on std::map::erase() could be
different depending on the toolchains.
> How does this CL fix this?
The ideal fix is to redesign the ownership model of
ServiceWorkerVersion, but it's not feasible in the short term.
Instead, this CL avoids destruction of ServiceWorkerObjectHost on
std::map::erase(). The new code takes the ownership of the object host
from the map first, and then erases the entry from the map. This
separates timings to erase the map entry and to destroy the object host,
so the crash should no longer happen.
Bug: 1056598
Change-Id: Id30654cb575bc557c42044d6f0c6f1f9bfaed613
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2094496
Reviewed-by: Makoto Shimazu <shimazu@chromium.org>
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#766770}
---
.../service_worker_container_host.cc | 10 +++++
.../service_worker_object_host_unittest.cc | 38 +++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/content/browser/service_worker/service_worker_container_host.cc b/content/browser/service_worker/service_worker_container_host.cc
index ec7fb1449af..98c62093b0e 100644
--- a/content/browser/service_worker/service_worker_container_host.cc
+++ b/content/browser/service_worker/service_worker_container_host.cc
@@ -669,6 +669,16 @@ void ServiceWorkerContainerHost::RemoveServiceWorkerObjectHost(
int64_t version_id) {
DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId());
DCHECK(base::Contains(service_worker_object_hosts_, version_id));
+
+ // ServiceWorkerObjectHost to be deleted may have the last reference to
+ // ServiceWorkerVersion that indirectly owns this ServiceWorkerContainerHost.
+ // If we erase the object host directly from the map, |this| could be deleted
+ // during the map operation and may crash. To avoid the case, we take the
+ // ownership of the object host from the map first, and then erase the entry
+ // from the map. See https://crbug.com/1056598 for details.
+ std::unique_ptr<ServiceWorkerObjectHost> to_be_deleted =
+ std::move(service_worker_object_hosts_[version_id]);
+ DCHECK(to_be_deleted);
service_worker_object_hosts_.erase(version_id);
}
diff --git a/content/browser/service_worker/service_worker_object_host_unittest.cc b/content/browser/service_worker/service_worker_object_host_unittest.cc
index 408d7c1f9d1..6eab59040ab 100644
--- a/content/browser/service_worker/service_worker_object_host_unittest.cc
+++ b/content/browser/service_worker/service_worker_object_host_unittest.cc
@@ -200,6 +200,19 @@ class ServiceWorkerObjectHostTest : public testing::Test {
return registration_info;
}
+ void CallOnConnectionError(ServiceWorkerContainerHost* container_host,
+ int64_t version_id) {
+ // ServiceWorkerObjectHost has the last reference to the version.
+ ServiceWorkerObjectHost* object_host =
+ GetServiceWorkerObjectHost(container_host, version_id);
+ EXPECT_TRUE(object_host->version_->HasOneRef());
+
+ // Make sure that OnConnectionError induces destruction of the version and
+ // the object host.
+ object_host->receivers_.Clear();
+ object_host->OnConnectionError();
+ }
+
BrowserTaskEnvironment task_environment_;
std::unique_ptr<EmbeddedWorkerTestHelper> helper_;
scoped_refptr<ServiceWorkerRegistration> registration_;
@@ -409,5 +422,30 @@ TEST_F(ServiceWorkerObjectHostTest, DispatchExtendableMessageEvent_FromClient) {
events[0]->source_info_for_client->client_type);
}
+// This is a regression test for https://crbug.com/1056598.
+TEST_F(ServiceWorkerObjectHostTest, OnConnectionError) {
+ const GURL scope("https://www.example.com/");
+ const GURL script_url("https://www.example.com/service_worker.js");
+ Initialize(std::make_unique<EmbeddedWorkerTestHelper>(base::FilePath()));
+ SetUpRegistration(scope, script_url);
+
+ // Create the provider host.
+ ASSERT_EQ(blink::ServiceWorkerStatusCode::kOk,
+ StartServiceWorker(version_.get()));
+
+ // Set up the case where the last reference to the version is owned by the
+ // service worker object host.
+ ServiceWorkerContainerHost* container_host =
+ version_->provider_host()->container_host();
+ ServiceWorkerVersion* version_rawptr = version_.get();
+ version_ = nullptr;
+ ASSERT_TRUE(version_rawptr->HasOneRef());
+
+ // Simulate the connection error that induces the object host destruction.
+ // This shouldn't crash.
+ CallOnConnectionError(container_host, version_rawptr->version_id());
+ base::RunLoop().RunUntilIdle();
+}
+
} // namespace service_worker_object_host_unittest
} // namespace content

View file

@ -1,64 +0,0 @@
From e473f41284ccc8fa4bc4622d087194b18a1ec23a Mon Sep 17 00:00:00 2001
From: Stephan Hartmann <stha09@googlemail.com>
Date: Tue, 7 Apr 2020 16:37:10 +0000
Subject: [PATCH] GCC: fix includes for gcc-10
---
chrome/browser/search/background/ntp_backgrounds.h | 1 +
third_party/webrtc/call/rtx_receive_stream.h | 1 +
.../webrtc/modules/audio_processing/aec3/clockdrift_detector.h | 1 +
ui/gfx/linux/drm_util_linux.h | 2 ++
5 files changed, 6 insertions(+)
diff --git a/chrome/browser/search/background/ntp_backgrounds.h b/chrome/browser/search/background/ntp_backgrounds.h
index 7afc0a2..ea5818e 100644
--- a/chrome/browser/search/background/ntp_backgrounds.h
+++ b/chrome/browser/search/background/ntp_backgrounds.h
@@ -6,6 +6,7 @@
#define CHROME_BROWSER_SEARCH_BACKGROUND_NTP_BACKGROUNDS_H_
#include <array>
+#include <cstddef>
class GURL;
diff --git a/third_party/webrtc/call/rtx_receive_stream.h b/third_party/webrtc/call/rtx_receive_stream.h
index 8ffa440..113a816 100644
--- a/third_party/webrtc/call/rtx_receive_stream.h
+++ b/third_party/webrtc/call/rtx_receive_stream.h
@@ -12,6 +12,7 @@
#define CALL_RTX_RECEIVE_STREAM_H_
#include <map>
+#include <cstdint>
#include "call/rtp_packet_sink_interface.h"
diff --git a/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h b/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
index 22528c9..69e624e 100644
--- a/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
+++ b/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
@@ -12,6 +12,7 @@
#define MODULES_AUDIO_PROCESSING_AEC3_CLOCKDRIFT_DETECTOR_H_
#include <array>
+#include <cstddef>
namespace webrtc {
diff --git a/ui/gfx/linux/drm_util_linux.h b/ui/gfx/linux/drm_util_linux.h
index 86ff2eb..990f12c 100644
--- a/ui/gfx/linux/drm_util_linux.h
+++ b/ui/gfx/linux/drm_util_linux.h
@@ -7,6 +7,8 @@
#include "ui/gfx/buffer_types.h"
+#include <cstdint>
+
namespace ui {
int GetFourCCFormatFromBufferFormat(gfx::BufferFormat format);
--
2.24.1

View file

@ -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)

View file

@ -1,34 +0,0 @@
From ede390a0b18e4565abf8ac1e1ff717e1d43fc320 Mon Sep 17 00:00:00 2001
From: Paul Wankadia <junyer@chromium.org>
Date: Tue, 14 Apr 2020 16:54:51 +0000
Subject: [PATCH] Clean up a call to set_utf8().
This is part of an effort to rewrite calls to utf8() and set_utf8()
(in RE2::Options) as calls to encoding() and set_encoding(),
respectively. utf8() and set_utf8() have been marked as the "legacy"
interface since 2008, so it is long past time that we get rid of them.
R=parastoog@google.com
Change-Id: I62c48cd575a55b519d5264ed857f927c163068b2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2145261
Reviewed-by: Parastoo Geranmayeh <parastoog@google.com>
Commit-Queue: Paul Wankadia <junyer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758886}
---
components/autofill/core/browser/address_rewriter.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/autofill/core/browser/address_rewriter.cc b/components/autofill/core/browser/address_rewriter.cc
index 1b85a50974c..030a5aba146 100644
--- a/components/autofill/core/browser/address_rewriter.cc
+++ b/components/autofill/core/browser/address_rewriter.cc
@@ -57,7 +57,7 @@ void CompileRulesFromData(const std::string& data_string,
CompiledRuleVector* compiled_rules) {
base::StringPiece data = data_string;
re2::RE2::Options options;
- options.set_utf8(true);
+ options.set_encoding(RE2::Options::EncodingUTF8);
options.set_word_boundary(true);
size_t token_end = 0;

View file

@ -1,32 +0,0 @@
From 40d994e4aa2e4d5077c1810e4623549618a19c05 Mon Sep 17 00:00:00 2001
From: Piotr Tworek <ptworek@vewd.com>
Date: Mon, 27 Apr 2020 16:31:46 +0000
Subject: [PATCH] Include "memory" header to get the definition of
std::unique_ptr.
Right now the code im the affected fails to build when using libstdc++
instead of bundled libcxx. Apparently libcxx pulls the necessary header
indirectly.
Change-Id: Ie5e86f228434ab16d622ae7a912d9ce607258931
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2164645
Reviewed-by: Jochen Eisinger <jochen@chromium.org>
Commit-Queue: Jochen Eisinger <jochen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#762881}
---
.../blink/renderer/core/html/trust_token_attribute_parsing.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h b/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h
index f5a7ab03892..ef19cfaf680 100644
--- a/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h
+++ b/third_party/blink/renderer/core/html/trust_token_attribute_parsing.h
@@ -5,6 +5,8 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_TRUST_TOKEN_ATTRIBUTE_PARSING_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_TRUST_TOKEN_ATTRIBUTE_PARSING_H_
+#include <memory>
+
#include "base/optional.h"
#include "services/network/public/mojom/trust_tokens.mojom-blink-forward.h"
#include "third_party/blink/renderer/core/core_export.h"

View file

@ -1,29 +0,0 @@
From 74f76a6be385ef056b0be2362c32c728141cca16 Mon Sep 17 00:00:00 2001
From: Stephan Hartmann <stha09@googlemail.com>
Date: Fri, 17 Apr 2020 16:04:12 +0000
Subject: [PATCH] IWYU: std::numeric_limits is defined in limits
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Change-Id: Ifbc379adc5bb7242c21e7da0bcfc28f49e4dd06f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2153111
Reviewed-by: François Doray <fdoray@chromium.org>
Commit-Queue: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#760075}
---
.../graph/policies/background_tab_loading_policy_helpers.cc | 1 +
1 file changed, 1 insertion(+)
diff --git a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.cc b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.cc
index 4881c010bb9..593501d16a7 100644
--- a/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.cc
+++ b/chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/performance_manager/graph/policies/background_tab_loading_policy_helpers.h"
#include <math.h>
+#include <limits>
#include "base/logging.h"

View file

@ -1,62 +0,0 @@
From aeef68888d4c00b69facead2b934095a8cd17329 Mon Sep 17 00:00:00 2001
From: Stephan Hartmann <stha09@googlemail.com>
Date: Mon, 20 Apr 2020 18:21:43 +0000
Subject: [PATCH] libstdc++: fix incomplete-type in AXTree for
NodeSetSizePosInSetInfo
has only forward declaration of NodeSetSizePosInSetInfo. Therefore,
move declaration from ax_tree.cc.
std: :unordered_map<T, U> requires U to be fully declared. ax_tree.h
Bug: 957519
Change-Id: Ic1f4bf3ebfea229ece84251e46d4461b31873868
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2132403
Reviewed-by: David Tseng <dtseng@chromium.org>
Commit-Queue: David Tseng <dtseng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#760588}
---
ui/accessibility/ax_tree.cc | 10 ++--------
ui/accessibility/ax_tree.h | 9 ++++++++-
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/ui/accessibility/ax_tree.cc b/ui/accessibility/ax_tree.cc
index 7b8d9b1b161..e9154028d66 100644
--- a/ui/accessibility/ax_tree.cc
+++ b/ui/accessibility/ax_tree.cc
@@ -567,14 +567,8 @@ struct AXTreeUpdateState {
const AXTree& tree;
};
-struct AXTree::NodeSetSizePosInSetInfo {
- NodeSetSizePosInSetInfo() = default;
- ~NodeSetSizePosInSetInfo() = default;
-
- int32_t pos_in_set = 0;
- int32_t set_size = 0;
- base::Optional<int> lowest_hierarchical_level;
-};
+AXTree::NodeSetSizePosInSetInfo::NodeSetSizePosInSetInfo() = default;
+AXTree::NodeSetSizePosInSetInfo::~NodeSetSizePosInSetInfo() = default;
struct AXTree::OrderedSetContent {
explicit OrderedSetContent(const AXNode* ordered_set = nullptr)
diff --git a/ui/accessibility/ax_tree.h b/ui/accessibility/ax_tree.h
index a51ca8de4c8..8c1c57517ac 100644
--- a/ui/accessibility/ax_tree.h
+++ b/ui/accessibility/ax_tree.h
@@ -328,7 +328,14 @@ class AX_EXPORT AXTree : public AXNode::OwnerTree {
bool enable_extra_mac_nodes_ = false;
// Contains pos_in_set and set_size data for an AXNode.
- struct NodeSetSizePosInSetInfo;
+ struct NodeSetSizePosInSetInfo {
+ NodeSetSizePosInSetInfo();
+ ~NodeSetSizePosInSetInfo();
+
+ int32_t pos_in_set = 0;
+ int32_t set_size = 0;
+ base::Optional<int> lowest_hierarchical_level;
+ };
// Represents the content of an ordered set which includes the ordered set
// items and the ordered set container if it exists.

View file

@ -1,95 +0,0 @@
From d3cabbc7321d349a9bffda482df5afc0d4df1ac2 Mon Sep 17 00:00:00 2001
From: Piotr Tworek <ptworek@vewd.com>
Date: Thu, 30 Apr 2020 21:33:47 +0000
Subject: [PATCH] Make some of blink custom iterators STL compatible.
Blink has recently started using functions like std::any_of with some of
the custom iterators it provides. On Linux this works in the default
setup using libcxx, but fails with even the most recent versions of
libstdc++. In all cases the error message (text in bug report) complains
about lack of matching std::__iterator_category definition.
From what I understand the error message is basically saying those
iterators are not STL compatible due to missing traits as described
in https://en.cppreference.com/w/cpp/iterator/iterator_traits. Such
traits are provided by custom iterators defined in //base, or //cc.
This patch adds the necessary traits to iterators that are currently
affected by this problem.
Bug: 1076869
Change-Id: I9950a7100c32499ba96647317fa70b87dc22eaf9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2174199
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Commit-Queue: Piotr Tworek <ptworek@vewd.com>
Cr-Commit-Position: refs/heads/master@{#764426}
---
.../core/layout/ng/ng_physical_container_fragment.h | 6 ++++++
.../blink/renderer/platform/wtf/hash_iterators.h | 12 ++++++++++++
third_party/blink/renderer/platform/wtf/hash_table.h | 6 ++++++
3 files changed, 24 insertions(+)
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h
index 1256e77c146..8b93107f2fc 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h
@@ -38,6 +38,12 @@ class CORE_EXPORT NGPhysicalContainerFragment : public NGPhysicalFragment {
STACK_ALLOCATED();
public:
+ using iterator_category = std::bidirectional_iterator_tag;
+ using value_type = NGLink;
+ using difference_type = ptrdiff_t;
+ using pointer = value_type*;
+ using reference = value_type&;
+
ConstIterator(const NGLink* current) : current_(current) {}
const NGLink& operator*() const { return *PostLayoutOrCurrent(); }
diff --git a/third_party/blink/renderer/platform/wtf/hash_iterators.h b/third_party/blink/renderer/platform/wtf/hash_iterators.h
index f8e66e6be85..6003d02c509 100644
--- a/third_party/blink/renderer/platform/wtf/hash_iterators.h
+++ b/third_party/blink/renderer/platform/wtf/hash_iterators.h
@@ -53,6 +53,12 @@ struct HashTableConstIteratorAdapter<HashTableType,
typedef HashTableConstValuesIterator<HashTableType, KeyType, MappedType>
ValuesIterator;
+ using iterator_category = std::bidirectional_iterator_tag;
+ using value_type = HashTableType;
+ using difference_type = ptrdiff_t;
+ using pointer = value_type*;
+ using reference = value_type&;
+
HashTableConstIteratorAdapter() = default;
HashTableConstIteratorAdapter(
const typename HashTableType::const_iterator& impl)
@@ -94,6 +100,12 @@ struct HashTableIteratorAdapter<HashTableType,
typedef HashTableValuesIterator<HashTableType, KeyType, MappedType>
ValuesIterator;
+ using iterator_category = std::bidirectional_iterator_tag;
+ using value_type = HashTableType;
+ using difference_type = ptrdiff_t;
+ using pointer = value_type*;
+ using reference = value_type&;
+
HashTableIteratorAdapter() = default;
HashTableIteratorAdapter(const typename HashTableType::iterator& impl)
: impl_(impl) {}
diff --git a/third_party/blink/renderer/platform/wtf/hash_table.h b/third_party/blink/renderer/platform/wtf/hash_table.h
index f596fb5d41e..5a4468d6bd1 100644
--- a/third_party/blink/renderer/platform/wtf/hash_table.h
+++ b/third_party/blink/renderer/platform/wtf/hash_table.h
@@ -2204,6 +2204,12 @@ struct HashTableConstIteratorAdapter {
STACK_ALLOCATED();
public:
+ using iterator_category = std::bidirectional_iterator_tag;
+ using value_type = HashTableType;
+ using difference_type = ptrdiff_t;
+ using pointer = value_type*;
+ using reference = value_type&;
+
HashTableConstIteratorAdapter() = default;
HashTableConstIteratorAdapter(
const typename HashTableType::const_iterator& impl)

View file

@ -0,0 +1,42 @@
From 3bfec15358b788a2b7e1beefaa177ba84a6da328 Mon Sep 17 00:00:00 2001
From: Ted Meyer <tmathmeyer@chromium.org>
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 <tmathmeyer@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
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<StreamType>::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();

View file

@ -1,172 +0,0 @@
From 3f8dc4b2e5baf77b463334c769af85b79d8c1463 Mon Sep 17 00:00:00 2001
From: Frank Tang <ftang@chromium.org>
Date: Fri, 3 Apr 2020 23:13:54 -0700
Subject: [PATCH] [intl] Remove soon-to-be removed getAllFieldPositions
Needed to land ICU67.1 soon.
Bug: v8:10393
Change-Id: I3c7737ca600d6ccfdc46ffaddfb318ce60bc7618
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2136489
Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
Commit-Queue: Frank Tang <ftang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#67027}
---
src/objects/js-number-format.cc | 77 +++++++++++++++++----------------
1 file changed, 39 insertions(+), 38 deletions(-)
diff --git a/src/objects/js-number-format.cc b/src/objects/js-number-format.cc
index ad831c5c36..bcd44031d5 100644
--- a/src/objects/js-number-format.cc
+++ b/src/objects/js-number-format.cc
@@ -1241,44 +1241,33 @@ MaybeHandle<JSNumberFormat> JSNumberFormat::New(Isolate* isolate,
}
namespace {
-Maybe<icu::UnicodeString> IcuFormatNumber(
+Maybe<bool> IcuFormatNumber(
Isolate* isolate,
const icu::number::LocalizedNumberFormatter& number_format,
- Handle<Object> numeric_obj, icu::FieldPositionIterator* fp_iter) {
+ Handle<Object> numeric_obj, icu::number::FormattedNumber* formatted) {
// If it is BigInt, handle it differently.
UErrorCode status = U_ZERO_ERROR;
- icu::number::FormattedNumber formatted;
if (numeric_obj->IsBigInt()) {
Handle<BigInt> big_int = Handle<BigInt>::cast(numeric_obj);
Handle<String> big_int_string;
ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate, big_int_string,
BigInt::ToString(isolate, big_int),
- Nothing<icu::UnicodeString>());
- formatted = number_format.formatDecimal(
+ Nothing<bool>());
+ *formatted = number_format.formatDecimal(
{big_int_string->ToCString().get(), big_int_string->length()}, status);
} else {
double number = numeric_obj->IsNaN()
? std::numeric_limits<double>::quiet_NaN()
: numeric_obj->Number();
- formatted = number_format.formatDouble(number, status);
+ *formatted = number_format.formatDouble(number, status);
}
if (U_FAILURE(status)) {
// This happen because of icu data trimming trim out "unit".
// See https://bugs.chromium.org/p/v8/issues/detail?id=8641
- THROW_NEW_ERROR_RETURN_VALUE(isolate,
- NewTypeError(MessageTemplate::kIcuError),
- Nothing<icu::UnicodeString>());
- }
- if (fp_iter) {
- formatted.getAllFieldPositions(*fp_iter, status);
- }
- icu::UnicodeString result = formatted.toString(status);
- if (U_FAILURE(status)) {
- THROW_NEW_ERROR_RETURN_VALUE(isolate,
- NewTypeError(MessageTemplate::kIcuError),
- Nothing<icu::UnicodeString>());
+ THROW_NEW_ERROR_RETURN_VALUE(
+ isolate, NewTypeError(MessageTemplate::kIcuError), Nothing<bool>());
}
- return Just(result);
+ return Just(true);
}
} // namespace
@@ -1289,10 +1278,16 @@ MaybeHandle<String> JSNumberFormat::FormatNumeric(
Handle<Object> numeric_obj) {
DCHECK(numeric_obj->IsNumeric());
- Maybe<icu::UnicodeString> maybe_format =
- IcuFormatNumber(isolate, number_format, numeric_obj, nullptr);
+ icu::number::FormattedNumber formatted;
+ Maybe<bool> maybe_format =
+ IcuFormatNumber(isolate, number_format, numeric_obj, &formatted);
MAYBE_RETURN(maybe_format, Handle<String>());
- return Intl::ToString(isolate, maybe_format.FromJust());
+ UErrorCode status = U_ZERO_ERROR;
+ icu::UnicodeString result = formatted.toString(status);
+ if (U_FAILURE(status)) {
+ THROW_NEW_ERROR(isolate, NewTypeError(MessageTemplate::kIcuError), String);
+ }
+ return Intl::ToString(isolate, result);
}
namespace {
@@ -1405,12 +1400,18 @@ std::vector<NumberFormatSpan> FlattenRegionsToParts(
}
namespace {
-Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
- icu::FieldPositionIterator* fp_iter,
+Maybe<int> ConstructParts(Isolate* isolate,
+ icu::number::FormattedNumber* formatted,
Handle<JSArray> result, int start_index,
Handle<Object> numeric_obj, bool style_is_unit) {
+ UErrorCode status = U_ZERO_ERROR;
+ icu::UnicodeString formatted_text = formatted->toString(status);
+ if (U_FAILURE(status)) {
+ THROW_NEW_ERROR_RETURN_VALUE(
+ isolate, NewTypeError(MessageTemplate::kIcuError), Nothing<int>());
+ }
DCHECK(numeric_obj->IsNumeric());
- int32_t length = formatted.length();
+ int32_t length = formatted_text.length();
int index = start_index;
if (length == 0) return Just(index);
@@ -1419,13 +1420,14 @@ Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
// other region covers some part of the formatted string. It's possible
// there's another field with exactly the same begin and end as this backdrop,
// in which case the backdrop's field_id of -1 will give it lower priority.
- regions.push_back(NumberFormatSpan(-1, 0, formatted.length()));
+ regions.push_back(NumberFormatSpan(-1, 0, formatted_text.length()));
{
- icu::FieldPosition fp;
- while (fp_iter->next(fp)) {
- regions.push_back(NumberFormatSpan(fp.getField(), fp.getBeginIndex(),
- fp.getEndIndex()));
+ icu::ConstrainedFieldPosition cfp;
+ cfp.constrainCategory(UFIELD_CATEGORY_NUMBER);
+ while (formatted->nextPosition(cfp, status)) {
+ regions.push_back(
+ NumberFormatSpan(cfp.getField(), cfp.getStart(), cfp.getLimit()));
}
}
@@ -1447,7 +1449,7 @@ Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
Handle<String> substring;
ASSIGN_RETURN_ON_EXCEPTION_VALUE(
isolate, substring,
- Intl::ToString(isolate, formatted, part.begin_pos, part.end_pos),
+ Intl::ToString(isolate, formatted_text, part.begin_pos, part.end_pos),
Nothing<int>());
Intl::AddElement(isolate, result, index, field_type_string, substring);
++index;
@@ -1467,20 +1469,19 @@ MaybeHandle<JSArray> JSNumberFormat::FormatToParts(
number_format->icu_number_formatter().raw();
CHECK_NOT_NULL(fmt);
- icu::FieldPositionIterator fp_iter;
- Maybe<icu::UnicodeString> maybe_format =
- IcuFormatNumber(isolate, *fmt, numeric_obj, &fp_iter);
+ icu::number::FormattedNumber formatted;
+ Maybe<bool> maybe_format =
+ IcuFormatNumber(isolate, *fmt, numeric_obj, &formatted);
MAYBE_RETURN(maybe_format, Handle<JSArray>());
-
UErrorCode status = U_ZERO_ERROR;
+
bool style_is_unit =
Style::UNIT == StyleFromSkeleton(fmt->toSkeleton(status));
CHECK(U_SUCCESS(status));
Handle<JSArray> result = factory->NewJSArray(0);
- Maybe<int> maybe_format_to_parts =
- ConstructParts(isolate, maybe_format.FromJust(), &fp_iter, result, 0,
- numeric_obj, style_is_unit);
+ Maybe<int> maybe_format_to_parts = ConstructParts(
+ isolate, &formatted, result, 0, numeric_obj, style_is_unit);
MAYBE_RETURN(maybe_format_to_parts, Handle<JSArray>());
return result;