diff options
Diffstat (limited to 'chromium-125-debian-bad-font-gc0000.patch')
-rw-r--r-- | chromium-125-debian-bad-font-gc0000.patch | 425 |
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) |