From 212777e7ee183420f2fb1f4d740142d7863a511b Mon Sep 17 00:00:00 2001 From: jk Date: Tue, 22 Dec 2020 08:08:20 -0500 Subject: upgpkg: ungoogled-chromium 87.0.4280.88-3 add icu68 patches --- .SRCINFO | 20 +-- PKGBUILD | 8 +- icu68.patch | 421 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ v8-icu68.patch | 192 ++++++++++++++++++++++++++ 4 files changed, 632 insertions(+), 9 deletions(-) create mode 100644 icu68.patch create mode 100644 v8-icu68.patch diff --git a/.SRCINFO b/.SRCINFO index 836766b..9e5ec5b 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = ungoogled-chromium pkgdesc = A lightweight approach to removing Google web service dependency pkgver = 87.0.4280.88 - pkgrel = 1 + pkgrel = 3 url = https://github.com/Eloston/ungoogled-chromium arch = x86_64 license = BSD @@ -34,21 +34,21 @@ pkgbase = ungoogled-chromium depends = json-glib depends = desktop-file-utils depends = hicolor-icon-theme - depends = icu - depends = libxml2 depends = fontconfig - depends = harfbuzz depends = libjpeg - depends = libpng - depends = re2 + depends = icu + depends = flac depends = snappy + depends = libxml2 depends = ffmpeg - depends = flac depends = libwebp depends = minizip + depends = opus + depends = harfbuzz + depends = re2 depends = libxslt + depends = libpng depends = freetype2 - depends = opus optdepends = pepper-flash: support for Flash content optdepends = libpipewire02: WebRTC desktop sharing under Wayland optdepends = libva: hardware-accelerated video decode [experimental] @@ -63,6 +63,8 @@ pkgbase = ungoogled-chromium source = chromium-drirc-disable-10bpc-color-configs.conf source = https://github.com/stha09/chromium-patches/releases/download/chromium-87-patchset-9/chromium-87-patchset-9.tar.xz source = wayland-egl.patch + source = icu68.patch + source = v8-icu68.patch source = subpixel-anti-aliasing-in-FreeType-2.8.1.patch sha256sums = 3e4645328735ef60db78d1a313efb3770a3edeaede90d076414df52f567a09c0 sha256sums = 79fad3ac0f247732e4326992698e4cf2c643a53b7e101b3b62768c461195fba2 @@ -70,6 +72,8 @@ pkgbase = ungoogled-chromium sha256sums = babda4f5c1179825797496898d77334ac067149cac03d797ab27ac69671a7feb sha256sums = c99934bcd2f3ae8ea9620f5f59a94338b2cf739647f04c28c8a551d9083fa7e9 sha256sums = bf86923eaee5529ab9fb6148bd6c33a73c8746ab1b4ade0cd3b761109bc55826 + sha256sums = 38fb5218331d6e03915490dab64f7b8bf26833a581d1aaa02090437c67e9439c + sha256sums = 6e919c9712d8fe6c2918778df1f8c2ee0675a87a48be5d2aaa54e320703ced4b sha256sums = 1e2913e21c491d546e05f9b4edf5a6c7a22d89ed0b36ef692ca6272bcd5faec6 pkgname = ungoogled-chromium diff --git a/PKGBUILD b/PKGBUILD index 6c872d7..bffc1da 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -10,7 +10,7 @@ pkgname=ungoogled-chromium pkgver=87.0.4280.88 -pkgrel=1 +pkgrel=3 _launcher_ver=6 _gcc_patchset=9 _pkgname=$(echo $pkgname | cut -d\- -f1-2) @@ -44,6 +44,8 @@ source=(https://commondatastorage.googleapis.com/chromium-browser-official/chrom chromium-drirc-disable-10bpc-color-configs.conf https://github.com/stha09/chromium-patches/releases/download/chromium-${pkgver%%.*}-patchset-$_gcc_patchset/chromium-${pkgver%%.*}-patchset-$_gcc_patchset.tar.xz wayland-egl.patch + icu68.patch + v8-icu68.patch subpixel-anti-aliasing-in-FreeType-2.8.1.patch) sha256sums=('3e4645328735ef60db78d1a313efb3770a3edeaede90d076414df52f567a09c0' $_uc_sum @@ -51,6 +53,8 @@ sha256sums=('3e4645328735ef60db78d1a313efb3770a3edeaede90d076414df52f567a09c0' 'babda4f5c1179825797496898d77334ac067149cac03d797ab27ac69671a7feb' 'c99934bcd2f3ae8ea9620f5f59a94338b2cf739647f04c28c8a551d9083fa7e9' 'bf86923eaee5529ab9fb6148bd6c33a73c8746ab1b4ade0cd3b761109bc55826' + '38fb5218331d6e03915490dab64f7b8bf26833a581d1aaa02090437c67e9439c' + '6e919c9712d8fe6c2918778df1f8c2ee0675a87a48be5d2aaa54e320703ced4b' '1e2913e21c491d546e05f9b4edf5a6c7a22d89ed0b36ef692ca6272bcd5faec6') # Possible replacements are listed in build/linux/unbundle/replace_gn_files.py @@ -93,6 +97,8 @@ prepare() { third_party/libxml/chromium/*.cc # Upstream fixes + patch -Np1 -i ../icu68.patch + patch -Np1 -d v8 <../v8-icu68.patch patch -Np1 -d third_party/skia <../subpixel-anti-aliasing-in-FreeType-2.8.1.patch # Fixes for building with libstdc++ instead of libc++ diff --git a/icu68.patch b/icu68.patch new file mode 100644 index 0000000..bea451a --- /dev/null +++ b/icu68.patch @@ -0,0 +1,421 @@ +From 4d16e52a5e6771c4aa5f892e14486bf0e87027d1 Mon Sep 17 00:00:00 2001 +From: Frank Tang +Date: Tue, 20 Oct 2020 00:11:50 +0000 +Subject: [PATCH] Prepare for landing ICU68 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In the landing process of ICU68 we found these need to be changed +since ICU68 no longer define TRUE and FALSE for UBool to +avoid C++20 problem. + +Bug: 1138555 +Change-Id: I64fd98c99864aa86b07280537a780105cb0eabbe +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2473522 +Reviewed-by: Frank Tang +Reviewed-by: Colin Blundell +Reviewed-by: Dominic Battré +Reviewed-by: Guillaume Jenkins +Reviewed-by: Jungshik Shin +Reviewed-by: Mihai Sardarescu +Reviewed-by: Dave Tapuska +Reviewed-by: Mustafa Emre Acer +Reviewed-by: Marian Fechete +Reviewed-by: Matthew Denton +Commit-Queue: Frank Tang +Cr-Commit-Position: refs/heads/master@{#818713} +--- + base/i18n/icu_util.cc | 2 +- + base/i18n/string_compare.cc | 4 ++-- + base/i18n/time_formatting.cc | 2 +- + .../autofill/core/common/autofill_regexes.cc | 8 ++++---- + .../browser/string_conversions_util.cc | 6 +++--- + .../public/identity_manager/identity_utils.cc | 2 +- + .../renderer/spellcheck_worditerator.cc | 2 +- + .../spoof_checks/idn_spoof_checker.cc | 4 ++-- + .../spoof_checks/skeleton_generator.cc | 2 +- + content/zygote/zygote_linux.cc | 2 +- + .../time_zone_monitor_android.cc | 2 +- + .../renderer/core/exported/web_view_test.cc | 12 ++++++------ + .../blink/renderer/platform/text/locale_icu.cc | 4 ++-- + .../platform/text/text_break_iterator_icu.cc | 16 ++++++++-------- + .../renderer/platform/text/unicode_utilities.cc | 2 +- + .../renderer/platform/wtf/text/text_codec_icu.cc | 2 +- + ui/base/l10n/formatter.cc | 6 +++--- + 17 files changed, 39 insertions(+), 39 deletions(-) + +diff --git a/base/i18n/icu_util.cc b/base/i18n/icu_util.cc +index b225f1d46c0b7..20debbe655c46 100644 +--- a/base/i18n/icu_util.cc ++++ b/base/i18n/icu_util.cc +@@ -327,7 +327,7 @@ void InitializeIcuTimeZone() { + // https://ssl.icu-project.org/trac/ticket/13208 . + string16 zone_id = android::GetDefaultTimeZoneId(); + icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone( +- icu::UnicodeString(FALSE, zone_id.data(), zone_id.length()))); ++ icu::UnicodeString(false, zone_id.data(), zone_id.length()))); + #elif defined(OS_FUCHSIA) + // The platform-specific mechanisms used by ICU's detectHostTimeZone() to + // determine the default time zone will not work on Fuchsia. Therefore, +diff --git a/base/i18n/string_compare.cc b/base/i18n/string_compare.cc +index c0e83c6f7306f..e4fb687c14884 100644 +--- a/base/i18n/string_compare.cc ++++ b/base/i18n/string_compare.cc +@@ -18,8 +18,8 @@ UCollationResult CompareString16WithCollator(const icu::Collator& collator, + StringPiece16 rhs) { + UErrorCode error = U_ZERO_ERROR; + UCollationResult result = collator.compare( +- icu::UnicodeString(FALSE, lhs.data(), static_cast(lhs.length())), +- icu::UnicodeString(FALSE, rhs.data(), static_cast(rhs.length())), ++ icu::UnicodeString(false, lhs.data(), static_cast(lhs.length())), ++ icu::UnicodeString(false, rhs.data(), static_cast(rhs.length())), + error); + DCHECK(U_SUCCESS(error)); + return result; +diff --git a/base/i18n/time_formatting.cc b/base/i18n/time_formatting.cc +index c769b57d7162a..c085f5ef2448a 100644 +--- a/base/i18n/time_formatting.cc ++++ b/base/i18n/time_formatting.cc +@@ -240,7 +240,7 @@ bool TimeDurationFormatWithSeconds(const TimeDelta time, + icu::FieldPosition ignore(icu::FieldPosition::DONT_CARE); + measure_format.formatMeasures(measures, 3, formatted, ignore, status); + *out = i18n::UnicodeStringToString16(formatted); +- return U_SUCCESS(status) == TRUE; ++ return U_SUCCESS(status); + } + + string16 DateIntervalFormat(const Time& begin_time, +diff --git a/components/autofill/core/common/autofill_regexes.cc b/components/autofill/core/common/autofill_regexes.cc +index 02254fa266ac5..1cf12f310d077 100644 +--- a/components/autofill/core/common/autofill_regexes.cc ++++ b/components/autofill/core/common/autofill_regexes.cc +@@ -43,7 +43,7 @@ class AutofillRegexes { + icu::RegexMatcher* AutofillRegexes::GetMatcher(const base::string16& pattern) { + auto it = matchers_.find(pattern); + if (it == matchers_.end()) { +- const icu::UnicodeString icu_pattern(FALSE, pattern.data(), ++ const icu::UnicodeString icu_pattern(false, pattern.data(), + pattern.length()); + + UErrorCode status = U_ZERO_ERROR; +@@ -71,21 +71,21 @@ bool MatchesPattern(const base::string16& input, + base::AutoLock lock(*g_lock); + + icu::RegexMatcher* matcher = g_autofill_regexes->GetMatcher(pattern); +- icu::UnicodeString icu_input(FALSE, input.data(), input.length()); ++ icu::UnicodeString icu_input(false, input.data(), input.length()); + matcher->reset(icu_input); + + UErrorCode status = U_ZERO_ERROR; + UBool matched = matcher->find(0, status); + DCHECK(U_SUCCESS(status)); + +- if (matched == TRUE && match) { ++ if (matched && match) { + icu::UnicodeString match_unicode = + matcher->group(group_to_be_captured, status); + DCHECK(U_SUCCESS(status)); + *match = base::i18n::UnicodeStringToString16(match_unicode); + } + +- return matched == TRUE; ++ return matched; + } + + } // namespace autofill +diff --git a/components/autofill_assistant/browser/string_conversions_util.cc b/components/autofill_assistant/browser/string_conversions_util.cc +index 212bafa637288..1d00d68019fa3 100644 +--- a/components/autofill_assistant/browser/string_conversions_util.cc ++++ b/components/autofill_assistant/browser/string_conversions_util.cc +@@ -39,13 +39,13 @@ bool UnicodeToUTF8(const std::vector& source, std::string* target) { + // |target|. + bool AppendUnicodeToUTF8(const UChar32 source, std::string* target) { + char bytes[4]; +- UBool error = FALSE; ++ UBool error = false; + size_t offset = 0; + U8_APPEND(bytes, offset, base::size(bytes), source, error); +- if (error == FALSE) { ++ if (error == false) { + target->append(bytes, offset); + } +- return error == FALSE; ++ return !error; + } + + } // namespace autofill_assistant +diff --git a/components/signin/public/identity_manager/identity_utils.cc b/components/signin/public/identity_manager/identity_utils.cc +index 1c414e20e5de4..014d6746d95f2 100644 +--- a/components/signin/public/identity_manager/identity_utils.cc ++++ b/components/signin/public/identity_manager/identity_utils.cc +@@ -33,7 +33,7 @@ bool IsUsernameAllowedByPattern(base::StringPiece username, + + // See if the username matches the policy-provided pattern. + UErrorCode status = U_ZERO_ERROR; +- const icu::UnicodeString icu_pattern(FALSE, utf16_pattern.data(), ++ const icu::UnicodeString icu_pattern(false, utf16_pattern.data(), + utf16_pattern.length()); + icu::RegexMatcher matcher(icu_pattern, UREGEX_CASE_INSENSITIVE, status); + if (!U_SUCCESS(status)) { +diff --git a/components/spellcheck/renderer/spellcheck_worditerator.cc b/components/spellcheck/renderer/spellcheck_worditerator.cc +index ec16fefbebc91..3b1f060866021 100644 +--- a/components/spellcheck/renderer/spellcheck_worditerator.cc ++++ b/components/spellcheck/renderer/spellcheck_worditerator.cc +@@ -442,7 +442,7 @@ bool SpellcheckWordIterator::Normalize(size_t input_start, + // spellchecker and we need manual normalization as well. The normalized + // text does not have to be NUL-terminated since its characters are copied to + // string16, which adds a NUL character when we need. +- icu::UnicodeString input(FALSE, &text_[input_start], ++ icu::UnicodeString input(false, &text_[input_start], + base::checked_cast(input_length)); + UErrorCode status = U_ZERO_ERROR; + icu::UnicodeString output; +diff --git a/components/url_formatter/spoof_checks/idn_spoof_checker.cc b/components/url_formatter/spoof_checks/idn_spoof_checker.cc +index 6d66a7c4db885..d73192b1426a4 100644 +--- a/components/url_formatter/spoof_checks/idn_spoof_checker.cc ++++ b/components/url_formatter/spoof_checks/idn_spoof_checker.cc +@@ -368,7 +368,7 @@ IDNSpoofChecker::Result IDNSpoofChecker::SafeToDisplayAsUnicode( + return Result::kICUSpoofChecks; + } + +- icu::UnicodeString label_string(FALSE /* isTerminated */, label.data(), ++ icu::UnicodeString label_string(false /* isTerminated */, label.data(), + base::checked_cast(label.size())); + + // A punycode label with 'xn--' prefix is not subject to the URL +@@ -711,7 +711,7 @@ bool IDNSpoofChecker::IsWholeScriptConfusableAllowedForTLD( + base::StringPiece tld, + base::StringPiece16 tld_unicode) { + icu::UnicodeString tld_string( +- FALSE /* isTerminated */, tld_unicode.data(), ++ false /* isTerminated */, tld_unicode.data(), + base::checked_cast(tld_unicode.size())); + // Allow if the TLD contains any letter from the script, in which case it's + // likely to be a TLD in that script. +diff --git a/components/url_formatter/spoof_checks/skeleton_generator.cc b/components/url_formatter/spoof_checks/skeleton_generator.cc +index 9628626600df5..9a779018ebfae 100644 +--- a/components/url_formatter/spoof_checks/skeleton_generator.cc ++++ b/components/url_formatter/spoof_checks/skeleton_generator.cc +@@ -116,7 +116,7 @@ SkeletonGenerator::~SkeletonGenerator() = default; + Skeletons SkeletonGenerator::GetSkeletons(base::StringPiece16 hostname) { + Skeletons skeletons; + size_t hostname_length = hostname.length() - (hostname.back() == '.' ? 1 : 0); +- icu::UnicodeString host(FALSE, hostname.data(), hostname_length); ++ icu::UnicodeString host(false, hostname.data(), hostname_length); + // If input has any characters outside Latin-Greek-Cyrillic and [0-9._-], + // there is no point in getting rid of diacritics because combining marks + // attached to non-LGC characters are already blocked. +diff --git a/content/zygote/zygote_linux.cc b/content/zygote/zygote_linux.cc +index 95d5a82c25082..b6d8e5a29c55e 100644 +--- a/content/zygote/zygote_linux.cc ++++ b/content/zygote/zygote_linux.cc +@@ -557,7 +557,7 @@ base::ProcessId Zygote::ReadArgsAndFork(base::PickleIterator iter, + if (!iter.ReadString16(&timezone_id)) + return -1; + icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone( +- icu::UnicodeString(FALSE, timezone_id.data(), timezone_id.length()))); ++ icu::UnicodeString(false, timezone_id.data(), timezone_id.length()))); + + if (!iter.ReadInt(&numfds)) + return -1; +diff --git a/services/device/time_zone_monitor/time_zone_monitor_android.cc b/services/device/time_zone_monitor/time_zone_monitor_android.cc +index 818670a821e41..f57f9724e5d48 100644 +--- a/services/device/time_zone_monitor/time_zone_monitor_android.cc ++++ b/services/device/time_zone_monitor/time_zone_monitor_android.cc +@@ -34,7 +34,7 @@ void TimeZoneMonitorAndroid::TimeZoneChangedFromJava( + // See base/i18n/icu_util.cc:InitializeIcuTimeZone() for more information. + base::string16 zone_id = base::android::GetDefaultTimeZoneId(); + std::unique_ptr new_zone(icu::TimeZone::createTimeZone( +- icu::UnicodeString(FALSE, zone_id.data(), zone_id.length()))); ++ icu::UnicodeString(false, zone_id.data(), zone_id.length()))); + UpdateIcuAndNotifyClients(std::move(new_zone)); + } + +diff --git a/third_party/blink/renderer/core/exported/web_view_test.cc b/third_party/blink/renderer/core/exported/web_view_test.cc +index a6b9552bb18d9..36809d914d1af 100644 +--- a/third_party/blink/renderer/core/exported/web_view_test.cc ++++ b/third_party/blink/renderer/core/exported/web_view_test.cc +@@ -4868,18 +4868,18 @@ TEST_F(ShowUnhandledTapTest, ShowUnhandledTapUIIfNeeded) { + + TEST_F(ShowUnhandledTapTest, ShowUnhandledTapUIIfNeededWithMutateDom) { + // Test dom mutation. +- TestEachMouseEvent("mutateDom", FALSE); ++ TestEachMouseEvent("mutateDom", false); + + // Test without any DOM mutation. +- TestEachMouseEvent("none", TRUE); ++ TestEachMouseEvent("none", true); + } + + TEST_F(ShowUnhandledTapTest, ShowUnhandledTapUIIfNeededWithMutateStyle) { + // Test style mutation. +- TestEachMouseEvent("mutateStyle", FALSE); ++ TestEachMouseEvent("mutateStyle", false); + + // Test checkbox:indeterminate style mutation. +- TestEachMouseEvent("mutateIndeterminate", FALSE); ++ TestEachMouseEvent("mutateIndeterminate", false); + + // Test click div with :active style. + Tap("style_active"); +@@ -4888,10 +4888,10 @@ TEST_F(ShowUnhandledTapTest, ShowUnhandledTapUIIfNeededWithMutateStyle) { + + TEST_F(ShowUnhandledTapTest, ShowUnhandledTapUIIfNeededWithPreventDefault) { + // Test swallowing. +- TestEachMouseEvent("preventDefault", FALSE); ++ TestEachMouseEvent("preventDefault", false); + + // Test without any preventDefault. +- TestEachMouseEvent("none", TRUE); ++ TestEachMouseEvent("none", true); + } + + TEST_F(ShowUnhandledTapTest, ShowUnhandledTapUIIfNeededWithNonTriggeringNodes) { +diff --git a/third_party/blink/renderer/platform/text/locale_icu.cc b/third_party/blink/renderer/platform/text/locale_icu.cc +index 92fb99e0cc027..f991b5137728c 100644 +--- a/third_party/blink/renderer/platform/text/locale_icu.cc ++++ b/third_party/blink/renderer/platform/text/locale_icu.cc +@@ -169,12 +169,12 @@ static String GetDateFormatPattern(const UDateFormat* date_format) { + return g_empty_string; + + UErrorCode status = U_ZERO_ERROR; +- int32_t length = udat_toPattern(date_format, TRUE, nullptr, 0, &status); ++ int32_t length = udat_toPattern(date_format, true, nullptr, 0, &status); + if (status != U_BUFFER_OVERFLOW_ERROR || !length) + return g_empty_string; + StringBuffer buffer(length); + status = U_ZERO_ERROR; +- udat_toPattern(date_format, TRUE, buffer.Characters(), length, &status); ++ udat_toPattern(date_format, true, buffer.Characters(), length, &status); + if (U_FAILURE(status)) + return g_empty_string; + return String::Adopt(buffer); +diff --git a/third_party/blink/renderer/platform/text/text_break_iterator_icu.cc b/third_party/blink/renderer/platform/text/text_break_iterator_icu.cc +index 5bea0079dd343..0e8c60a31599e 100644 +--- a/third_party/blink/renderer/platform/text/text_break_iterator_icu.cc ++++ b/third_party/blink/renderer/platform/text/text_break_iterator_icu.cc +@@ -312,13 +312,13 @@ static inline bool TextInChunkOrOutOfRange(UText* text, + text->chunkOffset = offset <= std::numeric_limits::max() + ? static_cast(offset) + : 0; +- is_accessible = TRUE; ++ is_accessible = true; + return true; + } + if (native_index >= native_length && + text->chunkNativeLimit == native_length) { + text->chunkOffset = text->chunkLength; +- is_accessible = FALSE; ++ is_accessible = false; + return true; + } + } else { +@@ -331,12 +331,12 @@ static inline bool TextInChunkOrOutOfRange(UText* text, + text->chunkOffset = offset <= std::numeric_limits::max() + ? static_cast(offset) + : 0; +- is_accessible = TRUE; ++ is_accessible = true; + return true; + } + if (native_index <= 0 && !text->chunkNativeStart) { + text->chunkOffset = 0; +- is_accessible = FALSE; ++ is_accessible = false; + return true; + } + } +@@ -347,7 +347,7 @@ static UBool TextLatin1Access(UText* text, + int64_t native_index, + UBool forward) { + if (!text->context) +- return FALSE; ++ return false; + int64_t native_length = TextNativeLength(text); + UBool is_accessible; + if (TextInChunkOrOutOfRange(text, native_index, native_length, forward, +@@ -371,7 +371,7 @@ static UBool TextLatin1Access(UText* text, + DCHECK_EQ(new_context, kPriorContext); + TextLatin1SwitchToPriorContext(text, native_index, native_length, forward); + } +- return TRUE; ++ return true; + } + + static const struct UTextFuncs kTextLatin1Funcs = { +@@ -511,7 +511,7 @@ static void TextUTF16SwitchToPriorContext(UText* text, + + static UBool TextUTF16Access(UText* text, int64_t native_index, UBool forward) { + if (!text->context) +- return FALSE; ++ return false; + int64_t native_length = TextNativeLength(text); + UBool is_accessible; + if (TextInChunkOrOutOfRange(text, native_index, native_length, forward, +@@ -533,7 +533,7 @@ static UBool TextUTF16Access(UText* text, int64_t native_index, UBool forward) { + DCHECK_EQ(new_context, kPriorContext); + TextUTF16SwitchToPriorContext(text, native_index, native_length, forward); + } +- return TRUE; ++ return true; + } + + static const struct UTextFuncs kTextUTF16Funcs = { +diff --git a/third_party/blink/renderer/platform/text/unicode_utilities.cc b/third_party/blink/renderer/platform/text/unicode_utilities.cc +index 2cefd5390b6b0..b8c4515dc13ca 100644 +--- a/third_party/blink/renderer/platform/text/unicode_utilities.cc ++++ b/third_party/blink/renderer/platform/text/unicode_utilities.cc +@@ -300,7 +300,7 @@ void NormalizeCharactersIntoNFCForm(const UChar* characters, + DCHECK(U_SUCCESS(status)); + int32_t input_length = static_cast(length); + // copy-on-write. +- icu::UnicodeString normalized(FALSE, characters, input_length); ++ icu::UnicodeString normalized(false, characters, input_length); + // In the vast majority of cases, input is already NFC. Run a quick check + // to avoid normalizing the entire input unnecessarily. + int32_t normalized_prefix_length = +diff --git a/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc b/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc +index b62573550a1cb..fb8ab0530c51e 100644 +--- a/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc ++++ b/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc +@@ -327,7 +327,7 @@ void TextCodecICU::CreateICUConverter() const { + DLOG_IF(ERROR, err == U_AMBIGUOUS_ALIAS_WARNING) + << "ICU ambiguous alias warning for encoding: " << encoding_.GetName(); + if (converter_icu_) +- ucnv_setFallback(converter_icu_, TRUE); ++ ucnv_setFallback(converter_icu_, true); + } + + int TextCodecICU::DecodeToBuffer(UChar* target, +diff --git a/ui/base/l10n/formatter.cc b/ui/base/l10n/formatter.cc +index e4446d4786f49..684ead8c0a0df 100644 +--- a/ui/base/l10n/formatter.cc ++++ b/ui/base/l10n/formatter.cc +@@ -234,7 +234,7 @@ void Formatter::Format(Unit unit, + int value, + icu::UnicodeString* formatted_string) const { + DCHECK(simple_format_[unit]); +- DCHECK(formatted_string->isEmpty() == TRUE); ++ DCHECK(formatted_string->isEmpty()); + UErrorCode error = U_ZERO_ERROR; + FormatNumberInPlural(*simple_format_[unit], + value, formatted_string, &error); +@@ -250,7 +250,7 @@ void Formatter::Format(TwoUnits units, + << "Detailed() not implemented for your (format, length) combination!"; + DCHECK(detailed_format_[units][1]) + << "Detailed() not implemented for your (format, length) combination!"; +- DCHECK(formatted_string->isEmpty() == TRUE); ++ DCHECK(formatted_string->isEmpty()); + UErrorCode error = U_ZERO_ERROR; + FormatNumberInPlural(*detailed_format_[units][0], value_1, + formatted_string, &error); +@@ -283,7 +283,7 @@ std::unique_ptr Formatter::InitFormat( + base::string16 pattern = l10n_util::GetStringUTF16(pluralities.id); + UErrorCode error = U_ZERO_ERROR; + std::unique_ptr format(new icu::MessageFormat( +- icu::UnicodeString(FALSE, pattern.data(), pattern.length()), error)); ++ icu::UnicodeString(false, pattern.data(), pattern.length()), error)); + DCHECK(U_SUCCESS(error)); + if (format.get()) + return format; diff --git a/v8-icu68.patch b/v8-icu68.patch new file mode 100644 index 0000000..98739ea --- /dev/null +++ b/v8-icu68.patch @@ -0,0 +1,192 @@ +From b0a7f5691113534c2cf771f2dd3cece5e93bc7d4 Mon Sep 17 00:00:00 2001 +From: Frank Tang +Date: Tue, 03 Nov 2020 23:20:37 -0800 +Subject: [PATCH] Update to ICU68-1 + +ICU68-1 change the output skeleton format. So we need to change +resolvedOptions code for 68 migration. + +Chromium roll +https://chromium-review.googlesource.com/c/chromium/src/+/2474093 + +Bug: v8:10945 +Change-Id: I3b2c7fbe8abb22df8fa51287c498ca3245b8c55b +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2477431 +Commit-Queue: Frank Tang +Reviewed-by: Jakob Kummerow +Reviewed-by: Shu-yu Guo +Cr-Commit-Position: refs/heads/master@{#70972} + +(ported to work with CurrencySignString(Isolate* isolate, + Handle UnitDisplayString(Isolate* isolate, + const icu::UnicodeString& skeleton) { + // Ex: skeleton as +- // "measure-unit/length-meter .### rounding-mode-half-up unit-width-full-name" ++ // =ICU-68.1: "unit/length-meter .### rounding-mode-half-up unit-width-full-name" + if (skeleton.indexOf("unit-width-full-name") >= 0) { + return ReadOnlyRoots(isolate).long_string_handle(); + } + // Ex: skeleton as +- // "measure-unit/length-meter .### rounding-mode-half-up unit-width-narrow". ++ // =ICU-68.1: "unit/length-meter .### rounding-mode-half-up unit-width-narrow". + if (skeleton.indexOf("unit-width-narrow") >= 0) { + return ReadOnlyRoots(isolate).narrow_string_handle(); + } + // Ex: skeleton as +- // "measure-unit/length-foot .### rounding-mode-half-up" ++ // =ICU-68.1: "unit/length-foot .### rounding-mode-half-up" + return ReadOnlyRoots(isolate).short_string_handle(); + } + +@@ -422,7 +425,8 @@ Notation NotationFromSkeleton(const icu::UnicodeString& skeleton) { + return Notation::COMPACT; + } + // Ex: skeleton as +- // "measure-unit/length-foot .### rounding-mode-half-up" ++ // =ICU-68.1: "unit/length-foot .### rounding-mode-half-up" + return Notation::STANDARD; + } + +@@ -562,14 +566,23 @@ namespace { + + // Ex: percent .### rounding-mode-half-up + // Special case for "percent" +-// Ex: "measure-unit/length-kilometer per-measure-unit/duration-hour .### +-// rounding-mode-half-up" should return "kilometer-per-unit". +-// Ex: "measure-unit/duration-year .### rounding-mode-half-up" should return +-// "year". ++// =ICU-68.1: ++// Ex: "unit/milliliter-per-acre .### rounding-mode-half-up" ++// should return "milliliter-per-acre". ++// Ex: "unit/year .### rounding-mode-half-up" should return ++// "year". + std::string UnitFromSkeleton(const icu::UnicodeString& skeleton) { + std::string str; + str = skeleton.toUTF8String(str); ++#if U_ICU_VERSION_MAJOR_NUM < 68 + std::string search("measure-unit/"); ++#else ++ std::string search("unit/"); ++#endif + size_t begin = str.find(search); + if (begin == str.npos) { + // Special case for "percent". +@@ -578,20 +591,41 @@ std::string UnitFromSkeleton(const icu::UnicodeString& skeleton) { + } + return ""; + } ++#if U_ICU_VERSION_MAJOR_NUM < 68 + // Skip the type (ex: "length"). + // "measure-unit/length-kilometer per-measure-unit/duration-hour" + // b + begin = str.find("-", begin + search.size()); ++#else ++ // Ex: ++ // "unit/acre .### rounding-mode-half-up" ++ // b ++ // Ex: ++ // "unit/milliliter-per-acre .### rounding-mode-half-up" ++ // b ++ begin += search.size(); ++#endif + if (begin == str.npos) { + return ""; + } ++#if U_ICU_VERSION_MAJOR_NUM < 68 + begin++; // Skip the '-'. ++#endif + // Find the end of the subtype. + size_t end = str.find(" ", begin); +- // "measure-unit/length-kilometer per-measure-unit/duration-hour" +- // b e ++ // =ICU-68.1: ++ // Ex: ++ // "unit/acre .### rounding-mode-half-up" ++ // b e ++ // Ex: ++ // "unit/milliliter-per-acre .### rounding-mode-half-up" ++ // b e + if (end == str.npos) { + end = str.size(); ++#if U_ICU_VERSION_MAJOR_NUM < 68 + return str.substr(begin, end - begin); + } + // "measure-unit/length-kilometer per-measure-unit/duration-hour" +@@ -625,17 +659,36 @@ std::string UnitFromSkeleton(const icu::UnicodeString& skeleton) { + // "measure-unit/length-kilometer per-measure-unit/duration-hour" + // [result ] b e + return result + "-per-" + str.substr(begin, end - begin); ++#else ++ } ++ return str.substr(begin, end - begin); ++#endif + } + + Style StyleFromSkeleton(const icu::UnicodeString& skeleton) { + if (skeleton.indexOf("currency/") >= 0) { + return Style::CURRENCY; + } ++#if U_ICU_VERSION_MAJOR_NUM < 68 + if (skeleton.indexOf("measure-unit/") >= 0) { + if (skeleton.indexOf("scale/100") >= 0 && + skeleton.indexOf("measure-unit/concentr-percent") >= 0) { ++#else ++ if (skeleton.indexOf("percent") >= 0) { ++ // percent precision-integer rounding-mode-half-up scale/100 ++ if (skeleton.indexOf("scale/100") >= 0) { ++#endif + return Style::PERCENT; ++#if U_ICU_VERSION_MAJOR_NUM >= 68 ++ } else { ++ return Style::UNIT; ++#endif + } ++#if U_ICU_VERSION_MAJOR_NUM >= 68 ++ } ++ // Before ICU68: "measure-unit/", since ICU68 "unit/" ++ if (skeleton.indexOf("unit/") >= 0) { ++#endif + return Style::UNIT; + } + return Style::DECIMAL; +diff --git a/src/objects/js-relative-time-format.cc b/src/objects/js-relative-time-format.cc +index 267343aaae..64d56a1c12 100644 +--- a/src/objects/js-relative-time-format.cc ++++ b/src/objects/js-relative-time-format.cc +@@ -195,9 +195,18 @@ MaybeHandle JSRelativeTimeFormat::New( + } + } + ++#if U_ICU_VERSION_MAJOR_NUM < 68 + icu::DecimalFormat* decimal_format = + static_cast(number_format); + decimal_format->setMinimumGroupingDigits(-2); ++#else ++ if (number_format->getDynamicClassID() == ++ icu::DecimalFormat::getStaticClassID()) { ++ icu::DecimalFormat* decimal_format = ++ static_cast(number_format); ++ decimal_format->setMinimumGroupingDigits(-2); ++ } ++#endif + + // Change UDISPCTX_CAPITALIZATION_NONE to other values if + // ECMA402 later include option to change capitalization. -- cgit v1.2.3