summaryrefslogtreecommitdiff
path: root/chromium-125-debian-bad-font-gc0000.patch
diff options
context:
space:
mode:
Diffstat (limited to 'chromium-125-debian-bad-font-gc0000.patch')
-rw-r--r--chromium-125-debian-bad-font-gc0000.patch425
1 files changed, 425 insertions, 0 deletions
diff --git a/chromium-125-debian-bad-font-gc0000.patch b/chromium-125-debian-bad-font-gc0000.patch
new file mode 100644
index 0000000..7eaa721
--- /dev/null
+++ b/chromium-125-debian-bad-font-gc0000.patch
@@ -0,0 +1,425 @@
+Revert the following commit:
+
+
+commit cc6c0b2a9e1dbc96f3ebed713dc71960a29dc4f1
+Author: Ian Kilpatrick <ikilpatrick@chromium.org>
+Date: Tue Mar 5 20:27:13 2024 +0000
+
+ Reland "[gc] Make FontFamily immutable."
+
+ This reverts commit 748ed11510ec5bb09cc8b92f67f1f62964f023fa.
+
+ Reason for revert: Previous patch which caused MSAN issue was reapplied.
+
+ Original change's description:
+ > Revert "[gc] Make FontFamily immutable."
+ >
+ > This reverts commit ca3d3085d8b01fc74623d639c615fc57842cd26d.
+ >
+ > Reason for revert: crrev.com/c/5328767 is the reason for failure on some tests on MSAN. Please see crbug.com/327969288 for more details.
+ >
+ > Original change's description:
+ > > [gc] Make FontFamily immutable.
+ > >
+ > > Previously we'd build up font-family lists front to back, but would
+ > > need to mutate them to do so. Instead just build them backwards.
+ > >
+ > > This removes a bunch of problematic APIs (like AppendFamily - which
+ > > doesn't append), and simplifies the code.
+ > >
+ > > This will help avoid atomic write barriers once converted to oilpan.
+ > >
+ > > Bug: 41490008
+ > > Change-Id: Icfcec2d0a1716585cf42985616c02b42b6647943
+ > > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5322929
+ > > Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
+ > > Reviewed-by: Dominik Röttsches <drott@chromium.org>
+ > > Cr-Commit-Position: refs/heads/main@{#1267168}
+ >
+ > Bug: 41490008, 327969288
+ > Change-Id: Ic69a5707d00cc98b97dcae3f4b8207b452ce5cbd
+ > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5333950
+ > Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
+ > Commit-Queue: Taiyo Mizuhashi <taiyo@chromium.org>
+ > Owners-Override: Taiyo Mizuhashi <taiyo@chromium.org>
+ > Cr-Commit-Position: refs/heads/main@{#1267674}
+
+ Bug: 41490008, 327969288
+ Change-Id: If1d395e324b0be15488ef5410e9bcdb219bb19c6
+ Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5344844
+ Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
+ Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
+ Cr-Commit-Position: refs/heads/main@{#1268654}
+
+--- a/third_party/blink/renderer/core/css/css_font_face.cc
++++ b/third_party/blink/renderer/core/css/css_font_face.cc
+@@ -216,8 +216,9 @@ bool CSSFontFace::MaybeLoadFont(const Fo
+
+ void CSSFontFace::Load() {
+ FontDescription font_description;
+- font_description.SetFamily(
+- FontFamily(font_face_->family(), FontFamily::Type::kFamilyName));
++ FontFamily font_family;
++ font_family.SetFamily(font_face_->family(), FontFamily::Type::kFamilyName);
++ font_description.SetFamily(font_family);
+ Load(font_description);
+ }
+
+--- a/third_party/blink/renderer/core/css/font_face_set_document.cc
++++ b/third_party/blink/renderer/core/css/font_face_set_document.cc
+@@ -195,10 +195,13 @@ bool FontFaceSetDocument::ResolveFontSty
+ ComputedStyleBuilder builder =
+ GetDocument()->GetStyleResolver().CreateComputedStyleBuilder();
+
+- FontDescription default_font_description;
+- default_font_description.SetFamily(FontFamily(
++ FontFamily font_family;
++ font_family.SetFamily(
+ FontFaceSet::DefaultFontFamily(),
+- FontFamily::InferredTypeFor(FontFaceSet::DefaultFontFamily())));
++ FontFamily::InferredTypeFor(FontFaceSet::DefaultFontFamily()));
++
++ FontDescription default_font_description;
++ default_font_description.SetFamily(font_family);
+ default_font_description.SetSpecifiedSize(FontFaceSet::kDefaultFontSize);
+ default_font_description.SetComputedSize(FontFaceSet::kDefaultFontSize);
+
+--- a/third_party/blink/renderer/core/css/font_face_set_worker.cc
++++ b/third_party/blink/renderer/core/css/font_face_set_worker.cc
+@@ -84,10 +84,13 @@ bool FontFaceSetWorker::ResolveFontStyle
+ return false;
+ }
+
+- FontDescription default_font_description;
+- default_font_description.SetFamily(FontFamily(
++ FontFamily font_family;
++ font_family.SetFamily(
+ FontFaceSet::DefaultFontFamily(),
+- FontFamily::InferredTypeFor(FontFaceSet::DefaultFontFamily())));
++ FontFamily::InferredTypeFor(FontFaceSet::DefaultFontFamily()));
++
++ FontDescription default_font_description;
++ default_font_description.SetFamily(font_family);
+ default_font_description.SetSpecifiedSize(FontFaceSet::kDefaultFontSize);
+ default_font_description.SetComputedSize(FontFaceSet::kDefaultFontSize);
+
+--- a/third_party/blink/renderer/core/css/resolver/font_builder.cc
++++ b/third_party/blink/renderer/core/css/resolver/font_builder.cc
+@@ -54,9 +54,11 @@ void FontBuilder::DidChangeWritingMode()
+ }
+
+ FontFamily FontBuilder::StandardFontFamily() const {
++ FontFamily family;
+ const AtomicString& standard_font_family = StandardFontFamilyName();
+- return FontFamily(standard_font_family,
+- FontFamily::InferredTypeFor(standard_font_family));
++ family.SetFamily(standard_font_family,
++ FontFamily::InferredTypeFor(standard_font_family));
++ return family;
+ }
+
+ AtomicString FontBuilder::StandardFontFamilyName() const {
+--- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
++++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
+@@ -379,8 +379,8 @@ FontDescription::FamilyDescription Style
+
+ if (const auto* system_font =
+ DynamicTo<cssvalue::CSSPendingSystemFontValue>(value)) {
+- desc.family = FontFamily(system_font->ResolveFontFamily(),
+- FontFamily::Type::kFamilyName);
++ desc.family.SetFamily(system_font->ResolveFontFamily(),
++ FontFamily::Type::kFamilyName);
+ return desc;
+ }
+
+@@ -410,8 +410,10 @@ FontDescription::FamilyDescription Style
+ // Take the previous value and wrap it in a `SharedFontFamily` adding to
+ // the linked list.
+ if (has_value) {
+- next =
+- SharedFontFamily::Create(family_name, family_type, std::move(next));
++ scoped_refptr<SharedFontFamily> shared = SharedFontFamily::Create();
++ shared->SetFamily(family_name, family_type);
++ shared->AppendFamily(next);
++ next = shared;
+ }
+ family_name = next_family_name;
+ family_type = is_generic ? FontFamily::Type::kGenericFamily
+@@ -442,7 +444,8 @@ FontDescription::FamilyDescription Style
+ }
+ #endif
+
+- desc.family = FontFamily(family_name, family_type, std::move(next));
++ desc.family.SetFamily(family_name, family_type);
++ desc.family.AppendFamily(next);
+ return desc;
+ }
+
+--- a/third_party/blink/renderer/core/html/canvas/canvas_font_cache.cc
++++ b/third_party/blink/renderer/core/html/canvas/canvas_font_cache.cc
+@@ -29,9 +29,11 @@ const int defaultFontSize = 10;
+
+ const ComputedStyle* CreateDefaultFontStyle(const Document& document) {
+ const AtomicString& default_font_family = font_family_names::kSansSerif;
++ FontFamily font_family;
++ font_family.SetFamily(default_font_family,
++ FontFamily::InferredTypeFor(default_font_family));
+ FontDescription default_font_description;
+- default_font_description.SetFamily(FontFamily(
+- default_font_family, FontFamily::InferredTypeFor(default_font_family)));
++ default_font_description.SetFamily(font_family);
+ default_font_description.SetSpecifiedSize(defaultFontSize);
+ default_font_description.SetComputedSize(defaultFontSize);
+ ComputedStyleBuilder builder =
+--- a/third_party/blink/renderer/core/page/drag_image.cc
++++ b/third_party/blink/renderer/core/page/drag_image.cc
+@@ -127,9 +127,11 @@ static Font DeriveDragLabelFont(int size
+ const AtomicString& family =
+ LayoutThemeFontProvider::SystemFontFamily(CSSValueID::kNone);
+
++ FontFamily font_family;
++ font_family.SetFamily(family, FontFamily::InferredTypeFor(family));
++
+ FontDescription description;
+- description.SetFamily(
+- FontFamily(family, FontFamily::InferredTypeFor(family)));
++ description.SetFamily(font_family);
+ description.SetWeight(font_weight);
+ description.SetSpecifiedSize(size);
+ description.SetComputedSize(size);
+--- a/third_party/blink/renderer/core/paint/embedded_object_painter.cc
++++ b/third_party/blink/renderer/core/paint/embedded_object_painter.cc
+@@ -32,9 +32,11 @@ static Font ReplacementTextFont(const Do
+ const float size = LayoutThemeFontProvider::SystemFontSize(
+ CSSValueID::kWebkitSmallControl, document);
+
++ FontFamily font_family;
++ font_family.SetFamily(family, FontFamily::InferredTypeFor(family));
++
+ FontDescription font_description;
+- font_description.SetFamily(
+- FontFamily(family, FontFamily::InferredTypeFor(family)));
++ font_description.SetFamily(font_family);
+ font_description.SetWeight(kBoldWeightValue);
+ font_description.SetSpecifiedSize(size);
+ font_description.SetComputedSize(size);
+--- a/third_party/blink/renderer/platform/exported/web_font_description.cc
++++ b/third_party/blink/renderer/platform/exported/web_font_description.cc
+@@ -49,10 +49,13 @@ WebFontDescription::WebFontDescription(c
+ }
+
+ WebFontDescription::operator FontDescription() const {
++ FontFamily font_family;
++ font_family.SetFamily(family, family_is_generic
++ ? FontFamily::Type::kGenericFamily
++ : FontFamily::Type::kFamilyName);
++
+ FontDescription desc;
+- desc.SetFamily(FontFamily(family, family_is_generic
+- ? FontFamily::Type::kGenericFamily
+- : FontFamily::Type::kFamilyName));
++ desc.SetFamily(font_family);
+ desc.SetGenericFamily(
+ static_cast<FontDescription::GenericFamilyType>(generic_family));
+ desc.SetSpecifiedSize(size);
+--- a/third_party/blink/renderer/platform/fonts/font_description.h
++++ b/third_party/blink/renderer/platform/fonts/font_description.h
+@@ -195,6 +195,7 @@ class PLATFORM_EXPORT FontDescription {
+ FamilyDescription GetFamilyDescription() const {
+ return FamilyDescription(GenericFamily(), Family());
+ }
++ FontFamily& FirstFamily() { return family_list_; }
+ const FontFamily& FirstFamily() const { return family_list_; }
+ Size GetSize() const {
+ return Size(KeywordSize(), SpecifiedSize(), IsAbsoluteSize());
+@@ -450,6 +451,10 @@ class PLATFORM_EXPORT FontDescription {
+ return fields_.subpixel_ascent_descent_;
+ }
+
++ void SetHashCategory(HashCategory category) {
++ fields_.hash_category_ = category;
++ }
++
+ HashCategory GetHashCategory() const {
+ return static_cast<HashCategory>(fields_.hash_category_);
+ }
+--- a/third_party/blink/renderer/platform/fonts/font_fallback_list.cc
++++ b/third_party/blink/renderer/platform/fonts/font_fallback_list.cc
+@@ -178,8 +178,9 @@ const FontData* FontFallbackList::GetFon
+
+ if (font_selector_) {
+ // Try the user's preferred standard font.
+- FontFamily font_family(font_family_names::kWebkitStandard,
+- FontFamily::Type::kGenericFamily);
++ FontFamily font_family;
++ font_family.SetFamily(font_family_names::kWebkitStandard,
++ FontFamily::Type::kGenericFamily);
+ if (const FontData* data =
+ font_selector_->GetFontData(font_description, font_family)) {
+ return data;
+--- a/third_party/blink/renderer/platform/fonts/font_family.cc
++++ b/third_party/blink/renderer/platform/fonts/font_family.cc
+@@ -49,6 +49,20 @@ bool operator==(const FontFamily& a, con
+ return true;
+ }
+
++wtf_size_t FontFamily::CountNames() const {
++ wtf_size_t count = 0;
++ for (const FontFamily* font_family = this; font_family;
++ font_family = font_family->Next())
++ ++count;
++ return count;
++}
++
++void FontFamily::AppendFamily(AtomicString family_name, Type family_type) {
++ scoped_refptr<SharedFontFamily> appended_family = SharedFontFamily::Create();
++ appended_family->SetFamily(family_name, family_type);
++ AppendFamily(appended_family);
++}
++
+ String FontFamily::ToString() const {
+ StringBuilder builder;
+ builder.Append(family_name_);
+--- a/third_party/blink/renderer/platform/fonts/font_family.h
++++ b/third_party/blink/renderer/platform/fonts/font_family.h
+@@ -39,18 +39,16 @@ class PLATFORM_EXPORT FontFamily {
+ DISALLOW_NEW();
+
+ public:
+- // https://drafts.csswg.org/css-fonts/#font-family-prop
+- enum class Type : uint8_t { kFamilyName, kGenericFamily };
+-
+- FontFamily(const AtomicString& family_name,
+- Type family_type,
+- scoped_refptr<SharedFontFamily> next = nullptr)
+- : family_name_(family_name),
+- next_(std::move(next)),
+- family_type_(family_type) {}
+ FontFamily() = default;
+ ~FontFamily();
+
++ // https://drafts.csswg.org/css-fonts/#font-family-prop
++ enum class Type : uint8_t { kFamilyName, kGenericFamily };
++
++ void SetFamily(const AtomicString& family_name, Type family_type) {
++ family_name_ = family_name;
++ family_type_ = family_type;
++ }
+ // Return this font family's name. Note that it is never quoted nor escaped.
+ // For web-exposed serialization, please rely instead on the functions
+ // ComputedStyleUtils::ValueForFontFamily(const FontFamily&) and
+@@ -59,8 +57,13 @@ class PLATFORM_EXPORT FontFamily {
+ const AtomicString& FamilyName() const { return family_name_; }
+ bool FamilyIsGeneric() const { return family_type_ == Type::kGenericFamily; }
+
++ // Returns number of linked `FontFamily` including `this`, so return value is
++ // greater than or equal to 1. When `Next()` is `nullptr`, return value is 1.
++ wtf_size_t CountNames() const;
+ const FontFamily* Next() const;
+
++ void AppendFamily(scoped_refptr<SharedFontFamily>);
++ void AppendFamily(AtomicString family_name, Type family_type);
+ scoped_refptr<SharedFontFamily> ReleaseNext();
+
+ bool IsPrewarmed() const { return is_prewarmed_; }
+@@ -93,19 +96,12 @@ class PLATFORM_EXPORT SharedFontFamily :
+ SharedFontFamily(const SharedFontFamily&) = delete;
+ SharedFontFamily& operator=(const SharedFontFamily&) = delete;
+
+- static scoped_refptr<SharedFontFamily> Create(
+- const AtomicString& family_name,
+- Type family_type,
+- scoped_refptr<SharedFontFamily> next = nullptr) {
+- return base::AdoptRef(
+- new SharedFontFamily(family_name, family_type, std::move(next)));
++ static scoped_refptr<SharedFontFamily> Create() {
++ return base::AdoptRef(new SharedFontFamily);
+ }
+
+ private:
+- SharedFontFamily(const AtomicString& family_name,
+- Type family_type,
+- scoped_refptr<SharedFontFamily> next)
+- : FontFamily(family_name, family_type, std::move(next)) {}
++ SharedFontFamily() = default;
+ };
+
+ PLATFORM_EXPORT bool operator==(const FontFamily&, const FontFamily&);
+@@ -125,6 +121,10 @@ inline const FontFamily* FontFamily::Nex
+ return next_.get();
+ }
+
++inline void FontFamily::AppendFamily(scoped_refptr<SharedFontFamily> family) {
++ next_ = std::move(family);
++}
++
+ inline scoped_refptr<SharedFontFamily> FontFamily::ReleaseNext() {
+ return std::move(next_);
+ }
+--- a/third_party/blink/renderer/platform/graphics/placeholder_image.cc
++++ b/third_party/blink/renderer/platform/graphics/placeholder_image.cc
+@@ -85,18 +85,23 @@ void DrawCenteredIcon(cc::PaintCanvas* c
+ }
+
+ FontDescription CreatePlaceholderFontDescription(float scale_factor) {
+- scoped_refptr<SharedFontFamily> arial = SharedFontFamily::Create(
+- font_family_names::kArial, FontFamily::Type::kFamilyName);
+- scoped_refptr<SharedFontFamily> helvetica = SharedFontFamily::Create(
+- font_family_names::kHelvetica, FontFamily::Type::kFamilyName, arial);
+- scoped_refptr<SharedFontFamily> helvetica_neue =
+- SharedFontFamily::Create(font_family_names::kHelveticaNeue,
+- FontFamily::Type::kFamilyName, helvetica);
+- FontFamily roboto(font_family_names::kRoboto, FontFamily::Type::kFamilyName,
+- helvetica_neue);
+-
+ FontDescription description;
+- description.SetFamily(roboto);
++ description.FirstFamily().SetFamily(font_family_names::kRoboto,
++ FontFamily::Type::kFamilyName);
++
++ scoped_refptr<SharedFontFamily> helvetica_neue = SharedFontFamily::Create();
++ helvetica_neue->SetFamily(font_family_names::kHelveticaNeue,
++ FontFamily::Type::kFamilyName);
++ scoped_refptr<SharedFontFamily> helvetica = SharedFontFamily::Create();
++ helvetica->SetFamily(font_family_names::kHelvetica,
++ FontFamily::Type::kFamilyName);
++ scoped_refptr<SharedFontFamily> arial = SharedFontFamily::Create();
++ arial->SetFamily(font_family_names::kArial, FontFamily::Type::kFamilyName);
++
++ helvetica->AppendFamily(std::move(arial));
++ helvetica_neue->AppendFamily(std::move(helvetica));
++ description.FirstFamily().AppendFamily(std::move(helvetica_neue));
++
+ description.SetGenericFamily(FontDescription::kSansSerifFamily);
+ description.SetComputedSize(scale_factor * kFontSize);
+ description.SetWeight(FontSelectionValue(500));
+--- a/third_party/blink/renderer/platform/testing/font_test_helpers.cc
++++ b/third_party/blink/renderer/platform/testing/font_test_helpers.cc
+@@ -127,9 +127,11 @@ Font CreateTestFont(const AtomicString&
+ size_t data_size,
+ float size,
+ const FontDescription::VariantLigatures* ligatures) {
++ FontFamily family;
++ family.SetFamily(family_name, FontFamily::Type::kFamilyName);
++
+ FontDescription font_description;
+- font_description.SetFamily(
+- FontFamily(family_name, FontFamily::Type::kFamilyName));
++ font_description.SetFamily(family);
+ font_description.SetSpecifiedSize(size);
+ font_description.SetComputedSize(size);
+ if (ligatures)
+@@ -143,9 +145,11 @@ Font CreateTestFont(const AtomicString&
+ float size,
+ const FontDescription::VariantLigatures* ligatures,
+ void (*init_font_description)(FontDescription*)) {
++ FontFamily family;
++ family.SetFamily(family_name, FontFamily::Type::kFamilyName);
++
+ FontDescription font_description;
+- font_description.SetFamily(
+- FontFamily(family_name, FontFamily::Type::kFamilyName));
++ font_description.SetFamily(family);
+ font_description.SetSpecifiedSize(size);
+ font_description.SetComputedSize(size);
+ if (ligatures)