From 0a21f66dd0c665dc4d6dbdafc150e93528cb0020 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Thu, 1 Oct 2026 14:01:00 -0700 Subject: [PATCH 01/72] Handle re-entrancy during form field focus transitions Track CFFL_FormField lifetime using ObservedPtr during focus transitions and PWL window updates. Return early if the form field is destroyed while handling these events. Fixed: 567936263 Change-Id: I992b06f6bfde5cc839e9d11b90a098b8affcf5f6 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159451 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- fpdfsdk/formfiller/cffl_formfield.cpp | 59 ++++++++++++++++---------- fpdfsdk/formfiller/cffl_textobject.cpp | 23 +++++++--- 2 files changed, 53 insertions(+), 29 deletions(-) diff --git a/fpdfsdk/formfiller/cffl_formfield.cpp b/fpdfsdk/formfiller/cffl_formfield.cpp index 947fa14a51..790ad3e878 100644 --- a/fpdfsdk/formfiller/cffl_formfield.cpp +++ b/fpdfsdk/formfiller/cffl_formfield.cpp @@ -12,6 +12,7 @@ #include "core/fpdfapi/page/cpdf_page.h" #include "core/fxcrt/cfx_bidi_resolver.h" #include "core/fxcrt/check.h" +#include "core/fxcrt/observed_ptr.h" #include "core/fxge/cfx_renderdevice.h" #include "fpdfsdk/cpdfsdk_pageview.h" #include "fpdfsdk/cpdfsdk_widget.h" @@ -289,7 +290,12 @@ void CFFL_FormField::SetFocusForAnnot(CPDFSDK_Widget* pWidget, Mask nFlag) { CPDFSDK_PageView* pPageView = form_filler_->GetOrCreatePageView(pWidget->GetPage()); + + ObservedPtr observed_this(this); CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView); + if (!observed_this) { + return; + } if (pWnd) { pWnd->SetFocus(); } @@ -304,7 +310,15 @@ void CFFL_FormField::KillFocusForAnnot(Mask nFlag) { } CPDFSDK_PageView* pPageView = form_filler_->GetPageView(widget_->GetPage()); - if (!pPageView || !CommitData(pPageView, nFlag)) { + if (!pPageView) { + return; + } + + ObservedPtr observed_this(this); + if (!CommitData(pPageView, nFlag)) { + return; + } + if (!observed_this) { return; } if (CPWL_Wnd* pWnd = GetPWLWindow(pPageView)) { @@ -510,41 +524,40 @@ bool CFFL_FormField::CommitData(const CPDFSDK_PageView* pPageView, return true; } - ObservedPtr pObserved(widget_); - if (!form_filler_->OnKeyStrokeCommit(pObserved, pPageView, nFlag)) { - if (!pObserved) { - return false; - } - ResetPWLWindow(pPageView); - return true; - } - if (!pObserved) { + ObservedPtr observed_this(this); + ObservedPtr observed_widget(widget_); + const bool keystroke_committed = + form_filler_->OnKeyStrokeCommit(observed_widget, pPageView, nFlag); + if (!observed_widget || !observed_this) { return false; } - - if (!form_filler_->OnValidate(pObserved, pPageView, nFlag)) { - if (!pObserved) { - return false; - } + if (!keystroke_committed) { ResetPWLWindow(pPageView); - return true; + return observed_this.HasObservable(); } - if (!pObserved) { + + const bool validated = + form_filler_->OnValidate(observed_widget, pPageView, nFlag); + if (!observed_widget || !observed_this) { return false; } + if (!validated) { + ResetPWLWindow(pPageView); + return observed_this.HasObservable(); + } - SaveData(pPageView); // may invoking JS to delete this widget. - if (!pObserved) { + SaveData(pPageView); // May invoke JS to delete this widget. + if (!observed_widget || !observed_this) { return false; } - form_filler_->OnCalculate(pObserved); - if (!pObserved) { + form_filler_->OnCalculate(observed_widget); + if (!observed_widget || !observed_this) { return false; } - form_filler_->OnFormat(pObserved); - if (!pObserved) { + form_filler_->OnFormat(observed_widget); + if (!observed_widget || !observed_this) { return false; } diff --git a/fpdfsdk/formfiller/cffl_textobject.cpp b/fpdfsdk/formfiller/cffl_textobject.cpp index da6cd80a34..d8743adef2 100644 --- a/fpdfsdk/formfiller/cffl_textobject.cpp +++ b/fpdfsdk/formfiller/cffl_textobject.cpp @@ -8,6 +8,7 @@ #include "core/fpdfapi/page/cpdf_page.h" #include "core/fpdfdoc/cpdf_bafontmap.h" +#include "core/fxcrt/observed_ptr.h" #include "fpdfsdk/cpdfsdk_widget.h" CFFL_TextObject::CFFL_TextObject(CFFL_InteractiveFormFiller* pFormFiller, @@ -22,18 +23,28 @@ CFFL_TextObject::~CFFL_TextObject() { CPWL_Wnd* CFFL_TextObject::ResetPWLWindow(const CPDFSDK_PageView* pPageView) { DestroyPWLWindow(pPageView); - ObservedPtr pRet(CreateOrUpdatePWLWindow(pPageView)); - widget_->UpdateField(); // May invoke JS, invalidating |pRet|. - return pRet.Get(); + ObservedPtr observed_this(this); + ObservedPtr observed_wnd(CreateOrUpdatePWLWindow(pPageView)); + if (!observed_this) { + return nullptr; + } + // May invoke JS, invalidating `observed_wnd` and `this`. + widget_->UpdateField(); + return observed_this ? observed_wnd.Get() : nullptr; } CPWL_Wnd* CFFL_TextObject::RestorePWLWindow(const CPDFSDK_PageView* pPageView) { SavePWLWindowState(pPageView); DestroyPWLWindow(pPageView); RecreatePWLWindowFromSavedState(pPageView); - ObservedPtr pRet(GetPWLWindow(pPageView)); - widget_->UpdateField(); // May invoke JS, invalidating |pRet|. - return pRet.Get(); + ObservedPtr observed_this(this); + ObservedPtr observed_wnd(GetPWLWindow(pPageView)); + if (!observed_this) { + return nullptr; + } + // May invoke JS, invalidating `observed_wnd` and `this`. + widget_->UpdateField(); + return observed_this ? observed_wnd.Get() : nullptr; } CPDF_BAFontMap* CFFL_TextObject::GetOrCreateFontMap() { From aa5db5763fa862754f18b7cc16794aae426bd8ab Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 15:55:38 -0700 Subject: [PATCH 02/72] Roll third_party/libc++abi/src/ fc1897a2c..09351f6ec (9 commits) https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git/+log/fc1897a2c12a..09351f6ec00c Created with: roll-dep third_party/libc++abi/src Change-Id: I11104651dc89cade173200076ece221b65b98b6a Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159392 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 081f4bd49e..4b8d113d32 100644 --- a/DEPS +++ b/DEPS @@ -192,7 +192,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libc++abi # and whatever else without interference from each other. - 'libcxxabi_revision': 'fc1897a2c12aa27e703c3ed48b62eba8abf4ce19', + 'libcxxabi_revision': '09351f6ec00c2b65f2d03585ae6da07098b024dc', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libpng # and whatever else without interference from each other. From 29d88658ce1749bed1e45ff527af06d23a277ac7 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Thu, 1 Oct 2026 17:25:29 -0700 Subject: [PATCH 03/72] Define OpenType platform and encoding constants Add named constants for OpenType and TrueType platform IDs and encoding IDs in core/fxge/fx_font.h. Use these symbols in CFX_Face and CPDF_TrueTypeFont. Introduce CharMapIdToFontEncoding() in core/fxge/cfx_face.cpp to map platform and encoding IDs to fxge::FontEncoding, replacing ToFontEncoding() and unifying font charmap classification. Fontations requires this functionality because Skrifa exposes raw platform and encoding IDs directly from OpenType 'cmap' records without FreeType's internal translation layer. Unifying charmap classification under CharMapIdToFontEncoding() allows both backends to share identical logic and paves the way for Fontations non-Unicode SFNT charmap support. -- Rename CharMapID to CharMapIdPair - since it is a pair. -- use uint16_t members to match FT value size. -- use designated initializers to avoid accidental swapping of IDs. -- Deprecate use of FT_ENCODING_OLD_LATIN_2 per freetype header. Bug: 42271123 Change-Id: Ia6c0e32b4c55077ec7ca633312d13f578b3e18eb Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159350 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fpdfapi/font/cpdf_cidfont.cpp | 2 +- core/fpdfapi/font/cpdf_font.cpp | 11 ++-- core/fpdfapi/font/cpdf_font.h | 2 +- core/fpdfapi/font/cpdf_truetypefont.cpp | 22 +++---- core/fpdfapi/font/cpdf_type1font.cpp | 2 +- core/fxge/cfx_face.cpp | 88 +++++++++++++++---------- core/fxge/cfx_face.h | 28 ++++---- core/fxge/fx_font.cpp | 12 ++-- core/fxge/fx_font.h | 41 ++++++++++-- 9 files changed, 131 insertions(+), 77 deletions(-) diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp index 588e1e9e30..285efd60b7 100644 --- a/core/fpdfapi/font/cpdf_cidfont.cpp +++ b/core/fpdfapi/font/cpdf_cidfont.cpp @@ -700,7 +700,7 @@ int CPDF_CIDFont::GlyphFromCharCode(uint32_t charcode, bool* pVertGlyph) { RetainPtr face = font_.GetFace(); bool bMSUnicode = UseTTCharmapUnicode(face); bool bMacRoman = - !bMSUnicode && UseTTCharmap(face, CFX_Face::kMacRomanCmapId); + !bMSUnicode && UseTTCharmap(face, CFX_Face::kMacRomanCharMapIdPair); FontEncoding base_encoding = FontEncoding::kStandard; if (bMSUnicode) { base_encoding = FontEncoding::kWinAnsi; diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp index 232b056af0..153b55ed29 100644 --- a/core/fpdfapi/font/cpdf_font.cpp +++ b/core/fpdfapi/font/cpdf_font.cpp @@ -573,12 +573,13 @@ bool CPDF_Font::UseTTCharmapUnicode(const RetainPtr& face) { bool charmap_unicode_found = false; bool charmap_mssymbol_found = false; for (size_t i = 0; i < face->GetCharMapCount(); i++) { - const CFX_Face::CharMapId charmap_id = face->GetCharMapIdByIndex(i); - if (charmap_id == CFX_Face::kWindowsUnicodeCmapId) { + const CFX_Face::CharMapIdPair charmap_id_pair = + face->GetCharMapIdPairByIndex(i); + if (charmap_id_pair == CFX_Face::kWindowsUnicodeCharMapIdPair) { face->SetCharMapByIndex(i); return true; } - if (charmap_id == CFX_Face::kWindowsSymbolCmapId) { + if (charmap_id_pair == CFX_Face::kWindowsSymbolCharMapIdPair) { charmap_mssymbol_found = true; continue; } @@ -597,9 +598,9 @@ bool CPDF_Font::UseTTCharmapUnicode(const RetainPtr& face) { // static bool CPDF_Font::UseTTCharmap(const RetainPtr& face, - const CFX_Face::CharMapId& cmap_id) { + const CFX_Face::CharMapIdPair& charmap_id_pair) { for (size_t i = 0; i < face->GetCharMapCount(); i++) { - if (face->GetCharMapIdByIndex(i) == cmap_id) { + if (face->GetCharMapIdPairByIndex(i) == charmap_id_pair) { face->SetCharMapByIndex(i); return true; } diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h index b5dff86423..049c42eb25 100644 --- a/core/fpdfapi/font/cpdf_font.h +++ b/core/fpdfapi/font/cpdf_font.h @@ -164,7 +164,7 @@ class CPDF_Font : public Retainable, public Observable { static bool UseTTCharmapUnicode(const RetainPtr& face); static bool UseTTCharmap(const RetainPtr& face, - const CFX_Face::CharMapId& cmap_id); + const CFX_Face::CharMapIdPair& charmap_id_pair); static const char* GetAdobeCharName(FontEncoding base_encoding, const std::vector& charnames, diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp index a423af3a76..861887901a 100644 --- a/core/fpdfapi/font/cpdf_truetypefont.cpp +++ b/core/fpdfapi/font/cpdf_truetypefont.cpp @@ -112,7 +112,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() { } return; } - if (UseTTCharmap(face, CFX_Face::kWindowsSymbolCmapId)) { + if (UseTTCharmap(face, CFX_Face::kWindowsSymbolCharMapIdPair)) { for (uint32_t charcode = 0; charcode < 256; charcode++) { glyph_index_[charcode] = GetGlyphIndexForMSSymbol(face, charcode); } @@ -125,7 +125,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() { encoding_.SetUnicode(charcode, UnicodeFromAdobeName(name)); } } - } else if (UseTTCharmap(face, CFX_Face::kMacRomanCmapId)) { + } else if (UseTTCharmap(face, CFX_Face::kMacRomanCharMapIdPair)) { for (uint32_t charcode = 0; charcode < 256; charcode++) { encoding_.SetUnicode(charcode, UnicodeFromAppleRomanCharCode(charcode)); @@ -134,7 +134,7 @@ void CPDF_TrueTypeFont::LoadGlyphMap() { return; } } - if (UseTTCharmap(face, CFX_Face::kMacRomanCmapId)) { + if (UseTTCharmap(face, CFX_Face::kMacRomanCharMapIdPair)) { for (uint32_t charcode = 0; charcode < 256; charcode++) { glyph_index_[charcode] = face->GetCharIndex(charcode); encoding_.SetUnicode(charcode, UnicodeFromAppleRomanCharCode(charcode)); @@ -185,17 +185,17 @@ CPDF_TrueTypeFont::CharmapType CPDF_TrueTypeFont::DetermineCharmapType() const { } if (FontStyleIsNonSymbolic(flags_)) { - if (UseTTCharmap(font_.GetFace(), CFX_Face::kMacRomanCmapId)) { + if (UseTTCharmap(font_.GetFace(), CFX_Face::kMacRomanCharMapIdPair)) { return CharmapType::kMacRoman; } - if (UseTTCharmap(font_.GetFace(), CFX_Face::kWindowsSymbolCmapId)) { + if (UseTTCharmap(font_.GetFace(), CFX_Face::kWindowsSymbolCharMapIdPair)) { return CharmapType::kMSSymbol; } } else { - if (UseTTCharmap(font_.GetFace(), CFX_Face::kWindowsSymbolCmapId)) { + if (UseTTCharmap(font_.GetFace(), CFX_Face::kWindowsSymbolCharMapIdPair)) { return CharmapType::kMSSymbol; } - if (UseTTCharmap(font_.GetFace(), CFX_Face::kMacRomanCmapId)) { + if (UseTTCharmap(font_.GetFace(), CFX_Face::kMacRomanCharMapIdPair)) { return CharmapType::kMacRoman; } } @@ -218,11 +218,11 @@ FontEncoding CPDF_TrueTypeFont::DetermineEncoding() const { bool support_win = false; bool support_mac = false; for (size_t i = 0; i < num_charmaps; i++) { - int platform_id = face->GetCharMapPlatformIdByIndex(i); - if (platform_id == kNamePlatformAppleUnicode || - platform_id == kNamePlatformWindows) { + uint16_t platform_id = face->GetCharMapPlatformIdByIndex(i); + if (platform_id == kPlatformAppleUnicode || + platform_id == kPlatformWindows) { support_win = true; - } else if (platform_id == kNamePlatformMac) { + } else if (platform_id == kPlatformMac) { support_mac = true; } if (support_win && support_mac) { diff --git a/core/fpdfapi/font/cpdf_type1font.cpp b/core/fpdfapi/font/cpdf_type1font.cpp index ff0bda7edb..b4e6acf215 100644 --- a/core/fpdfapi/font/cpdf_type1font.cpp +++ b/core/fpdfapi/font/cpdf_type1font.cpp @@ -153,7 +153,7 @@ void CPDF_Type1Font::LoadGlyphMap() { } #endif if (!IsEmbedded() && !IsSymbolicFont() && font_.IsTTFont()) { - if (UseTTCharmap(face, CFX_Face::kWindowsSymbolCmapId)) { + if (UseTTCharmap(face, CFX_Face::kWindowsSymbolCharMapIdPair)) { bool bGotOne = false; for (uint32_t charcode = 0; charcode < kInternalTableSize; charcode++) { static constexpr std::array prefix = { diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index 4037675b3c..bd8293b7f8 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp @@ -468,38 +468,54 @@ FT_Encoding ToFTEncoding(fxge::FontEncoding encoding) { } } -fxge::FontEncoding ToFontEncoding(uint32_t ft_encoding) { - switch (ft_encoding) { - case FT_ENCODING_ADOBE_CUSTOM: - return fxge::FontEncoding::kAdobeCustom; - case FT_ENCODING_ADOBE_EXPERT: - return fxge::FontEncoding::kAdobeExpert; - case FT_ENCODING_ADOBE_STANDARD: - return fxge::FontEncoding::kAdobeStandard; - case FT_ENCODING_APPLE_ROMAN: +fxge::FontEncoding CharMapIdPairToFontEncoding( + CFX_Face::CharMapIdPair charmap_id_pair) { + const auto [platform_id, encoding_id] = charmap_id_pair; + if (platform_id == kPlatformAppleUnicode) { + return fxge::FontEncoding::kUnicode; + } + if (platform_id == kPlatformMac) { + if (encoding_id == kMacEncodingRoman) { return fxge::FontEncoding::kAppleRoman; - case FT_ENCODING_BIG5: - return fxge::FontEncoding::kBig5; - case FT_ENCODING_PRC: - return fxge::FontEncoding::kGB2312; - case FT_ENCODING_JOHAB: - return fxge::FontEncoding::kJohab; - case FT_ENCODING_ADOBE_LATIN_1: - return fxge::FontEncoding::kLatin1; - case FT_ENCODING_NONE: - return fxge::FontEncoding::kNone; - case FT_ENCODING_OLD_LATIN_2: - return fxge::FontEncoding::kOldLatin2; - case FT_ENCODING_SJIS: - return fxge::FontEncoding::kSjis; - case FT_ENCODING_MS_SYMBOL: - return fxge::FontEncoding::kSymbol; - case FT_ENCODING_UNICODE: - return fxge::FontEncoding::kUnicode; - case FT_ENCODING_WANSUNG: - return fxge::FontEncoding::kWansung; + } + return fxge::FontEncoding::kNone; } - NOTREACHED(); + if (platform_id == kPlatformIso) { + // FreeType treats all encodings under TT_PLATFORM_ISO as Unicode. + return fxge::FontEncoding::kUnicode; + } + if (platform_id == kPlatformWindows) { + switch (encoding_id) { + case kWindowsEncodingSymbol: + return fxge::FontEncoding::kSymbol; + case kWindowsEncodingUnicode: + case kWindowsEncodingUcs4: + return fxge::FontEncoding::kUnicode; + case kWindowsEncodingSjis: + return fxge::FontEncoding::kSjis; + case kWindowsEncodingGb2312: + return fxge::FontEncoding::kGB2312; + case kWindowsEncodingBig5: + return fxge::FontEncoding::kBig5; + case kWindowsEncodingWansung: + return fxge::FontEncoding::kWansung; + case kWindowsEncodingJohab: + return fxge::FontEncoding::kJohab; + } + } + if (platform_id == kPlatformAdobe) { + switch (encoding_id) { + case kAdobeEncodingStandard: + return fxge::FontEncoding::kAdobeStandard; + case kAdobeEncodingExpert: + return fxge::FontEncoding::kAdobeExpert; + case kAdobeEncodingCustom: + return fxge::FontEncoding::kAdobeCustom; + case kAdobeEncodingLatin1: + return fxge::FontEncoding::kLatin1; + } + } + return fxge::FontEncoding::kNone; } FX_RECT FXRectFromFTPos(FT_Pos left, FT_Pos top, FT_Pos right, FT_Pos bottom) { @@ -1676,22 +1692,24 @@ std::optional CFX_Face::GetCurrentCharMapEncoding() const { if (!GetRec() || !GetRec()->charmap) { return std::nullopt; } - return ToFontEncoding(GetRec()->charmap->encoding); + return CharMapIdPairToFontEncoding( + {.platform_id = GetRec()->charmap->platform_id, + .encoding_id = GetRec()->charmap->encoding_id}); } -CFX_Face::CharMapId CFX_Face::GetCharMapIdByIndex(size_t index) const { +CFX_Face::CharMapIdPair CFX_Face::GetCharMapIdPairByIndex(size_t index) const { return {.platform_id = GetCharMapPlatformIdByIndex(index), .encoding_id = GetCharMapEncodingIdByIndex(index)}; } -int CFX_Face::GetCharMapPlatformIdByIndex(size_t index) const { +uint16_t CFX_Face::GetCharMapPlatformIdByIndex(size_t index) const { if (!GetRec()) { return 0; } return GetCharMaps()[index]->platform_id; } -int CFX_Face::GetCharMapEncodingIdByIndex(size_t index) const { +uint16_t CFX_Face::GetCharMapEncodingIdByIndex(size_t index) const { if (!GetRec()) { return 0; } @@ -1707,7 +1725,7 @@ fxge::FontEncoding CFX_Face::GetCharMapEncodingByIndex(size_t index) const { return fxge::FontEncoding::kAdobeCustom; } #endif // defined(PDF_ENABLE_FONTATIONS) - return ToFontEncoding(GetCharMaps()[index]->encoding); + return CharMapIdPairToFontEncoding(GetCharMapIdPairByIndex(index)); } size_t CFX_Face::GetCharMapCount() const { diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h index 7c269db31d..ef51dc8039 100644 --- a/core/fxge/cfx_face.h +++ b/core/fxge/cfx_face.h @@ -60,18 +60,24 @@ class CFX_Face final : public Retainable, public Observable { // Note that this corresponds to the cmap header in fonts, and not the cmap // data in PDFs. - struct CharMapId { - friend constexpr bool operator==(const CharMapId&, - const CharMapId&) = default; + struct CharMapIdPair { + friend constexpr bool operator==(const CharMapIdPair&, + const CharMapIdPair&) = default; - int platform_id; - int encoding_id; + uint16_t platform_id; + uint16_t encoding_id; }; // Aliases for some commonly used cmaps. - static constexpr CharMapId kMacRomanCmapId{1, 0}; - static constexpr CharMapId kWindowsSymbolCmapId{3, 0}; - static constexpr CharMapId kWindowsUnicodeCmapId{3, 1}; + static constexpr CharMapIdPair kMacRomanCharMapIdPair{ + .platform_id = kPlatformMac, + .encoding_id = kMacEncodingRoman}; + static constexpr CharMapIdPair kWindowsSymbolCharMapIdPair{ + .platform_id = kPlatformWindows, + .encoding_id = kWindowsEncodingSymbol}; + static constexpr CharMapIdPair kWindowsUnicodeCharMapIdPair{ + .platform_id = kPlatformWindows, + .encoding_id = kWindowsEncodingUnicode}; static RetainPtr New(RetainPtr cache_entry, RetainPtr font_stream, @@ -129,8 +135,8 @@ class CFX_Face final : public Retainable, public Observable { CharMap GetCurrentCharMap() const; std::optional GetCurrentCharMapEncoding() const; - CharMapId GetCharMapIdByIndex(size_t index) const; - int GetCharMapPlatformIdByIndex(size_t index) const; + CharMapIdPair GetCharMapIdPairByIndex(size_t index) const; + uint16_t GetCharMapPlatformIdByIndex(size_t index) const; fxge::FontEncoding GetCharMapEncodingByIndex(size_t index) const; size_t GetCharMapCount() const; int LoadGlyph(uint32_t glyph_index, bool scale); @@ -172,7 +178,7 @@ class CFX_Face final : public Retainable, public Observable { FT_FaceRec* GetRec() { return rec_.get(); } const FT_FaceRec* GetRec() const { return rec_.get(); } - int GetCharMapEncodingIdByIndex(size_t index) const; + uint16_t GetCharMapEncodingIdByIndex(size_t index) const; CFX_Size GetPixelSize() const; bool IsTricky() const; diff --git a/core/fxge/fx_font.cpp b/core/fxge/fx_font.cpp index ae6db5e04e..fd19a93b79 100644 --- a/core/fxge/fx_font.cpp +++ b/core/fxge/fx_font.cpp @@ -22,10 +22,6 @@ namespace { -// These numbers come from the OpenType name table specification. -constexpr uint16_t kNameMacEncodingRoman = 0; -constexpr uint16_t kNameWindowsEncodingUnicode = 1; - ByteString GetStringFromTable(pdfium::span string_span, uint16_t offset, uint16_t length) { @@ -127,15 +123,15 @@ ByteString GetNameFromTT(pdfium::span name_table, const uint16_t platform_encoding = fxcrt::GetUInt16MSBFirst(name_table.subspan<2u, 2u>()); - if (platform_identifier == kNamePlatformMac && - platform_encoding == kNameMacEncodingRoman) { + if (platform_identifier == kPlatformMac && + platform_encoding == kMacEncodingRoman) { return GetStringFromTable( string_span, fxcrt::GetUInt16MSBFirst(name_table.subspan<10u, 2u>()), fxcrt::GetUInt16MSBFirst(name_table.subspan<8u, 2u>())); } - if (platform_identifier == kNamePlatformWindows && - platform_encoding == kNameWindowsEncodingUnicode) { + if (platform_identifier == kPlatformWindows && + platform_encoding == kWindowsEncodingUnicode) { // This name is always UTF16-BE and we have to convert it to UTF8. ByteString utf16_be = GetStringFromTable( string_span, diff --git a/core/fxge/fx_font.h b/core/fxge/fx_font.h index b4b017850a..d331062697 100644 --- a/core/fxge/fx_font.h +++ b/core/fxge/fx_font.h @@ -73,10 +73,43 @@ enum class FontAntiAliasingMode : int { kLcd, }; -// These numbers come from the OpenType name table specification. -constexpr uint16_t kNamePlatformAppleUnicode = 0; -constexpr uint16_t kNamePlatformMac = 1; -constexpr uint16_t kNamePlatformWindows = 3; +// OpenType / TrueType platform IDs (used across 'cmap' and 'name' tables). +// Conforms to OpenType specification, with platform 7 as FreeType's Adobe +// convention. +constexpr uint16_t kPlatformAppleUnicode = 0; +constexpr uint16_t kPlatformMac = 1; +constexpr uint16_t kPlatformIso = 2; +constexpr uint16_t kPlatformWindows = 3; +constexpr uint16_t kPlatformCustom = 4; +constexpr uint16_t kPlatformAdobe = 7; + +// OpenType / TrueType encoding IDs for Apple Unicode (kPlatformAppleUnicode). +constexpr uint16_t kAppleUnicodeEncodingUnicode2_0 = 3; + +// OpenType / TrueType encoding IDs for Macintosh (kPlatformMac). +constexpr uint16_t kMacEncodingRoman = 0; + +// OpenType / TrueType encoding IDs for ISO (kPlatformIso). +constexpr uint16_t kIsoEncoding10646 = 1; +constexpr uint16_t kIsoEncoding8859_1 = 2; + +// OpenType / TrueType encoding IDs for Windows (kPlatformWindows). +constexpr uint16_t kWindowsEncodingSymbol = 0; +constexpr uint16_t kWindowsEncodingUnicode = 1; +constexpr uint16_t kWindowsEncodingSjis = 2; +constexpr uint16_t kWindowsEncodingPrc = 3; +constexpr uint16_t kWindowsEncodingGb2312 = kWindowsEncodingPrc; +constexpr uint16_t kWindowsEncodingBig5 = 4; +constexpr uint16_t kWindowsEncodingWansung = 5; +constexpr uint16_t kWindowsEncodingJohab = 6; +constexpr uint16_t kWindowsEncodingUcs4 = 10; + +// Encoding IDs for Adobe platform (kPlatformAdobe, FreeType Type 1 / CFF +// convention). +constexpr uint16_t kAdobeEncodingStandard = 0; +constexpr uint16_t kAdobeEncodingExpert = 1; +constexpr uint16_t kAdobeEncodingCustom = 2; +constexpr uint16_t kAdobeEncodingLatin1 = 3; // The length of the font subset prefix, as defined in ISO 32000-1:2008 spec, // section 9.6.4 "Font Subsets". From 972691e86ce4828aaca38b5e44d7efe947fd1fd9 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 18:29:34 -0700 Subject: [PATCH 04/72] Update gn_version to 841e072bef419ae1116477dc75e8c5a662c0212c Change-Id: Ic040658c96e46e30e96521e488b2d806bf37ff13 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159370 Auto-Submit: Andy Phan Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 4b8d113d32..8d41ea88b6 100644 --- a/DEPS +++ b/DEPS @@ -150,7 +150,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling GN CIPD package version # and whatever else without interference from each other. - 'gn_version': 'git_revision:150a9d6ba0aa7f407aa4feeabc5f03ce9aa7e04b', + 'gn_version': 'git_revision:841e072bef419ae1116477dc75e8c5a662c0212c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling goldctl CIPD package version # and whatever else without interference from each other. From 9812ca61c356aa4296665c3466474f410cffed9e Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Thu, 1 Oct 2026 18:39:00 -0700 Subject: [PATCH 05/72] Scale built-in generic font widths under Fontations When rendering or loading glyph paths for built-in generic substitute fonts (FoxitSansMM and FoxitSerifMM), adjust horizontal scaling by dest_width / EmAdjust(outline.advance_width) if dest_width is set. Also return dest_width in CFX_Face::GetGlyphWidth() for built-in generic fonts when dest_width > 0. This matches substituted glyph widths to PDF /Widths dictionaries without using FreeType's Multiple-Master API. Bug: 42271123 Change-Id: I62d90493e12675cae461f2e99f0df8230ed4993a Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159290 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxge/BUILD.gn | 1 + core/fxge/cfx_face.cpp | 58 ++++++++++++++++--------- core/fxge/cfx_face.h | 8 ++++ core/fxge/cfx_face_unittest.cpp | 77 +++++++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+), 20 deletions(-) create mode 100644 core/fxge/cfx_face_unittest.cpp diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn index 4743d2216f..e68c2d740b 100644 --- a/core/fxge/BUILD.gn +++ b/core/fxge/BUILD.gn @@ -259,6 +259,7 @@ if (pdf_enable_fontations) { pdfium_unittest_source_set("unittests") { sources = [ "cfx_color_unittest.cpp", + "cfx_face_unittest.cpp", "cfx_folderfontinfo_unittest.cpp", "cfx_font_unittest.cpp", "cfx_fontmapper_unittest.cpp", diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index bd8293b7f8..037d13935f 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp @@ -973,16 +973,8 @@ std::unique_ptr CFX_Face::RenderGlyph( } CFX_Matrix effective_matrix = matrix; - if (subst_font) { - int skew = subst_font->GetEffectiveSkew(is_cid_font); - if (skew) { - if (is_vertical) { - effective_matrix.b += effective_matrix.d * skew / 100.0f; - } else { - effective_matrix.c -= effective_matrix.a * skew / 100.0f; - } - } - } + AdjustSubstFontTransform(subst_font, dest_width, outline.advance_width, + is_cid_font, is_vertical, &effective_matrix); const bool is_lcd = (anti_alias == FontAntiAliasingMode::kLcd); const float x_scale = is_lcd ? 3.0f : 1.0f; @@ -1275,16 +1267,9 @@ std::unique_ptr CFX_Face::LoadGlyphPath( if (upem > 0) { float scale = 1.0f / static_cast(upem); CFX_Matrix matrix(scale, 0, 0, scale, 0, 0); - if (subst_font) { - int skew = subst_font->GetSkew(); - if (skew) { - if (is_vertical) { - matrix.b += matrix.d * skew / 100.0f; - } else { - matrix.c -= matrix.a * skew / 100.0f; - } - } - } + AdjustSubstFontTransform(subst_font, dest_width, + outline.advance_width, /*is_cid_font=*/false, + is_vertical, &matrix); auto path = ConvertOutline(outline); if (path) { path->Transform(matrix); @@ -1378,6 +1363,9 @@ int CFX_Face::GetGlyphWidth(uint32_t glyph_index, const CFX_SubstFont* subst_font) { #if defined(PDF_ENABLE_FONTATIONS) if (CFX_GEModule::IsFontations()) { + if (subst_font && subst_font->IsBuiltInGenericFont() && dest_width > 0) { + return dest_width; + } skrifa::Outline outline; if (skrifa_font_->font->unscaled_outline(glyph_index, outline)) { return EmAdjust(static_cast(outline.advance_width)); @@ -1918,6 +1906,36 @@ void CFX_Face::AdjustVariationParams(int glyph_index, FT_Set_MM_Design_Coordinates(rec, 2, coords); } +#if defined(PDF_ENABLE_FONTATIONS) +void CFX_Face::AdjustSubstFontTransform(const CFX_SubstFont* subst_font, + int dest_width, + float advance_width, + bool is_cid_font, + bool is_vertical, + CFX_Matrix* matrix) const { + if (!subst_font) { + return; + } + if (subst_font->IsBuiltInGenericFont() && dest_width > 0 && + advance_width > 0) { + int glyph_width = EmAdjust(static_cast(advance_width)); + if (glyph_width > 0) { + float scale_x = static_cast(dest_width) / glyph_width; + matrix->a *= scale_x; + matrix->b *= scale_x; + } + } + int skew = subst_font->GetEffectiveSkew(is_cid_font); + if (skew) { + if (is_vertical) { + matrix->b += matrix->d * skew / 100.0f; + } else { + matrix->c -= matrix->a * skew / 100.0f; + } + } +} +#endif // defined(PDF_ENABLE_FONTATIONS) + #if defined(PDF_ENABLE_XFA) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) uint32_t CFX_Face::GetFontStyle() { uint32_t style = 0; diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h index ef51dc8039..05d1cb6716 100644 --- a/core/fxge/cfx_face.h +++ b/core/fxge/cfx_face.h @@ -183,6 +183,14 @@ class CFX_Face final : public Retainable, public Observable { bool IsTricky() const; void AdjustVariationParams(int glyph_index, int dest_width, int weight); +#if defined(PDF_ENABLE_FONTATIONS) + void AdjustSubstFontTransform(const CFX_SubstFont* subst_font, + int dest_width, + float advance_width, + bool is_cid_font, + bool is_vertical, + CFX_Matrix* matrix) const; +#endif pdfium::span GetCharMaps() const; diff --git a/core/fxge/cfx_face_unittest.cpp b/core/fxge/cfx_face_unittest.cpp new file mode 100644 index 0000000000..692da83385 --- /dev/null +++ b/core/fxge/cfx_face_unittest.cpp @@ -0,0 +1,77 @@ +// Copyright 2026 The PDFium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/fxge/cfx_face.h" + +#include + +#include "core/fxcrt/cfx_read_only_span_stream.h" +#include "core/fxge/cfx_gemodule.h" +#include "core/fxge/cfx_glyphbitmap.h" +#include "core/fxge/cfx_path.h" +#include "core/fxge/cfx_substfont.h" +#include "core/fxge/dib/cfx_dibitmap.h" +#include "core/fxge/fontdata/chromefontdata/chromefontdata.h" +#include "core/fxge/fx_font.h" +#include "core/fxge/fx_fontencoding.h" +#include "testing/gtest/include/gtest/gtest.h" + +#if defined(PDF_ENABLE_FONTATIONS) +TEST(CFXFaceTest, BuiltInGenericFontScaling) { + if (!CFX_GEModule::IsFontations()) { + GTEST_SKIP() << "Not a fontations-based renderer"; + } + + auto stream = + pdfium::MakeRetain(kFoxitSansMMFontData); + auto face = CFX_Face::New(nullptr, stream, 0); + ASSERT_TRUE(face); + + CFX_SubstFont subst_font; + subst_font.SetIsBuiltInGenericFont(); + + EXPECT_TRUE(face->SelectCharMap(fxge::FontEncoding::kAdobeCustom)); + int gid_x = face->GetCharIndex(120); + ASSERT_EQ(gid_x, 103); + + int unscaled_width = face->GetGlyphWidth(gid_x, /*dest_width=*/0, + /*weight=*/0, &subst_font); + EXPECT_EQ(unscaled_width, 530); + + int target_dest_width = unscaled_width * 2; + int scaled_width = face->GetGlyphWidth(gid_x, target_dest_width, + /*weight=*/0, &subst_font); + EXPECT_EQ(scaled_width, target_dest_width); + + auto unscaled_path = face->LoadGlyphPath(gid_x, /*dest_width=*/0, + /*is_vertical=*/false, &subst_font); + ASSERT_TRUE(unscaled_path); + + auto scaled_path = face->LoadGlyphPath(gid_x, target_dest_width, + /*is_vertical=*/false, &subst_font); + ASSERT_TRUE(scaled_path); + + float unscaled_path_width = unscaled_path->GetBoundingBox().Width(); + float scaled_path_width = scaled_path->GetBoundingBox().Width(); + EXPECT_NEAR(scaled_path_width, unscaled_path_width * 2.0f, 0.5f); + +#if defined(PDF_ENABLE_FREETYPE) + constexpr CFX_Matrix kMatrix(12.0f, 0, 0, 12.0f, 0, 0); + auto unscaled_bitmap = face->RenderGlyph( + gid_x, /*is_cid_font=*/false, /*is_vertical=*/false, kMatrix, + /*dest_width=*/0, FontAntiAliasingMode::kNormal, &subst_font); + ASSERT_TRUE(unscaled_bitmap); + ASSERT_TRUE(unscaled_bitmap->GetBitmap()); + + auto scaled_bitmap = face->RenderGlyph( + gid_x, /*is_cid_font=*/false, /*is_vertical=*/false, kMatrix, + target_dest_width, FontAntiAliasingMode::kNormal, &subst_font); + ASSERT_TRUE(scaled_bitmap); + ASSERT_TRUE(scaled_bitmap->GetBitmap()); + + EXPECT_GT(scaled_bitmap->GetBitmap()->GetWidth(), + unscaled_bitmap->GetBitmap()->GetWidth()); +#endif // defined(PDF_ENABLE_FREETYPE) +} +#endif // defined(PDF_ENABLE_FONTATIONS) From 97a60acf21f1f1460e6bf025f0e8dd50f39b51c4 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 19:00:06 -0700 Subject: [PATCH 06/72] Roll third_party/llvm-libc/src/ 320824188..14e51fd2c (158 commits) https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libc.git/+log/320824188c37..14e51fd2cd7e Created with: roll-dep third_party/llvm-libc/src Change-Id: I6643e2fb3ba5d620bb524445771d90f3752a97e6 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159470 Commit-Queue: Andy Phan Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 8d41ea88b6..7ae4cd34d4 100644 --- a/DEPS +++ b/DEPS @@ -204,7 +204,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling llvm-libc # and whatever else without interference from each other. - 'llvm_libc_revision': '320824188c37e5c28738b9652a0ca8087c934bc9', + 'llvm_libc_revision': '14e51fd2cd7ec21294f18a3a0b2fc5339afea271', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling markupsafe # and whatever else without interference from each other. From 679fdc13c0d9ef666937aeb8ada05945eb0f293e Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 20:43:21 -0700 Subject: [PATCH 07/72] Roll third_party/libunwind/src/ 45120ee23..eb1ca4993 (6 commits) https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git/+log/45120ee23311..eb1ca4993b53 Created with: roll-dep third_party/libunwind/src Change-Id: Id3f17835d1f9489437aa966c769d62556b1935ce Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159412 Commit-Queue: Lei Zhang Commit-Queue: Andy Phan Reviewed-by: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 7ae4cd34d4..268a42bbe6 100644 --- a/DEPS +++ b/DEPS @@ -200,7 +200,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libunwind # and whatever else without interference from each other. - 'libunwind_revision': '45120ee2331193c3650acc9c427ed267fab31d62', + 'libunwind_revision': 'eb1ca4993b534b7d565daee144bbc7f9072b967b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling llvm-libc # and whatever else without interference from each other. From ad3b2647d8e622a8f8a8dd7b396263331e8430b5 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 21:17:50 -0700 Subject: [PATCH 08/72] Roll testing/scripts/rust/ ead1c91bc..9c16e2f4c (1 commit) https://chromium.googlesource.com/chromium/src/testing/scripts/rust.git/+log/ead1c91bc31e..9c16e2f4c17e Created with: roll-dep testing/scripts/rust Change-Id: I626bab33f65845a2331da841a6e98081e190232a Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159371 Reviewed-by: Lei Zhang Commit-Queue: Andy Phan Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 268a42bbe6..8fe834caec 100644 --- a/DEPS +++ b/DEPS @@ -252,7 +252,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling testing_rust # and whatever else without interference from each other. - 'testing_rust_revision': 'ead1c91bc31ed99788b7d667d0325455c0fa2568', + 'testing_rust_revision': '9c16e2f4c17e384708c68ecc8596c80df5689b48', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling tools_memory # and whatever else without interference from each other. From 25b9d2756cfe12866477c5a2c518b5fe9a45e9e1 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 22:05:17 -0700 Subject: [PATCH 09/72] Roll tools/win/ 13cb6e5d2..ae34cdd98 (1 commit) https://chromium.googlesource.com/chromium/src/tools/win.git/+log/13cb6e5d223d..ae34cdd9867c Created with: roll-dep tools/win Change-Id: Iab867e88fdaf1e4a27211ffcef8fa3a8ddfeb064 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159450 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 8fe834caec..9bcf89b3cf 100644 --- a/DEPS +++ b/DEPS @@ -264,7 +264,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling tools_win_revision # and whatever else without interference from each other. - 'tools_win_revision': '13cb6e5d223dc49eadd082d3aef4c2a5b0e4c0a0', + 'tools_win_revision': 'ae34cdd9867c5d2b185fadc9d4a9cc82bb741760', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling v8 # and whatever else without interference from each other. From 3062d7bb2136812b05f8234923b5e619beead8aa Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 22:10:29 -0700 Subject: [PATCH 10/72] Roll third_party/rust/ 4dec6f65b..b8c38a533 (35 commits) https://chromium.googlesource.com/chromium/src/third_party/rust/+log/4dec6f65bcb3..b8c38a533c84 Created with: roll-dep third_party/rust Change-Id: I7d458102151436fd27fa7666538ce54467edf5d4 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159452 Commit-Queue: Andy Phan Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 9bcf89b3cf..acf08ad488 100644 --- a/DEPS +++ b/DEPS @@ -232,7 +232,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling rust # and whatever else without interference from each other. - 'rust_revision': '4dec6f65bcb34c4c289736b0e6fd571b35c6c665', + 'rust_revision': 'b8c38a533c84f01fe194fed455f1d53132b0cf36', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling simdutf # and whatever else without interference from each other. From ebc272f1927b48b62c2828044c6faf99401f000a Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 22:11:24 -0700 Subject: [PATCH 11/72] Roll buildtools/ 6f6a5dbf0..64e87f9fb (4 commits) https://chromium.googlesource.com/chromium/src/buildtools.git/+log/6f6a5dbf04b7..64e87f9fbdaf Created with: roll-dep buildtools Change-Id: Icbd902c1560d0d6752751c05ea2f81101d67d4c8 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159393 Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index acf08ad488..f4d463f132 100644 --- a/DEPS +++ b/DEPS @@ -102,7 +102,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling buildtools # and whatever else without interference from each other. - 'buildtools_revision': '6f6a5dbf04b734214f3b1f386567d101ec9d607e', + 'buildtools_revision': '64e87f9fbdaf6f53f6cff8f15e4b06f17cead514', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. From 62cfaae9dba07422eb6430f81e766c917938257c Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 22:48:43 -0700 Subject: [PATCH 12/72] Roll tools/clang/ 450d82386..52b22f34f (44 commits) llvmorg-24-init-3796-g20e97c4b-4:llvmorg-24-init-7747-g62397f8b-57 https://chromium.googlesource.com/chromium/src/tools/clang/+log/450d823868ea..52b22f34fa14 Created with: roll-dep tools/clang Change-Id: I7a6c8a039ce0c0795b6c7f1faf1dbab9856225bd Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159490 Reviewed-by: Lei Zhang Commit-Queue: Andy Phan Commit-Queue: Lei Zhang --- DEPS | 193 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 100 insertions(+), 93 deletions(-) diff --git a/DEPS b/DEPS index f4d463f132..72cf3dcbe8 100644 --- a/DEPS +++ b/DEPS @@ -114,7 +114,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling clang # and whatever else without interference from each other. - 'clang_revision': '450d823868eaee61e2b2cb986e19aec287f16d58', + 'clang_revision': '52b22f34fa143721c794752f01fbd9f95e7692f0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling code_coverage # and whatever else without interference from each other. @@ -498,164 +498,171 @@ deps = { 'bucket': 'chromium-browser-clang', 'objects': [ { - 'object_name': 'Linux_x64/clang-android-runtime-library-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '780597375163e78615a307a73ec66346b54c58ea3164aa6fbedf24eae85382fc', - 'size_bytes': 6210856, - 'generation': 1787607008868327, + 'object_name': 'Linux_x64/clang-android-runtime-library-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '9551f7013b0210e4d291bfe09191682796240d93002b4317673c7fc280045e62', + 'size_bytes': 6207356, + 'generation': 1790797384572756, 'condition': 'checkout_android and non_git_source', }, { - 'object_name': 'Linux_x64/clang-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '565f7d980b31411e76d9478731cf3f0ac907a46f274d289ea7f03d9137354053', - 'size_bytes': 56894668, - 'generation': 1787607001504676, + 'object_name': 'Linux_x64/clang-linux-runtime-library-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '4e5a4831e4eec7408c0809d2033032d157fe82dc16b5096d32b6536ed4b8c43b', + 'size_bytes': 3102700, + 'generation': 1790797389651907, + 'condition': 'checkout_linux and not host_os == "linux"', + }, + { + 'object_name': 'Linux_x64/clang-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '878495372b935b667f84203f9f62529b6191ff1ac6ab40b9cdf482c84bd1ecab', + 'size_bytes': 57260672, + 'generation': 1790797381909597, 'condition': 'host_os == "linux" and non_git_source', }, { - 'object_name': 'Linux_x64/clang-tidy-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '4290664a4fa8aa11fd1e6b2d3ff4965d26b41cca1a4950f9835ff19115c2384f', - 'size_bytes': 14877500, - 'generation': 1787607001575317, + 'object_name': 'Linux_x64/clang-tidy-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '3815203f9987a08b1bf67555125d95a67c1136de074e6e7dbe11957d70cf784d', + 'size_bytes': 14944572, + 'generation': 1790797381856065, 'condition': 'host_os == "linux" and checkout_clang_tidy and non_git_source', }, { - 'object_name': 'Linux_x64/clangd-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '9db50937915608c466da28ba4166cfa69a5f6bcad346233e47807f532cc3075b', - 'size_bytes': 15049952, - 'generation': 1787607001603946, + 'object_name': 'Linux_x64/clangd-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '84ee10cf3a4b4cccf9878c464f33eee756751920187d26dfc46481f195b0c177', + 'size_bytes': 15081268, + 'generation': 1790797381894014, 'condition': 'host_os == "linux" and checkout_clangd and non_git_source', }, { - 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '34747a8e113c399daa36f75a5a0a4c0963871ceafbce7c49a3b5133f81a63bae', - 'size_bytes': 2352288, - 'generation': 1787607001865886, + 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': 'f9990e7dc5a3630c8a962726fac172eeff5c6012e027eb342e9df8bc702198c8', + 'size_bytes': 2373504, + 'generation': 1790797382242083, 'condition': 'host_os == "linux" and checkout_clang_coverage_tools and non_git_source', }, { - 'object_name': 'Linux_x64/llvmobjdump-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': 'cc8a621ec8cc3c48471c90cf4ed88dcc56bfb403824eda10f8b55796abaec280', - 'size_bytes': 5912568, - 'generation': 1787607001713199, + 'object_name': 'Linux_x64/llvmobjdump-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': 'ad3042a17255b065a75fa7f9d80be2eb07df0902bd762cec53b9f2f5c3beba87', + 'size_bytes': 5925392, + 'generation': 1790797381953168, 'condition': '((checkout_linux or checkout_mac or checkout_android) and host_os == "linux") and non_git_source', }, { - 'object_name': 'Mac/clang-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': 'ba2b707d83f7a19d81b9403b4ebe8e999d41ae35fead00a142f02b67e197fe2f', - 'size_bytes': 56420628, - 'generation': 1787607010939621, + 'object_name': 'Mac/clang-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': 'eb03cb8b944dde55677427322bc5a8c6fa0cad4ceacba4653a42c6b1290fea2f', + 'size_bytes': 53873488, + 'generation': 1790797391417548, 'condition': 'host_os == "mac" and host_cpu == "x64"', }, { - 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': 'da06337f54ba4b36c79e0d379557832bf82b9c7e85fe8ef78a5b953567d98de1', - 'size_bytes': 1012348, - 'generation': 1787607018227451, + 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '31569c5a0a8e133ea5033d3a462273ce65100e0402307319af644ee4fb78d77c', + 'size_bytes': 978876, + 'generation': 1790797399057345, 'condition': 'checkout_mac and not host_os == "mac"', }, { - 'object_name': 'Mac/clang-tidy-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': 'ae5cbec1362517b6928162fddb9b160bd1c75e8fd90789718393e1cadf1342ae', - 'size_bytes': 14882308, - 'generation': 1787607010909866, + 'object_name': 'Mac/clang-tidy-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '5dc210d6e7a1f2d8decba74a475bef9457db132a7ae1f4cf0fc4b91fd008e146', + 'size_bytes': 14224492, + 'generation': 1790797391469624, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_tidy', }, { - 'object_name': 'Mac/clangd-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '73f5de0f007f8c588593d824147963ec770b66d487a707d1c377a06e34952d89', - 'size_bytes': 16779464, - 'generation': 1787607010899287, + 'object_name': 'Mac/clangd-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': 'f988b7dc66993f8612ac036b62828bcb29315ec9e6927331bf6a32bf986a5df7', + 'size_bytes': 15131696, + 'generation': 1790797391569653, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clangd', }, { - 'object_name': 'Mac/llvm-code-coverage-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': 'c47eb37873d3290cc95ba5f9027337895eeeaa199c3f70e63c5d09b710faf250', - 'size_bytes': 2411184, - 'generation': 1787607011184644, + 'object_name': 'Mac/llvm-code-coverage-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': 'acb0db493e23a145f733a871ac868468932be7fb4988fe2b7b9b568e70c45682', + 'size_bytes': 2260736, + 'generation': 1790797391738507, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_coverage_tools', }, { - 'object_name': 'Mac/llvmobjdump-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '4ddefa96f6aaa04ac502610fc736528f65dc3e1b997fc4a5380081937f6ffb1a', - 'size_bytes': 5874672, - 'generation': 1787607011035157, + 'object_name': 'Mac/llvmobjdump-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '85b912bf5182b5c7092ce92cdc58a35b5e3d04fa9a49514aa51b28bec4c277fc', + 'size_bytes': 5524828, + 'generation': 1790797391756333, 'condition': 'host_os == "mac" and host_cpu == "x64"', }, { - 'object_name': 'Mac_arm64/clang-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '264d803970f9b58ddbdc90464ad82e54cef642c58ec371ba5356dfa7342ece4d', - 'size_bytes': 47226204, - 'generation': 1787607020088085, + 'object_name': 'Mac_arm64/clang-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': 'bbf4ee5fc42bf134aee682d6afaaaddcc64415d20b080e349a45abf6df927070', + 'size_bytes': 44508976, + 'generation': 1790797400949995, 'condition': 'host_os == "mac" and host_cpu == "arm64"', }, { - 'object_name': 'Mac_arm64/clang-tidy-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '3e02eae391e05018fb4e95d3c90b270688a5e3d5f5b31df6c59512e602478f36', - 'size_bytes': 12960456, - 'generation': 1787607020070956, + 'object_name': 'Mac_arm64/clang-tidy-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '35b3e2e5eee220259f7908eaf208507aba78f7cfb8dd990c9854558f056ad890', + 'size_bytes': 12220676, + 'generation': 1790797401142057, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_tidy', }, { - 'object_name': 'Mac_arm64/clangd-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': 'a56514d09cfcb216efa297e5fecd51a2e248faf7db6edd2d444cfe78e0e219d3', - 'size_bytes': 13320572, - 'generation': 1787607020209265, + 'object_name': 'Mac_arm64/clangd-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '5dff03b1fdf59ffe374d6c55deb07c65791825737487a7ec2b39d80539144c6b', + 'size_bytes': 12229100, + 'generation': 1790797401064932, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clangd', }, { - 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': 'b593c509e8f4269cf4a16272f6eddcea0f9dd47f6f3fe39b9813041d0f96d4e3', - 'size_bytes': 2031112, - 'generation': 1787607020489366, + 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '1d92f7504529998f971fffbb2dd6214273ed3e6bcfe66e5ca9c1227856df5b4b', + 'size_bytes': 1861564, + 'generation': 1790797401395439, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_coverage_tools', }, { - 'object_name': 'Mac_arm64/llvmobjdump-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': 'c67f5dba316d6367be8c153ede456fdbef0dfffad4da10aaf597ff967c07378c', - 'size_bytes': 5610096, - 'generation': 1787607020228775, + 'object_name': 'Mac_arm64/llvmobjdump-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '0db8f38d5928777104b9d04fc4bcf9c19c17ea252a0745ca038565e3094be9d4', + 'size_bytes': 5235388, + 'generation': 1790797401139458, 'condition': 'host_os == "mac" and host_cpu == "arm64"', }, { - 'object_name': 'Win/clang-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '166437ede456b3d7cf0d9317287511e47714f91da547dbde02992261aeef7174', - 'size_bytes': 51467544, - 'generation': 1787607030157700, + 'object_name': 'Win/clang-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '86ac9f61c4350f17d7571e402d5fa5f2367015d72ea8efbc4e1e52e843c74fb0', + 'size_bytes': 51822620, + 'generation': 1790797410692058, 'condition': 'host_os == "win"', }, { - 'object_name': 'Win/clang-tidy-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '13cae70dfa207c9ec27e294f38b732b5c820ef637f48d24cc8b97f5f3a96e220', - 'size_bytes': 15134360, - 'generation': 1787607030186388, + 'object_name': 'Win/clang-tidy-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '7d428d76bf66dd603860270ba0a41e88bbbb66c32770aae541c3a6777a9eb57f', + 'size_bytes': 15133896, + 'generation': 1790797410629185, 'condition': 'host_os == "win" and checkout_clang_tidy', }, { - 'object_name': 'Win/clang-win-runtime-library-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '4ff9a06f5fc4a711103cd890e724ae4448d67873de438542f3ac6772e68d3c63', - 'size_bytes': 2638196, - 'generation': 1787607037249082, + 'object_name': 'Win/clang-win-runtime-library-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '0ea5939bf24f293c63621b81d90a88284b6d6563a51be1304b73d2cf92537ffc', + 'size_bytes': 2652404, + 'generation': 1790797418368249, 'condition': 'checkout_win and not host_os == "win"', }, { - 'object_name': 'Win/clangd-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '17f1d575127724051099a778d77e609f650702248cf4e7ff3ec33b377053edd9', - 'size_bytes': 15444040, - 'generation': 1787607030301504, + 'object_name': 'Win/clangd-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '70955f11ea7a22b25807d00b97351c3853d8a9b1e8d1d08c165bc015320858c1', + 'size_bytes': 15434728, + 'generation': 1790797563126146, 'condition': 'host_os == "win" and checkout_clangd', }, { - 'object_name': 'Win/llvm-code-coverage-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '78aa6b2b9cf057077be6705b76e43ffed83e46e17ee86da1ab699340129b1aca', - 'size_bytes': 2512968, - 'generation': 1787607030493491, + 'object_name': 'Win/llvm-code-coverage-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': 'b07c06d983817b4f98878bcc264825835efbd9e5548a18a7d6dfb7623b9c4024', + 'size_bytes': 2527180, + 'generation': 1790797410912461, 'condition': 'host_os == "win" and checkout_clang_coverage_tools', }, { - 'object_name': 'Win/llvmobjdump-llvmorg-24-init-3796-g20e97c4b-4.tar.xz', - 'sha256sum': '4b899193da883a447c75f057e3a94f5e7ab93e5df5724ad94cbd6bf82ea792b4', - 'size_bytes': 5994644, - 'generation': 1787607030276791, + 'object_name': 'Win/llvmobjdump-llvmorg-24-init-7747-g62397f8b-57.tar.xz', + 'sha256sum': '7b34bdb18311a40a234c19860b2c289f6cd7ce16f12d3a449dcf6db6dff043eb', + 'size_bytes': 6010064, + 'generation': 1790797410754258, 'condition': '(checkout_linux or checkout_mac or checkout_android) and host_os == "win"', }, ] From 1585acb221b7ca72661758d715e74358cba04133 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 23:42:39 -0700 Subject: [PATCH 13/72] Roll third_party/clang-format/script/ 705100819..9f796802e (4 commits) https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git/+log/70510081984c..9f796802e5d6 Created with: roll-dep third_party/clang-format/script Change-Id: I8a2a719bd0f562a126987764c18c6f34ee55948c Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159411 Auto-Submit: Andy Phan Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 72cf3dcbe8..9c7f8b910d 100644 --- a/DEPS +++ b/DEPS @@ -110,7 +110,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling clang format # and whatever else without interference from each other. - 'clang_format_revision': '70510081984cfcdb14a15b3e08dfe9776dc7ed37', + 'clang_format_revision': '9f796802e5d633c96dbe97e0b6683d5e62594f9f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling clang # and whatever else without interference from each other. From a12af5f3b96213d23239839e24457bd18ad4ca2b Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 23:46:51 -0700 Subject: [PATCH 14/72] Update android_ndk_version to 2@30.0.16248370 Change-Id: Ie2e4f2995f3bb24839bf1411947445ade9579775 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159410 Auto-Submit: Andy Phan Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 9c7f8b910d..774ad38dab 100644 --- a/DEPS +++ b/DEPS @@ -90,7 +90,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling android_ndk # and whatever else without interference from each other. - 'android_ndk_version': Str('2@30.0.16138531'), + 'android_ndk_version': Str('2@30.0.16248370'), # Three lines of non-changing comments so that # the commit queue can handle CLs rolling brotli # and whatever else without interference from each other. From 2dd48b3979244c1a7d21acbb1cb7b7a99baf80bd Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 23:47:57 -0700 Subject: [PATCH 15/72] Update siso_version to c574896b272b40aac6e44c228ee0b471ea7e3d7d Change-Id: I7a65e74ee8572cf3cf8dd659daf492527068db58 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159390 Reviewed-by: Lei Zhang Auto-Submit: Andy Phan Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 774ad38dab..c11ad760fb 100644 --- a/DEPS +++ b/DEPS @@ -240,7 +240,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling siso # and whatever else without interference from each other. - 'siso_version': 'git_revision:efbbe7f1892211b5e9512576843a3c247b6a6d7c', + 'siso_version': 'git_revision:c574896b272b40aac6e44c228ee0b471ea7e3d7d', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling skia # and whatever else without interference from each other. From 4ff932d1649ae2745339c44f73d03a8df6aad24a Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Thu, 1 Oct 2026 23:49:58 -0700 Subject: [PATCH 16/72] Roll third_party/fast_float/src/ 34164f547..b0ab987b3 (17 commits) https://chromium.googlesource.com/external/github.com/fastfloat/fast_float.git/+log/34164f547b7d..b0ab987b3dfd Created with: roll-dep third_party/fast_float/src Change-Id: I7e835aacfadbc0008123637e4535e0a89297f07c Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159391 Auto-Submit: Andy Phan Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang --- DEPS | 2 +- third_party/fast_float/README.pdfium | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DEPS b/DEPS index c11ad760fb..57bbefb6dd 100644 --- a/DEPS +++ b/DEPS @@ -138,7 +138,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling fast_float # and whatever else without interference from each other. - 'fast_float_revision': '34164f547b7df3f5d794ff67e9f885c36819ebfc', + 'fast_float_revision': 'b0ab987b3dfdde13fa1915f65ef2a5c068d9208c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling fp16 # and whatever else without interference from each other. diff --git a/third_party/fast_float/README.pdfium b/third_party/fast_float/README.pdfium index fc5b71154a..18139a318b 100644 --- a/third_party/fast_float/README.pdfium +++ b/third_party/fast_float/README.pdfium @@ -1,7 +1,7 @@ Name: fast_float URL: https://github.com/fastfloat/fast_float -Version: 7.0.0 -Revision: cb1d42aaa1e14b09e1452cfdef373d051b8c02a4 +Version: upstream/v8.3.0 +Revision: b0ab987b3dfdde13fa1915f65ef2a5c068d9208c Update Mechanism: Manual License: MIT License File: //third_party/fast_float/src/LICENSE-MIT From a23775f0085d716969c6669f82f8b8c0e3f2a14d Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 02:15:03 -0700 Subject: [PATCH 17/72] Roll third_party/icu/ 8cc91d9b6..5aa526207 (3 commits) https://chromium.googlesource.com/chromium/deps/icu.git/+log/8cc91d9b6ab9..5aa526207171 Created with: roll-dep third_party/icu Change-Id: Ia6292fea7453c157024fb93ad002488e6279e1bb Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159430 Reviewed-by: Lei Zhang Auto-Submit: Andy Phan Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 57bbefb6dd..b6b1823629 100644 --- a/DEPS +++ b/DEPS @@ -170,7 +170,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling icu # and whatever else without interference from each other. - 'icu_revision': '8cc91d9b6ab9991802fd208ee03a69714fd0251c', + 'icu_revision': '5aa526207171ecadf31597f0980a7b7ad8872f33', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling instrumented_lib # and whatever else without interference from each other. From 979647455f5b256a67937f9c62e9af8385f7294d Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 08:19:59 -0700 Subject: [PATCH 18/72] Roll third_party/skia/ 5549c93c9..5b1a7f7c0 (468 commits; 100 trivial rolls) https://skia.googlesource.com/skia.git/+log/5549c93c9a1c..5b1a7f7c0644 Created with: roll-dep third_party/skia Change-Id: I73e56b18a098af0fbe71349e268ff1f5f2084a55 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159550 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index b6b1823629..bf37c63043 100644 --- a/DEPS +++ b/DEPS @@ -244,7 +244,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling skia # and whatever else without interference from each other. - 'skia_revision': '5549c93c9a1c66137ceed424f08c86ce9988290c', + 'skia_revision': '5b1a7f7c06448e5d5f38f3c9360b18cae315576e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling test_fonts # and whatever else without interference from each other. From b49f8ffc7fe5250cf56217d7003ec8a38e64802e Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 08:20:31 -0700 Subject: [PATCH 19/72] Roll third_party/harfbuzz/src/ 886fc1e64..ff36703b9 (212 commits) https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git/+log/886fc1e64538..ff36703b9501 Created with: roll-dep third_party/harfbuzz/src Change-Id: I64cccba6cf41995941a56999125dc48efbdef68e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159532 Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang --- DEPS | 2 +- third_party/harfbuzz/README.pdfium | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DEPS b/DEPS index bf37c63043..f46043b370 100644 --- a/DEPS +++ b/DEPS @@ -162,7 +162,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling HarfBuzz # and whatever else without interference from each other. - 'harfbuzz_revision': '886fc1e645388080b72f6d9b06347533a0018045', + 'harfbuzz_revision': 'ff36703b95013ec1d437e6038e1aa7c881275f4e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling highway # and whatever else without interference from each other. diff --git a/third_party/harfbuzz/README.pdfium b/third_party/harfbuzz/README.pdfium index c3024ae5c0..7daed24284 100644 --- a/third_party/harfbuzz/README.pdfium +++ b/third_party/harfbuzz/README.pdfium @@ -1,10 +1,10 @@ Name: harfbuzz Short Name: harfbuzz URL: http://harfbuzz.org -Version: 14.2.0-11 -CPEPrefix: cpe:/a:harfbuzz_project:harfbuzz:14.2.0 -Date: 2026-04-29 -Revision: e6741e2205309752839da60ff075b7fa2e7cddd3 +Version: 14.5.0-10 +CPEPrefix: cpe:/a:harfbuzz_project:harfbuzz:14.5.0 +Date: 2026-09-29 +Revision: ff36703b95013ec1d437e6038e1aa7c881275f4e Update Mechanism: Manual Security Critical: yes Shipped: yes From 9068c1f11459c660d8b7dabcc8d836dbc77f1c91 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 08:20:34 -0700 Subject: [PATCH 20/72] Roll v8/ df65d5c8f..e110f6a9d (135 commits) https://chromium.googlesource.com/v8/v8.git/+log/df65d5c8f293..e110f6a9dff3 Version 15.5.19 Created with: roll-dep v8 Change-Id: Ic479da3dff7dfe69e84fda3ff468f07534df9511 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159533 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index f46043b370..8758c38439 100644 --- a/DEPS +++ b/DEPS @@ -268,7 +268,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling v8 # and whatever else without interference from each other. - 'v8_revision': 'df65d5c8f2932045c5af72cd7ecd0c8002fa631e', + 'v8_revision': 'e110f6a9dff3afca8b9e0836d10d1844d4a3dff2', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling zlib # and whatever else without interference from each other. From 62864f3da356f4e43473c7e1f8c396a71e901149 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 12:06:51 -0700 Subject: [PATCH 21/72] Roll build/ and tools/rust/ Roll clang+rust llvmorg-24-init-3796-g20e97c4b-4:llvmorg-24-init-7747-g62397f8b-57 Roll build/ 2cd94c0ab..ebdaeefa6 (166 commits) https://chromium.googlesource.com/chromium/src/build.git/+log/2cd94c0abead..ebdaeefa62db Created with: roll-dep build Roll tools/rust/ 54d114869..e61a63fae (22 commits) https://chromium.googlesource.com/chromium/src/tools/rust/+log/54d1148695db..e61a63fae238 Created with: roll-dep tools/rust Change-Id: I92c4d66c7081865df63f5f5e5fdb4b29088a587c Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159510 Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang Auto-Submit: Andy Phan --- DEPS | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/DEPS b/DEPS index 8758c38439..0fe74f7aaf 100644 --- a/DEPS +++ b/DEPS @@ -98,7 +98,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling build # and whatever else without interference from each other. - 'build_revision': '2cd94c0abeada712aeea6906d99021913c9fc28d', + 'build_revision': 'ebdaeefa62db7c40f27cacb0eb034db3a5cdb849', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling buildtools # and whatever else without interference from each other. @@ -260,7 +260,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling tools_rust # and whatever else without interference from each other. - 'tools_rust_revision': '54d1148695dbbbfc3e00dfd05aff502acaa602e3', + 'tools_rust_revision': 'e61a63fae23826e5bf5650a1bd7da255ba950577', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling tools_win_revision # and whatever else without interference from each other. @@ -704,31 +704,31 @@ deps = { 'bucket': 'chromium-browser-clang', 'objects': [ { - 'object_name': 'Linux_x64/rust-toolchain-0913b18e489ac1011b580e31fa5559654be12bfc-2-llvmorg-24-init-3796-g20e97c4b.tar.xz', - 'sha256sum': '4b131e81d157a97bcf454ad0fbb71bc2063b2a3708c858410c04201ef06134e5', - 'size_bytes': 276314860, - 'generation': 1786821088882867, + 'object_name': 'Linux_x64/rust-toolchain-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '1f5b945345630c2d5c91a53fd506af476d617b79f251c7ccd2bb707a1f0faa92', + 'size_bytes': 275879080, + 'generation': 1790798148502695, 'condition': 'host_os == "linux" and non_git_source', }, { - 'object_name': 'Mac/rust-toolchain-0913b18e489ac1011b580e31fa5559654be12bfc-2-llvmorg-24-init-3796-g20e97c4b.tar.xz', - 'sha256sum': '12ca849195c27495073ba52ae7126d8a4a9a5807cd7a0dc6ba6b6fa612302a6d', - 'size_bytes': 264031896, - 'generation': 1786821092536805, + 'object_name': 'Mac/rust-toolchain-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': 'd2ca8d43ebd3e5ce956cfa9e1e7a292cf3faedd0113550a047d08a5cff5d10bf', + 'size_bytes': 263208960, + 'generation': 1790798152115147, 'condition': 'host_os == "mac" and host_cpu == "x64"', }, { - 'object_name': 'Mac_arm64/rust-toolchain-0913b18e489ac1011b580e31fa5559654be12bfc-2-llvmorg-24-init-3796-g20e97c4b.tar.xz', - 'sha256sum': 'fe128475561d7a51c797d1cb3ccea6f94fd770b167c8e0cc33bf75e7c25d8225', - 'size_bytes': 248465344, - 'generation': 1786821096222521, + 'object_name': 'Mac_arm64/rust-toolchain-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '68b2b16c3bf32a141fa6ba8e3c51887d6c8be44659b7b8f188d9af16543bf869', + 'size_bytes': 247890912, + 'generation': 1790798155770959, 'condition': 'host_os == "mac" and host_cpu == "arm64"', }, { - 'object_name': 'Win/rust-toolchain-0913b18e489ac1011b580e31fa5559654be12bfc-2-llvmorg-24-init-3796-g20e97c4b.tar.xz', - 'sha256sum': '14bc9cea5e00cb191f58204ef44d68a6794f856a76f885c50298a12d052035bc', - 'size_bytes': 414479372, - 'generation': 1786821099612317, + 'object_name': 'Win/rust-toolchain-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '630ccbd409fcef327cba0044bf72012f4023fab890a8db26c9731a03d5bdcb8e', + 'size_bytes': 416254844, + 'generation': 1790798159238637, 'condition': 'host_os == "win"', }, ], From ab13758deff1e22ea05b2826f5faf5ac6227da1a Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 12:06:57 -0700 Subject: [PATCH 22/72] Roll third_party/abseil-cpp/ 435e7d977..a00d74bb5 (10 commits) https://chromium.googlesource.com/chromium/src/third_party/abseil-cpp.git/+log/435e7d977fb3..a00d74bb55b3 Created with: roll-dep third_party/abseil-cpp Change-Id: I00ec81b79e7665fb5e95b495b79c7678a4253277 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159530 Auto-Submit: Andy Phan Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 0fe74f7aaf..2f49a692b5 100644 --- a/DEPS +++ b/DEPS @@ -86,7 +86,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling abseil # and whatever else without interference from each other. - 'abseil_revision': '435e7d977fb36fb47854a4c552c0706dad0bd7cf', + 'abseil_revision': 'a00d74bb55b38f213a3c6110b4bcab5bb565bd56', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling android_ndk # and whatever else without interference from each other. From 2c28692526e75e35dc09c986337a14085969d003 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 12:08:12 -0700 Subject: [PATCH 23/72] Roll base/allocator/partition_allocator/ 89615a645..dc6144ac9 (55 commits) https://chromium.googlesource.com/chromium/src/base/allocator/partition_allocator.git/+log/89615a645f02..dc6144ac93b2 Created with: roll-dep base/allocator/partition_allocator Change-Id: Ibfdba6ca2e64397bfcaacaf279b3c559ddb90cba Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159531 Commit-Queue: Lei Zhang Auto-Submit: Andy Phan Reviewed-by: Lei Zhang --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 2f49a692b5..355db5168b 100644 --- a/DEPS +++ b/DEPS @@ -220,7 +220,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling partition_allocator # and whatever else without interference from each other. - 'partition_allocator_revision': '89615a645f0220fb03875111c2d9ae4dea9887d8', + 'partition_allocator_revision': 'dc6144ac93b23232ea8d2b931f661a917ad7d4fd', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling pdfium_tests # and whatever else without interference from each other. From 68b540df6d7f56cb9d61ee0a1c88206d3a15eccd Mon Sep 17 00:00:00 2001 From: Jeroen Bobbeldijk Date: Fri, 2 Oct 2026 12:53:27 -0700 Subject: [PATCH 24/72] Remove the raw pointers from the 24bpp default-decode translate TranslateScanline24bppDefaultDecode() walked both the source and the destination scanline with raw pointers, each of its three arms inside UNSAFE_TODO(). The 8 bpc arm is a per-pixel RGB-to-BGR byte swap, which is exactly what fxcodec::ReverseRGB() does on spans, and its disjoint-copy loop is written so the compiler vectorizes it; call that instead. The destination scanline buffer never overlaps the decoder's source scanline, and ReverseRGB() falls back to an in-place swap if the two are ever the same buffer. The other two arms now write through a destination pixel-struct span. The 16 bpc arm reads its source through a struct that names the big-endian sample layout, so keeping each component's high byte no longer looks like an unexplained stride-6 index. The sub-8 bpc arm already read its components out of the bit stream through a span; only its stores needed converting. Bug: 553155247 Change-Id: I55048b4a84179bd7f7a58802126788aa391d5ca1 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/155971 Reviewed-by: Tom Sepez Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fpdfapi/page/cpdf_dib.cpp | 70 ++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp index 6ab8004283..977f24c0b2 100644 --- a/core/fpdfapi/page/cpdf_dib.cpp +++ b/core/fpdfapi/page/cpdf_dib.cpp @@ -31,6 +31,7 @@ #include "core/fpdfapi/parser/fpdf_parser_decode.h" #include "core/fpdfapi/parser/fpdf_parser_utility.h" #include "core/fxcodec/basic/basicmodule.h" +#include "core/fxcodec/fx_codec.h" #include "core/fxcodec/icc/icc_transform.h" #include "core/fxcodec/jbig2/jbig2_decoder.h" #include "core/fxcodec/jpeg/jpegmodule.h" @@ -38,7 +39,6 @@ #include "core/fxcodec/scanlinedecoder.h" #include "core/fxcrt/check.h" #include "core/fxcrt/check_op.h" -#include "core/fxcrt/compiler_specific.h" #include "core/fxcrt/data_vector.h" #include "core/fxcrt/fx_2d_size.h" #include "core/fxcrt/fx_safe_types.h" @@ -71,6 +71,18 @@ unsigned int GetBits8(pdfium::span pData, return (byte >> (8 - nbits - (bitpos % 8))) & ((1 << nbits) - 1); } +// A 16 bits-per-component RGB source pixel. PDF stores the samples +// big-endian, so the first byte of each component is its high byte; the +// translation below keeps only that byte. +struct RgbBe16 { + uint8_t red_high; + uint8_t red_low; + uint8_t green_high; + uint8_t green_low; + uint8_t blue_high; + uint8_t blue_low; +}; + bool GetBitValue(pdfium::span pSrc, size_t pos) { return pSrc[pos / 8] & (1 << (7 - pos % 8)); } @@ -1114,34 +1126,36 @@ bool CPDF_DIB::TranslateScanline24bppDefaultDecode( return true; } - uint8_t* dest_pos = dest_scan.data(); - const uint8_t* src_pos = src_scan.data(); + const size_t width = pdfium::checked_cast(GetWidth()); + auto dest_pixels = + fxcrt::reinterpret_span>(dest_scan).first(width); switch (bpc_) { case 8: - UNSAFE_TODO({ - for (int column = 0; column < GetWidth(); column++) { - *dest_pos++ = src_pos[2]; - *dest_pos++ = src_pos[1]; - *dest_pos++ = *src_pos; - src_pos += 3; - } - }); + // The whole translation is the per-pixel RGB-to-BGR byte swap; + // ReverseRGB() is that swap, in a form the compiler vectorizes + // (the destination scanline buffer never overlaps the source). + fxcodec::ReverseRGB(dest_scan, src_scan, GetWidth()); break; - case 16: - UNSAFE_TODO({ - for (int col = 0; col < GetWidth(); col++) { - *dest_pos++ = src_pos[4]; - *dest_pos++ = src_pos[2]; - *dest_pos++ = *src_pos; - src_pos += 6; - } - }); + case 16: { + // Keep each component's high byte, in BGR order. + auto src_pixels = + fxcrt::reinterpret_span(src_scan).first(width); + for (auto [src, dest] : fxcrt::Zip(src_pixels, dest_pixels)) { + dest.blue = src.blue_high; + dest.green = src.green_high; + dest.red = src.red_high; + } break; - default: + } + default: { + // Fewer than 8 bits per component: read each component out of the bit + // stream and scale it to 8 bits. GetScanline() sends images with + // bpc * components <= 8 down a different path before reaching here, so + // with the 3 components this function requires, only 4 bits per + // component arrives. const unsigned int max_data = (1 << bpc_) - 1; uint64_t src_bit_pos = 0; - size_t dest_byte_pos = 0; - for (int column = 0; column < GetWidth(); column++) { + for (auto& dest : dest_pixels) { unsigned int R = GetBits8(src_scan, src_bit_pos, bpc_); src_bit_pos += bpc_; unsigned int G = GetBits8(src_scan, src_bit_pos, bpc_); @@ -1151,14 +1165,12 @@ bool CPDF_DIB::TranslateScanline24bppDefaultDecode( R = std::min(R, max_data); G = std::min(G, max_data); B = std::min(B, max_data); - UNSAFE_TODO({ - dest_pos[dest_byte_pos] = B * 255 / max_data; - dest_pos[dest_byte_pos + 1] = G * 255 / max_data; - dest_pos[dest_byte_pos + 2] = R * 255 / max_data; - dest_byte_pos += 3; - }); + dest.blue = B * 255 / max_data; + dest.green = G * 255 / max_data; + dest.red = R * 255 / max_data; } break; + } } return true; } From aeb3d6e3d465a98d094d7f8a444770d44a847694 Mon Sep 17 00:00:00 2001 From: Jeroen Bobbeldijk Date: Fri, 2 Oct 2026 13:13:53 -0700 Subject: [PATCH 25/72] Unroll one- and two-tap columns in the stretch engine's alpha arm ContinueStretchHorz()'s kManyBpptoManyBpp arm unrolls its one- and two-tap cases, since at those trip counts the loop is all overhead. The kManyBpptoManyBppWithAlpha arm computes the same thing, differing only in the per-tap alpha premultiply and in writing a fourth channel, but still runs the generic loop for every destination column. Give it the same treatment. The terms are summed in tap order, so the result is identical, and columns with three or more taps keep the existing loop. Bug: 553937496 Change-Id: Ib9206eb8b4a56d4fe2bfd18843e4ebe725618f61 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/156110 Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang Reviewed-by: Tom Sepez --- core/fxge/dib/cstretchengine.cpp | 40 +++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/core/fxge/dib/cstretchengine.cpp b/core/fxge/dib/cstretchengine.cpp index a17b6fc0a2..e912879f5f 100644 --- a/core/fxge/dib/cstretchengine.cpp +++ b/core/fxge/dib/cstretchengine.cpp @@ -522,12 +522,40 @@ bool CStretchEngine::ContinueStretchHorz(PauseIndicatorIface* pPause) { uint32_t dest_r = 0; uint32_t dest_g = 0; uint32_t dest_b = 0; - for (auto [weight, src] : fxcrt::Zip(weights, window)) { - uint32_t pixel_weight = weight * src.alpha / 255; - dest_b += pixel_weight * src.blue; - dest_g += pixel_weight * src.green; - dest_r += pixel_weight * src.red; - dest_a += pixel_weight; + // At one and two taps, the loop's own setup costs more than the + // multiply-adds it guards, so those counts get straight-line code. + // The terms are summed in tap order, so the result is identical to + // the loop below. + switch (weights.size()) { + case 1: { + const auto& src0 = window[0]; + const uint32_t pw0 = weights[0] * src0.alpha / 255; + dest_b = pw0 * src0.blue; + dest_g = pw0 * src0.green; + dest_r = pw0 * src0.red; + dest_a = pw0; + break; + } + case 2: { + const auto& src0 = window[0]; + const auto& src1 = window[1]; + const uint32_t pw0 = weights[0] * src0.alpha / 255; + const uint32_t pw1 = weights[1] * src1.alpha / 255; + dest_b = pw0 * src0.blue + pw1 * src1.blue; + dest_g = pw0 * src0.green + pw1 * src1.green; + dest_r = pw0 * src0.red + pw1 * src1.red; + dest_a = pw0 + pw1; + break; + } + default: + for (auto [weight, src] : fxcrt::Zip(weights, window)) { + uint32_t pixel_weight = weight * src.alpha / 255; + dest_b += pixel_weight * src.blue; + dest_g += pixel_weight * src.green; + dest_r += pixel_weight * src.red; + dest_a += pixel_weight; + } + break; } FX_BGRA_STRUCT& dest = dest_pixels[dest_index++]; dest.blue = PixelFromFixed(dest_b); From 99cbe8e2c3898df9f805c69ababd49528441574a Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 2 Oct 2026 14:20:45 -0700 Subject: [PATCH 26/72] Use std::variant in CJS_DelayData Replace the separate value members in CJS_DelayData with a single std::variant member `data`, since each CJS_DelayData instance only stores one property value. Also remove the unused `widestring` and `color` fields. Update CJS_Field::DoDelay() and the CJS_Field::AddDelay_*() methods in fxjs/cjs_field.cpp to read and write `CJS_DelayData::data`. TAG=agy CONV=d7374919-0adf-44a3-8c57-4bc07cdb5cea Change-Id: I0e2cddfd1e0af2afe24d8c73207c14446a4606d7 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159690 Commit-Queue: Lei Zhang Reviewed-by: Tom Sepez --- fxjs/cjs_delaydata.h | 20 +++++++++++--------- fxjs/cjs_field.cpp | 27 ++++++++++++++------------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/fxjs/cjs_delaydata.h b/fxjs/cjs_delaydata.h index 861dbabf3f..cf34d55628 100644 --- a/fxjs/cjs_delaydata.h +++ b/fxjs/cjs_delaydata.h @@ -7,11 +7,14 @@ #ifndef FXJS_CJS_DELAYDATA_H_ #define FXJS_CJS_DELAYDATA_H_ +#include + +#include #include +#include "core/fxcrt/bytestring.h" #include "core/fxcrt/fx_coordinates.h" #include "core/fxcrt/widestring.h" -#include "core/fxge/cfx_color.h" #include "fxjs/cjs_field.h" struct CJS_DelayData { @@ -20,15 +23,14 @@ struct CJS_DelayData { FIELD_PROP eProp; int nControlIndex; - int32_t num = 0; - bool b = false; WideString sFieldName; - ByteString bytestring; - WideString widestring; - CFX_FloatRect rect; - CFX_Color color; - std::vector wordarray; - std::vector widestringarray; + std::variant, + std::vector> + data; }; #endif // FXJS_CJS_DELAYDATA_H_ diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp index 4f0cb5e2ab..40419c2e59 100644 --- a/fxjs/cjs_field.cpp +++ b/fxjs/cjs_field.cpp @@ -2814,28 +2814,28 @@ void CJS_Field::SetDelay(bool bDelay) { void CJS_Field::AddDelay_Int(FIELD_PROP prop, int32_t n) { auto pNewData = std::make_unique(prop, form_control_index_, field_name_); - pNewData->num = n; + pNewData->data = n; js_doc_->AddDelayData(std::move(pNewData)); } void CJS_Field::AddDelay_Bool(FIELD_PROP prop, bool b) { auto pNewData = std::make_unique(prop, form_control_index_, field_name_); - pNewData->b = b; + pNewData->data = b; js_doc_->AddDelayData(std::move(pNewData)); } void CJS_Field::AddDelay_String(FIELD_PROP prop, const ByteString& str) { auto pNewData = std::make_unique(prop, form_control_index_, field_name_); - pNewData->bytestring = str; + pNewData->data = str; js_doc_->AddDelayData(std::move(pNewData)); } void CJS_Field::AddDelay_Rect(FIELD_PROP prop, const CFX_FloatRect& rect) { auto pNewData = std::make_unique(prop, form_control_index_, field_name_); - pNewData->rect = rect; + pNewData->data = rect; js_doc_->AddDelayData(std::move(pNewData)); } @@ -2843,7 +2843,7 @@ void CJS_Field::AddDelay_WordArray(FIELD_PROP prop, const std::vector& array) { auto pNewData = std::make_unique(prop, form_control_index_, field_name_); - pNewData->wordarray = array; + pNewData->data = array; js_doc_->AddDelayData(std::move(pNewData)); } @@ -2851,7 +2851,7 @@ void CJS_Field::AddDelay_WideStringArray(FIELD_PROP prop, const std::vector& array) { auto pNewData = std::make_unique(prop, form_control_index_, field_name_); - pNewData->widestringarray = array; + pNewData->data = array; js_doc_->AddDelayData(std::move(pNewData)); } @@ -2861,31 +2861,32 @@ void CJS_Field::DoDelay(CPDFSDK_FormFillEnvironment* pFormFillEnv, switch (pData->eProp) { case FP_BORDERSTYLE: SetBorderStyle(pFormFillEnv, pData->sFieldName, pData->nControlIndex, - pData->bytestring); + std::get(pData->data)); break; case FP_CURRENTVALUEINDICES: SetCurrentValueIndices(pFormFillEnv, pData->sFieldName, - pData->nControlIndex, pData->wordarray); + pData->nControlIndex, + std::get>(pData->data)); break; case FP_DISPLAY: SetDisplay(pFormFillEnv, pData->sFieldName, pData->nControlIndex, - pData->num); + std::get(pData->data)); break; case FP_HIDDEN: SetHidden(pFormFillEnv, pData->sFieldName, pData->nControlIndex, - pData->b); + std::get(pData->data)); break; case FP_LINEWIDTH: SetLineWidth(pFormFillEnv, pData->sFieldName, pData->nControlIndex, - pData->num); + std::get(pData->data)); break; case FP_RECT: SetRect(pFormFillEnv, pData->sFieldName, pData->nControlIndex, - pData->rect); + std::get(pData->data)); break; case FP_VALUE: SetFieldValue(pFormFillEnv, pData->sFieldName, pData->nControlIndex, - pData->widestringarray); + std::get>(pData->data)); break; } } From 0ea5f7bcb606080eddd974870ae5a7373af3814c Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 2 Oct 2026 16:27:47 -0700 Subject: [PATCH 27/72] Support non-Unicode SFNT charmaps in CFX_Face via Skrifa Add FFI methods to SkrifaFont to query SFNT charmap encoding records (platform ID and encoding ID) and map character codes to glyph IDs using subtable-specific lookups. Update CFX_Face charmap enumeration, selection, and character-to-glyph mapping to use these methods under Fontations. Bug: 42271123 Change-Id: I75e0eef3a8c50debe7363e5c184e0dac9b64388e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159211 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxge/cfx_face.cpp | 151 +++++++++++++++++++----- core/fxge/cfx_face.h | 5 + core/fxge/skrifa/fx_skrifa_unittest.cpp | 32 +++++ core/fxge/skrifa/src/main.rs | 61 +++++++++- 4 files changed, 214 insertions(+), 35 deletions(-) diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index 037d13935f..ae7c59dd11 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp @@ -700,6 +700,17 @@ bool CFX_Face::IsTricky() const { return !!(GetRec()->face_flags & FT_FACE_FLAG_TRICKY); } +#if defined(PDF_ENABLE_FONTATIONS) +bool CFX_Face::IsPostScriptFont() const { + if (!skrifa_font_) { + return false; + } + skrifa::FaceFormat format = skrifa_font_->font->font_type(); + return format == skrifa::FaceFormat::Type1 || + format == skrifa::FaceFormat::Cff; +} +#endif // defined(PDF_ENABLE_FONTATIONS) + bool CFX_Face::IsFixedWidth() const { #if defined(PDF_ENABLE_FONTATIONS) if (CFX_GEModule::IsFontations()) { @@ -1415,22 +1426,37 @@ ByteString CFX_Face::GetGlyphName(uint32_t glyph_index) { int CFX_Face::GetCharIndex(uint32_t code) { #if defined(PDF_ENABLE_FONTATIONS) if (CFX_GEModule::IsFontations()) { - if (!GetRec()) { - if (selected_encoding_ == fxge::FontEncoding::kUnicode || - selected_encoding_ == fxge::FontEncoding::kNone) { + const bool unicode_or_none = + selected_encoding_ == fxge::FontEncoding::kUnicode || + selected_encoding_ == fxge::FontEncoding::kNone; + if (IsPostScriptFont()) { + if (unicode_or_none) { return static_cast(skrifa_font_->font->unicode_to_gid(code)); } - if (skrifa_font_->font->font_type() == skrifa::FaceFormat::Type1 && - code <= 0xFF) { + if (code <= 0xFF) { return static_cast( skrifa_font_->font->code_to_gid(static_cast(code))); } return 0; } - FT_CharMap charmap = GetRec()->charmap; - if (charmap && charmap->encoding == FT_ENCODING_UNICODE) { - return static_cast(skrifa_font_->font->unicode_to_gid(code)); + if (selected_charmap_index_.has_value() && !unicode_or_none) { + uint32_t gid = skrifa_font_->font->cmap_char_to_gid( + selected_charmap_index_.value(), code); + if (gid != 0) { + return static_cast(gid); + } + } + if (unicode_or_none) { + uint32_t gid = skrifa_font_->font->unicode_to_gid(code); + if (gid != 0) { + return static_cast(gid); + } + } + if (selected_charmap_index_.has_value()) { + return static_cast(skrifa_font_->font->cmap_char_to_gid( + selected_charmap_index_.value(), code)); } + return 0; } #endif // defined(PDF_ENABLE_FONTATIONS) if (!GetRec()) { @@ -1665,15 +1691,26 @@ std::vector CFX_Face::GetCharCodesAndIndices( } CFX_Face::CharMap CFX_Face::GetCurrentCharMap() const { +#if defined(PDF_ENABLE_FONTATIONS) + if (CFX_GEModule::IsFontations()) { + if (selected_charmap_index_.has_value()) { + return reinterpret_cast(selected_charmap_index_.value() + 1); + } + return nullptr; + } +#endif // defined(PDF_ENABLE_FONTATIONS) return GetRec() ? GetRec()->charmap : nullptr; } std::optional CFX_Face::GetCurrentCharMapEncoding() const { #if defined(PDF_ENABLE_FONTATIONS) - if (CFX_GEModule::IsFontations() && !GetRec()) { + if (CFX_GEModule::IsFontations()) { if (selected_encoding_ != fxge::FontEncoding::kNone) { return selected_encoding_; } + if (selected_charmap_index_.has_value()) { + return GetCharMapEncodingByIndex(selected_charmap_index_.value()); + } return fxge::FontEncoding::kUnicode; } #endif // defined(PDF_ENABLE_FONTATIONS) @@ -1691,6 +1728,18 @@ CFX_Face::CharMapIdPair CFX_Face::GetCharMapIdPairByIndex(size_t index) const { } uint16_t CFX_Face::GetCharMapPlatformIdByIndex(size_t index) const { +#if defined(PDF_ENABLE_FONTATIONS) + if (CFX_GEModule::IsFontations()) { + if (IsPostScriptFont()) { + return index == 0 ? kPlatformAppleUnicode : kPlatformAdobe; + } + skrifa::CharMapInfo info; + if (skrifa_font_->font->get_charmap_info(index, info)) { + return info.platform_id; + } + return 0; + } +#endif // defined(PDF_ENABLE_FONTATIONS) if (!GetRec()) { return 0; } @@ -1698,6 +1747,19 @@ uint16_t CFX_Face::GetCharMapPlatformIdByIndex(size_t index) const { } uint16_t CFX_Face::GetCharMapEncodingIdByIndex(size_t index) const { +#if defined(PDF_ENABLE_FONTATIONS) + if (CFX_GEModule::IsFontations()) { + if (IsPostScriptFont()) { + return index == 0 ? kAppleUnicodeEncodingUnicode2_0 + : kAdobeEncodingCustom; + } + skrifa::CharMapInfo info; + if (skrifa_font_->font->get_charmap_info(index, info)) { + return info.encoding_id; + } + return 0; + } +#endif // defined(PDF_ENABLE_FONTATIONS) if (!GetRec()) { return 0; } @@ -1705,25 +1767,17 @@ uint16_t CFX_Face::GetCharMapEncodingIdByIndex(size_t index) const { } fxge::FontEncoding CFX_Face::GetCharMapEncodingByIndex(size_t index) const { -#if defined(PDF_ENABLE_FONTATIONS) - if (CFX_GEModule::IsFontations() && !GetRec()) { - if (index == 0) { - return fxge::FontEncoding::kUnicode; - } - return fxge::FontEncoding::kAdobeCustom; - } -#endif // defined(PDF_ENABLE_FONTATIONS) return CharMapIdPairToFontEncoding(GetCharMapIdPairByIndex(index)); } size_t CFX_Face::GetCharMapCount() const { #if defined(PDF_ENABLE_FONTATIONS) - if (CFX_GEModule::IsFontations() && !GetRec()) { - if (skrifa_font_->font->font_type() == skrifa::FaceFormat::Type1) { + if (CFX_GEModule::IsFontations()) { + if (IsPostScriptFont()) { return skrifa_font_->font->encoding() != skrifa::PsEncodingKind::None ? 2 : 1; } - return 1; + return skrifa_font_->font->get_charmap_count(); } #endif // defined(PDF_ENABLE_FONTATIONS) return GetRec() && GetRec()->charmaps @@ -1732,10 +1786,17 @@ size_t CFX_Face::GetCharMapCount() const { } pdfium::span CFX_Face::GetCharMaps() const { +#if defined(PDF_ENABLE_FONTATIONS) + if (CFX_GEModule::IsFontations()) { + return {}; + } +#endif // defined(PDF_ENABLE_FONTATIONS) if (!GetRec()) { return {}; } - size_t count = GetCharMapCount(); + size_t count = GetRec()->charmaps + ? pdfium::checked_cast(GetRec()->num_charmaps) + : 0; if (count == 0) { return {}; } @@ -1744,6 +1805,20 @@ pdfium::span CFX_Face::GetCharMaps() const { } void CFX_Face::SetCharMap(CharMap map) { +#if defined(PDF_ENABLE_FONTATIONS) + if (CFX_GEModule::IsFontations()) { + if (map) { + size_t index = reinterpret_cast(map) - 1; + if (index < GetCharMapCount()) { + SetCharMapByIndex(index); + return; + } + } + selected_charmap_index_ = std::nullopt; + selected_encoding_ = fxge::FontEncoding::kNone; + return; + } +#endif // defined(PDF_ENABLE_FONTATIONS) if (GetRec()) { FT_Set_Charmap(GetRec(), static_cast(map)); } @@ -1753,8 +1828,9 @@ void CFX_Face::SetCharMapByIndex(size_t index) { CHECK_LT(index, GetCharMapCount()); #if defined(PDF_ENABLE_FONTATIONS) - if (CFX_GEModule::IsFontations() && !GetRec()) { - SelectCharMap(GetCharMapEncodingByIndex(index)); + if (CFX_GEModule::IsFontations()) { + selected_charmap_index_ = index; + selected_encoding_ = GetCharMapEncodingByIndex(index); return; } #endif // defined(PDF_ENABLE_FONTATIONS) @@ -1765,15 +1841,26 @@ void CFX_Face::SetCharMapByIndex(size_t index) { bool CFX_Face::SelectCharMap(fxge::FontEncoding encoding) { #if defined(PDF_ENABLE_FONTATIONS) - if (CFX_GEModule::IsFontations() && !GetRec()) { - if (encoding == fxge::FontEncoding::kUnicode) { - selected_encoding_ = encoding; - return true; - } - if (skrifa_font_->font->font_type() == skrifa::FaceFormat::Type1 && - skrifa_font_->font->encoding() != skrifa::PsEncodingKind::None) { - selected_encoding_ = encoding; - return true; + if (CFX_GEModule::IsFontations()) { + if (IsPostScriptFont()) { + if (encoding == fxge::FontEncoding::kUnicode) { + selected_encoding_ = encoding; + selected_charmap_index_ = 0; + return true; + } + if (skrifa_font_->font->encoding() != skrifa::PsEncodingKind::None) { + selected_encoding_ = encoding; + selected_charmap_index_ = 1; + return true; + } + return false; + } + for (size_t i = 0; i < GetCharMapCount(); ++i) { + if (GetCharMapEncodingByIndex(i) == encoding) { + selected_encoding_ = encoding; + selected_charmap_index_ = i; + return true; + } } return false; } diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h index 05d1cb6716..840e3b4b17 100644 --- a/core/fxge/cfx_face.h +++ b/core/fxge/cfx_face.h @@ -202,6 +202,10 @@ class CFX_Face final : public Retainable, public Observable { std::optional> GetOs2Panose(); #endif +#if defined(PDF_ENABLE_FONTATIONS) + bool IsPostScriptFont() const; +#endif + // `cache_entry_` must outlive `font_stream_`. Faces managed by a cache // and sharing the same `font_stream_` keep the cache entry that indexes // that stream alive via this member while there is at least one face @@ -219,6 +223,7 @@ class CFX_Face final : public Retainable, public Observable { #endif // defined(PDF_USE_SKIA) #if defined(PDF_ENABLE_FONTATIONS) std::unique_ptr const skrifa_font_; + std::optional selected_charmap_index_; #endif // defined(PDF_ENABLE_FONTATIONS) fxge::FontEncoding selected_encoding_ = fxge::FontEncoding::kNone; }; diff --git a/core/fxge/skrifa/fx_skrifa_unittest.cpp b/core/fxge/skrifa/fx_skrifa_unittest.cpp index a018616b08..4649aef511 100644 --- a/core/fxge/skrifa/fx_skrifa_unittest.cpp +++ b/core/fxge/skrifa/fx_skrifa_unittest.cpp @@ -285,3 +285,35 @@ TEST(FxSkrifaTest, TestGetSfntTable) { constexpr uint32_t kMissingTag = 0x78797a77; EXPECT_EQ(0u, font->get_sfnt_table(kMissingTag, rust::Slice())); } + +TEST(FxSkrifaTest, TestCharmaps) { + std::string font_path = PathService::GetTestFilePath("fonts/ahem/Ahem.ttf"); + std::vector bytes = GetFileContents(font_path.c_str()); + + auto font = skrifa::new_font(rust::Slice(bytes), 0); + ASSERT_TRUE(font->is_ok()); + + size_t count = font->get_charmap_count(); + EXPECT_EQ(count, 2u); + + // Verify charmap info and map characters to glyph IDs. + size_t found_unicode_times = 0; + for (size_t i = 0; i < count; ++i) { + skrifa::CharMapInfo info; + EXPECT_TRUE(font->get_charmap_info(i, info)); + if (info.platform_id == kPlatformWindows && + info.encoding_id == kWindowsEncodingUnicode) { + ++found_unicode_times; + // In Ahem, space (32) maps to glyph ID 3. + EXPECT_EQ(3u, font->cmap_char_to_gid(i, 32)); + // 'A' (65) should map to non-zero glyph ID. + EXPECT_EQ(35u, font->cmap_char_to_gid(i, 65)); + } + } + EXPECT_EQ(found_unicode_times, 1u); + + // Out-of-bounds queries. + skrifa::CharMapInfo dummy_info; + EXPECT_FALSE(font->get_charmap_info(count, dummy_info)); + EXPECT_EQ(0u, font->cmap_char_to_gid(count, 32)); +} diff --git a/core/fxge/skrifa/src/main.rs b/core/fxge/skrifa/src/main.rs index 51591d8d46..d6ad384626 100644 --- a/core/fxge/skrifa/src/main.rs +++ b/core/fxge/skrifa/src/main.rs @@ -15,7 +15,7 @@ use read_fonts::{ string::Sid, type1::Type1Font, }, - tables::{head::MacStyle, os2::SelectionFlags}, + tables::{cmap::Cmap, head::MacStyle, os2::SelectionFlags}, types::{Fixed, GlyphId, Tag}, TableProvider, }; @@ -104,6 +104,12 @@ mod skrifa_ffi { pub glyph_index: u32, } + #[derive(Copy, Clone, PartialEq, Eq, Debug)] + pub struct CharMapInfo { + pub platform_id: u16, + pub encoding_id: u16, + } + #[derive(Clone, Debug)] pub struct Outline { pub verbs: Vec, @@ -156,6 +162,9 @@ mod skrifa_ffi { fn glyph_bounds(&self, glyph_index: u32) -> BoundingBox; fn get_font_bbox(&self, bbox: &mut BoundingBox) -> bool; fn get_sfnt_table(&self, table: u32, buffer: &mut [u8]) -> usize; + fn get_charmap_count(&self) -> usize; + fn get_charmap_info(&self, index: usize, info: &mut CharMapInfo) -> bool; + fn cmap_char_to_gid(&self, subtable_index: usize, code: u32) -> u32; fn agl_name_to_unicode(name: &str, unicode: &mut u32) -> bool; fn agl_unicode_to_name(unicode: u32, name: &mut [u8]) -> &[u8]; @@ -170,8 +179,8 @@ mod skrifa_ffi { } use skrifa_ffi::{ - BoundingBox, CharCodeAndIndex, CodePageRange, FaceFormat, Os2Panose, Outline, PathVerb, Point, - PsEncodingKind, UnicodeRange, + BoundingBox, CharCodeAndIndex, CharMapInfo, CodePageRange, FaceFormat, Os2Panose, Outline, + PathVerb, Point, PsEncodingKind, UnicodeRange, }; #[allow(clippy::large_enum_variant)] @@ -189,6 +198,7 @@ struct HinterCache { pub struct Sfnt<'a> { font: FontRef<'a>, + cmap: Option>, metrics: Metrics, ps_name: Option, family_name: Option, @@ -203,6 +213,7 @@ pub struct Sfnt<'a> { impl<'a> Sfnt<'a> { fn new(data: &'a [u8], index: u32) -> Option { let font = FontRef::from_index(data, index).ok()?; + let cmap = font.cmap().ok(); let metrics = font.metrics(Size::unscaled(), LocationRef::default()); let get_name = |id| font.localized_strings(id).english_or_first().map(|s| s.to_string()); let ps_name = get_name(StringId::POSTSCRIPT_NAME); @@ -216,6 +227,7 @@ impl<'a> Sfnt<'a> { let is_tricky = outlines.require_interpreter(); Some(Self { font, + cmap, ps_name, metrics, family_name, @@ -865,6 +877,49 @@ impl SkrifaFont<'_> { buffer.len() } + fn get_charmap_count(&self) -> usize { + let Self::Sfnt(sfnt) = self else { + return 0; + }; + sfnt.cmap.as_ref().map(|c| c.encoding_records().len()).unwrap_or(0) + } + + fn get_charmap_info(&self, index: usize, info: &mut CharMapInfo) -> bool { + let Self::Sfnt(sfnt) = self else { + return false; + }; + let Some(cmap) = &sfnt.cmap else { + return false; + }; + let Some(record) = cmap.encoding_records().get(index) else { + return false; + }; + info.platform_id = record.platform_id() as u16; + info.encoding_id = record.encoding_id(); + true + } + + fn cmap_char_to_gid(&self, subtable_index: usize, code: u32) -> u32 { + let Self::Sfnt(sfnt) = self else { + return 0; + }; + let Some(cmap) = &sfnt.cmap else { + return 0; + }; + let Some(record) = cmap.encoding_records().get(subtable_index) else { + return 0; + }; + let Ok(subtable) = record.subtable(cmap.offset_data()) else { + return 0; + }; + let gid = subtable.map_codepoint(code).map(|g| g.to_u32()).unwrap_or(0); + if gid < self.num_glyphs() { + gid + } else { + 0 + } + } + fn is_fixed_pitch(&self) -> bool { match self { Self::Sfnt(sfnt) => sfnt.metrics.is_monospace, From bd9ff698b99ccf6c6add2d202a62ac629251a461 Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Fri, 2 Oct 2026 18:00:48 -0700 Subject: [PATCH 28/72] Hoist image width out of 24bpp loop and avoid 16-bpc aliasing in CPDF_DIB. In CPDF_DIB::TranslateScanline24bpp(), stores through dest_scan (uint8_t) and the virtual call color_space_->GetRGBOrZerosOnError() may alias any object in memory under C++ strict aliasing rules, preventing the compiler from hoisting GetWidth() out of the per-pixel loop and forcing a memory reload on every iteration. Cache GetWidth() in a local width variable before the loop. In CPDF_DIB::TranslateScanline24bppDefaultDecode(), load the 16-bpc src channels into local uint8_t variables before writing to dest (matching fxcodec::ReverseRGB()), avoiding interleaved loads and stores when the compiler cannot prove src and dest do not overlap. Co-authored-by: Richard Winterton Change-Id: Ie605d688918b73054c7601a7373e480486859872 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159571 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- core/fpdfapi/page/cpdf_dib.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp index 977f24c0b2..60224e2a4b 100644 --- a/core/fpdfapi/page/cpdf_dib.cpp +++ b/core/fpdfapi/page/cpdf_dib.cpp @@ -1071,7 +1071,8 @@ void CPDF_DIB::TranslateScanline24bpp( uint64_t src_byte_pos = 0; size_t dest_byte_pos = 0; const bool bpp8 = bpc_ == 8; - for (int column = 0; column < GetWidth(); column++) { + const int width = GetWidth(); + for (int column = 0; column < width; column++) { for (uint32_t color = 0; color < components_; color++) { if (bpp8) { uint8_t data = src_scan[src_byte_pos++]; @@ -1141,9 +1142,13 @@ bool CPDF_DIB::TranslateScanline24bppDefaultDecode( auto src_pixels = fxcrt::reinterpret_span(src_scan).first(width); for (auto [src, dest] : fxcrt::Zip(src_pixels, dest_pixels)) { - dest.blue = src.blue_high; - dest.green = src.green_high; - dest.red = src.red_high; + // Compiler can't conclude src/dest don't overlap. + const uint8_t blue = src.blue_high; + const uint8_t green = src.green_high; + const uint8_t red = src.red_high; + dest.blue = blue; + dest.green = green; + dest.red = red; } break; } From b985852d629a4949820d3a30c27aa526689f2c61 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 18:48:01 -0700 Subject: [PATCH 29/72] Add third_party/llvm-libclang to DEPS V8 added third_party/llvm-libclang in https://crrev.com/c/8219268 for tools/metagen (https://crrev.com/c/7864481), which was enabled by default in https://crrev.com/c/8365609. Change-Id: Ibddd0e7a0ff8b24046fa19fa4ba1e3b7a810be54 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159534 Reviewed-by: Lei Zhang Commit-Queue: Andy Phan --- .gitignore | 1 + DEPS | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/.gitignore b/.gitignore index b1b75574b4..5ee92fed22 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ /third_party/llvm /third_party/llvm-build /third_party/llvm-libc/src +/third_party/llvm-libclang /third_party/markupsafe /third_party/nasm /third_party/ninja diff --git a/DEPS b/DEPS index 355db5168b..494f5c6259 100644 --- a/DEPS +++ b/DEPS @@ -672,6 +672,42 @@ deps = { Var('chromium_git') + '/external/github.com/llvm/llvm-project/libc.git@' + Var('llvm_libc_revision'), + 'third_party/llvm-libclang': { + 'dep_type': 'gcs', + 'bucket': 'chromium-browser-clang', + 'objects': [ + { + 'object_name': 'Linux_x64/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': 'b251621641190cdab7d23c4a47257e4e1f1f335c34c9676118940fa562bb66ff', + 'size_bytes': 22776236, + 'generation': 1790798150313742, + 'condition': 'host_os == "linux" and non_git_source', + }, + { + 'object_name': 'Mac/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '4f7e9d166ad2ced03b9d5c66f2a919fefce5127d03dbe93661a0d012c1dda9ef', + 'size_bytes': 22924716, + 'generation': 1790798154061688, + 'condition': 'host_os == "mac" and host_cpu == "x64"', + }, + { + 'object_name': 'Mac_arm64/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '444cfa9bd9d3cda991943c9743f1992004b1f50d6641372b5ff9103d9a4db478', + 'size_bytes': 20588924, + 'generation': 1790798157457698, + 'condition': 'host_os == "mac" and host_cpu == "arm64"', + }, + { + 'object_name': 'Win/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': 'e8bb31ac1bded5c1fce08567a8a1a8f304213cceeee7384c2cba844dcaddfd20', + 'size_bytes': 21527244, + 'generation': 1790798161045212, + 'condition': 'host_os == "win"', + }, + ], + 'condition': 'checkout_v8', + }, + 'third_party/markupsafe': { 'url': Var('chromium_git') + '/chromium/src/third_party/markupsafe.git@' + Var('markupsafe_revision'), From 190a9673fe7dd888dc26734b7159976edd18f514 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Fri, 2 Oct 2026 18:48:11 -0700 Subject: [PATCH 30/72] Roll v8/ e110f6a9d..0d546234e (517 commits) https://chromium.googlesource.com/v8/v8.git/+log/e110f6a9dff3..0d546234ecf0 Version 15.7.21 Created with: roll-dep v8 Change-Id: I3e3c046748be729561b68dc3405694e84ea021f8 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159551 Reviewed-by: Lei Zhang Commit-Queue: Andy Phan --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 494f5c6259..243e349b2e 100644 --- a/DEPS +++ b/DEPS @@ -268,7 +268,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling v8 # and whatever else without interference from each other. - 'v8_revision': 'e110f6a9dff3afca8b9e0836d10d1844d4a3dff2', + 'v8_revision': '0d546234ecf0af2032e958300ef8aeb14bc716c9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling zlib # and whatever else without interference from each other. From 2fd6cff57d9412cc42ef1a7e4e0a59b13a1e7cec Mon Sep 17 00:00:00 2001 From: "pdfium-autoroll@skia-public.iam.gserviceaccount.com" Date: Sun, 4 Oct 2026 21:51:30 -0700 Subject: [PATCH 31/72] Roll Zlib from 285e94b8fa95 to 456ae730017b (2 revisions) https://chromium.googlesource.com/chromium/src/third_party/zlib.git/+log/285e94b8fa95..456ae730017b If this roll has caused a breakage, revert this CL and set the roller to dry run mode using the controls here: https://autoroll.skia.org/r/zlib-pdfium Please CC andyphan@google.com,thestig@chromium.org on the revert to ensure that a human is aware of the problem. To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: None Tbr: andyphan@google.com Change-Id: I09fe592b17d14ad486a5a1711bd09b90254146d5 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159870 Commit-Queue: pdfium-autoroll@skia-public.iam.gserviceaccount.com Bot-Commit: pdfium-autoroll@skia-public.iam.gserviceaccount.com --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index 243e349b2e..e00cf264d9 100644 --- a/DEPS +++ b/DEPS @@ -272,7 +272,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling zlib # and whatever else without interference from each other. - 'zlib_revision': '285e94b8fa95ad3b7d16b80798ec8dce6febb8c8', + 'zlib_revision': '456ae730017b9b4bd3371927abc82627fd51feef', } # Only these hosts are allowed for dependencies in this DEPS file. From 344c9665c7a991ecbc6339b998fa97c1e16426e7 Mon Sep 17 00:00:00 2001 From: "pdfium-autoroll@skia-public.iam.gserviceaccount.com" Date: Sun, 4 Oct 2026 22:17:53 -0700 Subject: [PATCH 32/72] Roll Catapult from 50c971fc0958 to e1165abbf12a (18 revisions) https://chromium.googlesource.com/catapult.git/+log/50c971fc0958..e1165abbf12a If this roll has caused a breakage, revert this CL and set the roller to dry run mode using the controls here: https://autoroll.skia.org/r/catapult-pdfium Please CC andyphan@google.com,dhoss@chromium.org,thestig@chromium.org on the revert to ensure that a human is aware of the problem. To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md Bug: None Tbr: andyphan@google.com Change-Id: I7d40459b2f8b4c86a6331a7833b423a0f5e01479 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159850 Bot-Commit: pdfium-autoroll@skia-public.iam.gserviceaccount.com Commit-Queue: pdfium-autoroll@skia-public.iam.gserviceaccount.com --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index e00cf264d9..3f9f0cdb9b 100644 --- a/DEPS +++ b/DEPS @@ -106,7 +106,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '50c971fc0958d8c1fb0adcc97f41b90042fa7c87', + 'catapult_revision': 'e1165abbf12a3d9ecf2d3151a404c930b5047894', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling clang format # and whatever else without interference from each other. From f6289ff0469aad8eba326331da5561749a620f3e Mon Sep 17 00:00:00 2001 From: Kei Kamikawa Date: Mon, 5 Oct 2026 10:36:41 -0700 Subject: [PATCH 33/72] Add regression tests for popup appearance generation Repeated annotation list creation generates appearances for closed popups and adds document-owned indirect objects on each iteration. Record this behavior with TODOs for the expected corrections. Also verify opening, closing, and reopening popups through both drawing paths, including the rendered pixels. The following fix will defer appearance generation and update the incorrect expectations. Bug: 42270200 Change-Id: I82384c0f2e920373fb87f52bba2539bb786009f1 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159670 Commit-Queue: Lei Zhang Reviewed-by: Tom Sepez Reviewed-by: Lei Zhang --- AUTHORS | 1 + core/fpdfdoc/cpdf_annotlist_unittest.cpp | 76 ++++++++++++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/AUTHORS b/AUTHORS index c8141c9379..0d44ac783a 100644 --- a/AUTHORS +++ b/AUTHORS @@ -34,6 +34,7 @@ Jiang Jiang Jimin Lee Justin Pierce Ke Liu +Kei Kamikawa Luật Nguyễn Manuel Geißer Matt Jolly diff --git a/core/fpdfdoc/cpdf_annotlist_unittest.cpp b/core/fpdfdoc/cpdf_annotlist_unittest.cpp index a59f9595d1..d5588dee42 100644 --- a/core/fpdfdoc/cpdf_annotlist_unittest.cpp +++ b/core/fpdfdoc/cpdf_annotlist_unittest.cpp @@ -17,11 +17,15 @@ #include "core/fpdfapi/parser/cpdf_name.h" #include "core/fpdfapi/parser/cpdf_string.h" #include "core/fpdfapi/parser/cpdf_test_document.h" +#include "core/fpdfapi/render/cpdf_rendercontext.h" #include "core/fpdfdoc/cpdf_annot.h" #include "core/fxcrt/bytestring.h" #include "core/fxcrt/compiler_specific.h" #include "core/fxcrt/retain_ptr.h" #include "core/fxcrt/widestring.h" +#include "core/fxge/cfx_renderdevice.h" +#include "core/fxge/dib/cfx_dibitmap.h" +#include "core/fxge/dib/fx_dib.h" #include "testing/gtest/include/gtest/gtest.h" namespace { @@ -71,6 +75,10 @@ WideString GetDecodedContents(const CPDF_Annot* annotation) { pdfium::annotation::kContents); } +FX_ARGB GetCenterPixel(const CFX_DIBitmap* bitmap) { + return FXARGB_GetDIB(bitmap->GetScanline(100).subspan<400, 4>()); +} + } // namespace TEST_F(CPDFAnnotListTest, CreatePopupAnnotFromPdfEncoded) { @@ -124,3 +132,71 @@ TEST_F(CPDFAnnotListTest, CreatePopupAnnotFromEmptyUnicodedWithEscape) { EXPECT_EQ(1u, list.Count()); } + +TEST_F(CPDFAnnotListTest, ClosedPopupAppearanceObjects) { + AddTextAnnotation("Regression comment"); + { + CPDF_AnnotList list(page_); + ASSERT_EQ(2u, list.Count()); + EXPECT_TRUE(list.GetAt(0)->GetAnnotDict()->KeyExist("AP")); + // TODO(crbug.com/42270200): Closed popups should not have an appearance. + EXPECT_TRUE(list.GetAt(1)->GetAnnotDict()->KeyExist("AP")); + } + const uint32_t object_count = document_->GetLastObjNum(); + for (int i = 0; i < 30; ++i) { + CPDF_AnnotList list(page_); + EXPECT_TRUE(list.GetAt(1)->GetAnnotDict()->KeyExist("AP")); + // TODO(crbug.com/42270200): Rebuilding the list should not add objects. + EXPECT_EQ(object_count + 2 * (i + 1), document_->GetLastObjNum()); + } +} + +class CPDFPopupRenderTest : public CPDFAnnotListTest, + public testing::WithParamInterface { + protected: + bool UseRenderContext() const { return GetParam(); } + + bool DrawPopup(CPDF_Annot* popup, CFX_RenderDevice* device) { + device->Clear(0xffffffff); + const CFX_Matrix matrix; + if (!UseRenderContext()) { + return popup->DrawAppearance(page_.Get(), device, matrix, + CPDF_Annot::AppearanceMode::kNormal); + } + CPDF_RenderContext context(document_.get(), nullptr, nullptr); + const bool result = popup->DrawInContext( + page_.Get(), &context, matrix, CPDF_Annot::AppearanceMode::kNormal); + context.Render(device, nullptr, nullptr, nullptr); + return result; + } +}; + +TEST_P(CPDFPopupRenderTest, PopupRendering) { + AddTextAnnotation("Regression comment"); + CPDF_AnnotList list(page_); + ASSERT_EQ(2u, list.Count()); + CPDF_Annot* popup = list.GetAt(1); + ASSERT_EQ(CPDF_Annot::Subtype::POPUP, popup->GetSubtype()); + // TODO(crbug.com/42270200): Generate the appearance only when opened. + EXPECT_TRUE(popup->GetAnnotDict()->KeyExist("AP")); + auto device = + CFX_RenderDevice::CreateForNewBitmap(256, 256, FXDIB_Format::kBgra); + ASSERT_TRUE(device); + RetainPtr bitmap = device->GetBitmap(); + EXPECT_FALSE(DrawPopup(popup, device.get())); + EXPECT_EQ(0xffffffffu, GetCenterPixel(bitmap.Get())); + popup->SetOpenState(true); + EXPECT_TRUE(DrawPopup(popup, device.get())); + EXPECT_EQ(0xffffff00u, GetCenterPixel(bitmap.Get())); + ASSERT_TRUE(popup->GetAnnotDict()->KeyExist("AP")); + const uint32_t object_count = document_->GetLastObjNum(); + popup->SetOpenState(false); + EXPECT_FALSE(DrawPopup(popup, device.get())); + EXPECT_EQ(0xffffffffu, GetCenterPixel(bitmap.Get())); + popup->SetOpenState(true); + EXPECT_TRUE(DrawPopup(popup, device.get())); + EXPECT_EQ(0xffffff00u, GetCenterPixel(bitmap.Get())); + EXPECT_EQ(object_count, document_->GetLastObjNum()); +} + +INSTANTIATE_TEST_SUITE_P(All, CPDFPopupRenderTest, testing::Bool()); From 3cb2f661dc69999d3a179c77f54c79c42b195323 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Mon, 5 Oct 2026 13:49:53 -0700 Subject: [PATCH 34/72] Unify CFX_Face::RenderGlyph() on stateless rasterizer Under Fontations, route all glyph rendering through the stateless FT_Outline_Get_Bitmap() path regardless of whether a FreeType face record exists. For TrueType and OpenType fonts, query hinted or scaled outlines from Skrifa before falling back to unscaled outlines. Delete the legacy rec->glyph outline injection logic in FreeType's render path as well as the unused FtOutlineData and BuildFtOutline helpers. Bug: 42271123 Change-Id: Ie19d383326a9341d863f736d5725d2a34010ab1f Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159570 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- core/fxge/cfx_face.cpp | 240 +++++++----------------- core/fxge/skrifa/fx_skrifa_unittest.cpp | 2 +- testing/SUPPRESSIONS | 48 ++++- testing/utils/pixel_diff_util.h | 4 +- xfa/fde/cfde_textout_unittest.cpp | 4 +- 5 files changed, 110 insertions(+), 188 deletions(-) diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index ae7c59dd11..1f9799aef9 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp @@ -262,9 +262,8 @@ FT_Vector ToFTVector(const skrifa::Point& p, const CFX_Matrix& scaled_matrix) { ConvertedFTOutline ConvertToFTOutline(const skrifa::Outline& outline, const CFX_Matrix& matrix, - int upem, + float scale, float x_scale) { - const float scale = kFixedPpem / upem; const CFX_Matrix scaled_matrix(matrix.a * scale * x_scale, matrix.b * scale, matrix.c * scale * x_scale, matrix.d * scale, 0, 0); @@ -329,110 +328,6 @@ ConvertedFTOutline ConvertToFTOutline(const skrifa::Outline& outline, CloseContours(result.points, result.contours); return result; } - -// Backing store for an FT_Outline built from a skrifa outline. FreeType does -// not take ownership of these, so they must outlive the FT_Outline itself. -struct FtOutlineData { - std::vector points; - std::vector tags; - std::vector contours; -}; - -bool AppendFtPoint(FtOutlineData& data, - const skrifa::Point& point, - uint8_t tag) { - float sx = std::round(point.x * kFixedPpem); - float sy = std::round(point.y * kFixedPpem); - if (!std::isfinite(sx) || !std::isfinite(sy) || - !pdfium::IsValueInRangeForNumericType(sx) || - !pdfium::IsValueInRangeForNumericType(sy)) { - return false; - } - data.points.push_back({static_cast(sx), static_cast(sy)}); - data.tags.push_back(tag); - return true; -} - -// Converts `outline`, whose points are in pixels, into the 26.6 fixed point -// form that FreeType's rasterizer expects. Returns nullopt if `outline` is -// empty, is malformed, or does not fit within FreeType's 16-bit counts. -std::optional BuildFtOutline(const skrifa::Outline& outline) { - // FT_Outline::n_points and n_contours are signed 16-bit quantities. - static constexpr size_t kMaxPoints = std::numeric_limits::max(); - - FtOutlineData data; - auto end_contour = [&data] { - if (data.points.empty()) { - return; - } - const uint16_t last = - pdfium::checked_cast(data.points.size() - 1); - if (data.contours.empty() || data.contours.back() != last) { - data.contours.push_back(last); - } - }; - - size_t point_idx = 0; - for (auto verb : outline.verbs) { - switch (verb) { - case skrifa::PathVerb::MoveTo: - if (outline.points.size() - point_idx < 1 || - data.points.size() + 1 > kMaxPoints) { - return std::nullopt; - } - end_contour(); - if (!AppendFtPoint(data, outline.points[point_idx++], - FT_CURVE_TAG_ON)) { - return std::nullopt; - } - break; - case skrifa::PathVerb::LineTo: - if (outline.points.size() - point_idx < 1 || - data.points.size() + 1 > kMaxPoints) { - return std::nullopt; - } - if (!AppendFtPoint(data, outline.points[point_idx++], - FT_CURVE_TAG_ON)) { - return std::nullopt; - } - break; - case skrifa::PathVerb::QuadTo: - if (outline.points.size() - point_idx < 2 || - data.points.size() + 2 > kMaxPoints) { - return std::nullopt; - } - if (!AppendFtPoint(data, outline.points[point_idx++], - FT_CURVE_TAG_CONIC) || - !AppendFtPoint(data, outline.points[point_idx++], - FT_CURVE_TAG_ON)) { - return std::nullopt; - } - break; - case skrifa::PathVerb::CurveTo: - if (outline.points.size() - point_idx < 3 || - data.points.size() + 3 > kMaxPoints) { - return std::nullopt; - } - if (!AppendFtPoint(data, outline.points[point_idx++], - FT_CURVE_TAG_CUBIC) || - !AppendFtPoint(data, outline.points[point_idx++], - FT_CURVE_TAG_CUBIC) || - !AppendFtPoint(data, outline.points[point_idx++], - FT_CURVE_TAG_ON)) { - return std::nullopt; - } - break; - case skrifa::PathVerb::Close: - end_contour(); - break; - } - } - end_contour(); - if (data.points.empty()) { - return std::nullopt; - } - return data; -} #endif // defined(PDF_ENABLE_FONTATIONS) FT_Encoding ToFTEncoding(fxge::FontEncoding encoding) { @@ -973,25 +868,35 @@ std::unique_ptr CFX_Face::RenderGlyph( FontAntiAliasingMode anti_alias, const CFX_SubstFont* subst_font) { #if defined(PDF_ENABLE_FONTATIONS) - if (CFX_GEModule::IsFontations() && !GetRec()) { + if (CFX_GEModule::IsFontations()) { + if (!skrifa_font_ || !skrifa_font_->font->is_ok()) { + return nullptr; + } skrifa::Outline outline; - if (!skrifa_font_->font->unscaled_outline(glyph_index, outline)) { + bool is_scaled = IsTtOt() && skrifa_font_->font->hinted_outline( + glyph_index, kFixedPpem, + /*is_pedantic=*/false, outline); + if (!is_scaled && + !skrifa_font_->font->unscaled_outline(glyph_index, outline)) { return nullptr; } const int upem = GetUnitsPerEm(); if (upem <= 0) { return nullptr; } - + const float unscaled_advance = + is_scaled ? outline.advance_width * upem / kFixedPpem + : outline.advance_width; CFX_Matrix effective_matrix = matrix; - AdjustSubstFontTransform(subst_font, dest_width, outline.advance_width, + AdjustSubstFontTransform(subst_font, dest_width, unscaled_advance, is_cid_font, is_vertical, &effective_matrix); + const float scale = is_scaled ? 1.0f : kFixedPpem / upem; const bool is_lcd = (anti_alias == FontAntiAliasingMode::kLcd); const float x_scale = is_lcd ? 3.0f : 1.0f; ConvertedFTOutline converted = - ConvertToFTOutline(outline, effective_matrix, upem, x_scale); + ConvertToFTOutline(outline, effective_matrix, scale, x_scale); if (converted.points.empty() || converted.contours.empty()) { return nullptr; } @@ -1002,7 +907,7 @@ std::unique_ptr CFX_Face::RenderGlyph( ft_outline.points = converted.points.data(); ft_outline.tags = converted.tags.data(); ft_outline.contours = converted.contours.data(); - ft_outline.flags = FT_OUTLINE_NONE; + ft_outline.flags = FT_OUTLINE_SMART_DROPOUTS; if (subst_font) { int32_t ft_matrix_xx = static_cast(matrix.a * 1024.0f); @@ -1024,10 +929,40 @@ std::unique_ptr CFX_Face::RenderGlyph( FT_BBox cbox; FT_Outline_Get_CBox(&ft_outline, &cbox); - int x_left = static_cast(cbox.xMin >> 6); - int y_bottom = static_cast(cbox.yMin >> 6); - int x_right = static_cast((cbox.xMax + 63) >> 6); - int y_top = static_cast((cbox.yMax + 63) >> 6); + int x_left; + int y_bottom; + int x_right; + int y_top; + if (anti_alias == FontAntiAliasingMode::kMono) { + // Match FreeType's ft_glyphslot_preset_bitmap() monochrome rounding. + // Coordinates in `cbox` are in 26.6 fixed-point (1/64th pixel). Round + // asymmetrically (+31 / +32) so pixel centers (at 32/64) covered by the + // outline are included. If rounding causes the box to collapse to zero, + // expand by 1 pixel in the direction of the fractional remainder. + x_left = static_cast((cbox.xMin + 31) >> 6); + x_right = static_cast((cbox.xMax + 32) >> 6); + if (x_left == x_right) { + if (((cbox.xMin + 31) & 63) - 31 + ((cbox.xMax + 32) & 63) - 32 < 0) { + --x_left; + } else { + ++x_right; + } + } + y_bottom = static_cast((cbox.yMin + 31) >> 6); + y_top = static_cast((cbox.yMax + 32) >> 6); + if (y_bottom == y_top) { + if (((cbox.yMin + 31) & 63) - 31 + ((cbox.yMax + 32) & 63) - 32 < 0) { + --y_bottom; + } else { + ++y_top; + } + } + } else { + x_left = static_cast(cbox.xMin >> 6); + y_bottom = static_cast(cbox.yMin >> 6); + x_right = static_cast((cbox.xMax + 63) >> 6); + y_top = static_cast((cbox.yMax + 63) >> 6); + } int width = x_right - x_left; int height = y_top - y_bottom; if (width <= 0 || height <= 0) { @@ -1157,77 +1092,30 @@ std::unique_ptr CFX_Face::RenderGlyph( auto* glyph = rec->glyph; glyph->format = FT_GLYPH_FORMAT_OUTLINE; - bool loaded_fontations_outline = false; -#if defined(PDF_ENABLE_FONTATIONS) - // Backing store for `glyph->outline`; must outlive FT_Render_Glyph(). - std::optional ft_outline; - if (CFX_GEModule::IsFontations()) { - absl::Cleanup outline_cleaner = [glyph] { glyph->outline = FT_Outline{}; }; - if (skrifa_font_ && skrifa_font_->font->is_ok()) { - skrifa::Outline outline; - bool has_outline = false; - if (IsTtOt()) { - has_outline = skrifa_font_->font->hinted_outline( - glyph_index, kFixedPpem, /*is_pedantic=*/false, outline); - } - if (!has_outline) { - has_outline = skrifa_font_->font->scaled_outline(glyph_index, - kFixedPpem, outline); - } - if (has_outline) { - ft_outline = BuildFtOutline(outline); - } - if (ft_outline.has_value()) { - std::move(outline_cleaner).Cancel(); - glyph->outline.n_points = - pdfium::checked_cast(ft_outline->points.size()); - glyph->outline.n_contours = - pdfium::checked_cast(ft_outline->contours.size()); - glyph->outline.points = ft_outline->points.data(); - glyph->outline.tags = ft_outline->tags.data(); - glyph->outline.contours = ft_outline->contours.data(); - glyph->outline.flags = FT_OUTLINE_SMART_DROPOUTS; - FT_Outline_Transform(&glyph->outline, &ft_matrix); - } - } - loaded_fontations_outline = true; + ScopedFaceTransform scoped_transform(GetRec(), &ft_matrix); + int load_flags = FT_LOAD_NO_BITMAP | FT_LOAD_PEDANTIC; + if (!IsTtOt()) { + load_flags |= FT_LOAD_NO_HINTING; } -#endif // defined(PDF_ENABLE_FONTATIONS) - - if (!loaded_fontations_outline) { - ScopedFaceTransform scoped_transform(GetRec(), &ft_matrix); - int load_flags = FT_LOAD_NO_BITMAP | FT_LOAD_PEDANTIC; - if (!IsTtOt()) { - load_flags |= FT_LOAD_NO_HINTING; + int error = FT_Load_Glyph(rec, glyph_index, load_flags); + if (error) { + if (load_flags & FT_LOAD_NO_HINTING) { + return nullptr; } - int error = FT_Load_Glyph(rec, glyph_index, load_flags); + load_flags |= FT_LOAD_NO_HINTING; + load_flags &= ~FT_LOAD_PEDANTIC; + error = FT_Load_Glyph(rec, glyph_index, load_flags); if (error) { - if (load_flags & FT_LOAD_NO_HINTING) { - return nullptr; - } - load_flags |= FT_LOAD_NO_HINTING; - load_flags &= ~FT_LOAD_PEDANTIC; - error = FT_Load_Glyph(rec, glyph_index, load_flags); - if (error) { - return nullptr; - } + return nullptr; } } -#if defined(PDF_ENABLE_FONTATIONS) - absl::Cleanup restorer = [glyph, loaded_fontations_outline] { - if (loaded_fontations_outline) { - glyph->outline = FT_Outline{}; - } - }; -#endif // defined(PDF_ENABLE_FONTATIONS) - if (embolden_level > 0) { FT_Outline_Embolden(&glyph->outline, embolden_level); } CFX_FontMgr* font_mgr = CFX_GEModule::Get()->GetFontMgr(); FT_Library_SetLcdFilter(font_mgr->GetFTLibrary(), FT_LCD_FILTER_DEFAULT); - int error = + error = FT_Render_Glyph(glyph, FtRenderModeFromFontAntiAliasingMode(anti_alias)); if (error) { return nullptr; diff --git a/core/fxge/skrifa/fx_skrifa_unittest.cpp b/core/fxge/skrifa/fx_skrifa_unittest.cpp index 4649aef511..317b11b013 100644 --- a/core/fxge/skrifa/fx_skrifa_unittest.cpp +++ b/core/fxge/skrifa/fx_skrifa_unittest.cpp @@ -261,7 +261,7 @@ TEST(FxSkrifaTest, TestType1Face) { ASSERT_TRUE(glyph_mono); EXPECT_TRUE(glyph_mono->GetBitmap()); EXPECT_EQ(glyph_mono->GetBitmap()->GetWidth(), 6); - EXPECT_EQ(glyph_mono->GetBitmap()->GetHeight(), 7); + EXPECT_EQ(glyph_mono->GetBitmap()->GetHeight(), 6); } TEST(FxSkrifaTest, TestGetSfntTable) { diff --git a/testing/SUPPRESSIONS b/testing/SUPPRESSIONS index 7574ff3064..cb7e9ffc94 100644 --- a/testing/SUPPRESSIONS +++ b/testing/SUPPRESSIONS @@ -63,6 +63,7 @@ 3_interpolate_image.pdf mac * * skia * fuzzy 3bigpreview.pdf mac * * agg * diff 3bigpreview.pdf * * * * * fuzzy=21,0.15,10.0 +3bigpreview.pdf * * * * fontations fuzzy=25,0.25,15 4_35.pdf mac * * agg * diff 4_35.pdf * * * * fontations fuzzy=10,0.1,15 4_39.pdf mac * * agg * diff @@ -318,6 +319,7 @@ example_033.pdf * * * * fontations diff example_033.pdf * * * * * fuzzy example_034.pdf mac * * agg * diff example_034.pdf * * * * * fuzzy=4,0.05,5.0 +example_034.pdf * * * * fontations fuzzy=10,0.1,15 example_035.pdf mac * * agg * diff example_035.pdf * * * * fontations diff example_035.pdf * * * * * fuzzy @@ -370,6 +372,7 @@ example_050.pdf * * * * fontations diff example_050.pdf * * * * * fuzzy example_051.pdf mac * * agg * diff example_051.pdf * * * * * fuzzy=3,0.35,5.0 +example_051.pdf * * * * fontations fuzzy=10,0.35,15 example_052.pdf mac * * agg * diff example_052.pdf * * * * fontations diff example_052.pdf * * * * * fuzzy @@ -405,6 +408,7 @@ example_061.pdf * * * * fontations diff example_061.pdf * * * * * fuzzy example_062.pdf mac * * agg * diff example_062.pdf * * * * * fuzzy=4,0.05,5.0 +example_062.pdf * * * * fontations fuzzy=10,0.1,15 example_063.pdf mac * * agg * diff example_063.pdf * * * * fontations diff example_063.pdf * * * * * fuzzy @@ -568,6 +572,7 @@ time.pdf * * * * fontations fuzzy=10,0.1,15 transformation.pdf mac * * agg * diff transformation.pdf * * * * fontations fuzzy=10,0.1,15 transparent.pdf mac * * agg * diff +transparent.pdf * * * * fontations fuzzy=10,0.1,15 whats_new_in_v3.0.pdf mac * * agg * diff whats_new_in_v3.0.pdf * * * * fontations fuzzy=10,0.1,15 whats_new_in_v3.0.pdf mac * * skia * fuzzy @@ -613,6 +618,7 @@ Test_CheckBox.pdf * * * * * diff 2_color_tiling.pdf mac_x86 * * skia * diff 2_color_tiling.pdf * * * * fontations fuzzy=10,0.1,15 2_uncolor_tiling.pdf mac_x86 * * skia * diff +2_uncolor_tiling.pdf * * * * fontations fuzzy=10,0.1,15 3bigpreview.pdf mac_x86 * * skia * diff FRC_4.5.3_DeviceRGB_rg.pdf mac_x86 * * skia * diff FRC_4.5.4_CalGray_gamma.pdf mac_x86 * * skia * diff @@ -668,7 +674,7 @@ bug_668762.pdf mac_x86 * * skia * diff bug_668762.pdf * * * * fontations fuzzy=10,0.1,15 edit_transform.pdf mac_x86 * * skia * diff en_14_foxit_products.pdf mac_x86 * * skia * diff -en_14_foxit_products.pdf * * * * fontations fuzzy=10,0.1,15 +en_14_foxit_products.pdf * * * * fontations fuzzy=10,0.2,15 en_contact.pdf mac_x86 * * skia * diff en_foxit.pdf mac_x86 * * skia * diff en_fqa.pdf mac_x86 * * skia * diff @@ -678,9 +684,9 @@ example_004.pdf mac_x86 * * skia * diff example_028.pdf mac_x86 * * skia * diff example_055.pdf mac_x86 * * skia * diff font_1_embedded_font_en_feature.pdf mac_x86 * * skia * diff -font_1_embedded_font_en_feature.pdf * * * * fontations fuzzy=10,0.1,15 +font_1_embedded_font_en_feature.pdf * * * * fontations fuzzy=16,0.1,15 font_2_embedded_font_en_size14.pdf mac_x86 * * skia * diff -font_2_embedded_font_en_size14.pdf * * * * fontations fuzzy=10,0.1,15 +font_2_embedded_font_en_size14.pdf * * * * fontations fuzzy=16,0.1,15 new_stamp4.pdf mac_x86 * * skia * diff octest.pdf mac_x86 * * skia * diff path_5_pattern.pdf mac_x86 * * skia * diff @@ -721,9 +727,11 @@ FRC_8.5_Screen_Img_D_Launch.pdf mac * * skia * fuzzy FRC_8.5_URI_IsMap.pdf * * * gdi * diff FRC_8.5_URI_IsMap.pdf * * * * * fuzzy FRC_8.5_URI_IsMap.pdf mac * * skia * fuzzy +FRC_8.5_URI_IsMap.pdf * * * * fontations fuzzy=10,0.1,15 bug_691967.pdf * * * gdi_skia * diff bug_691967.pdf * * * * * fuzzy bug_691967.pdf mac * * skia * fuzzy +bug_691967.pdf * * * * fontations fuzzy=10,0.1,15 bug_86459.pdf * * * gdi * diff bug_86459.pdf * * * * * fuzzy bug_880920.pdf * * * gdi * diff @@ -822,6 +830,7 @@ whats_new_in_v3.0.pdf * * * gdi * diff # TODO(crbug.com/42271067): Remove after associated bug is fixed Date_FormCale.pdf * * * gdi * diff +Date_FormCale.pdf * * * * fontations fuzzy=10,0.1,15 FRC_3.5_P__3648_Password_1.pdf * * * gdi * diff FRC_3.5_P__3648_Password_1.pdf * * * * fontations fuzzy=10,0.1,15 FRC_8.4.1_Annotations_AP_N_R.D_.pdf * * * gdi * diff @@ -833,7 +842,7 @@ FRC_8.4.1_Annotations_AS_Yes_.pdf * * * * fontations fuzzy=10,0.1,15 FRC_8.5_Bl_Hide.pdf * * * gdi * diff FRC_8.5_Bl_Hide.pdf * * * * fontations diff FRC_8.5_E_GoTo_D.pdf * * * gdi * diff -FRC_8.5_E_GoTo_D.pdf * * * * fontations fuzzy=10,0.1,15 +FRC_8.5_E_GoTo_D.pdf * * * * fontations diff FRC_8.5_Fo_URI_Base.pdf * * * gdi * diff FRC_8.5_Fo_URI_Base.pdf * * * * fontations diff FRC_8.5_U_GoToR_NewWindow.pdf * * * gdi * diff @@ -848,10 +857,13 @@ FRC_8.5_Widget_K.pdf * * * * fontations fuzzy=10,0.1,15 FRC_8.5_Widget_V.pdf * * * gdi * diff FRC_8.5_Widget_V.pdf * * * * fontations fuzzy=10,0.1,15 FRC_8.5_X_GoToR_D.pdf * * * gdi * diff -FRC_8.5_X_GoToR_D.pdf * * * * fontations fuzzy=10,0.1,15 +FRC_8.5_X_GoToR_D.pdf * * * * fontations diff Line_Stroke.pdf * * * gdi * diff +Line_Stroke.pdf * * * * fontations fuzzy=10,0.1,15 Oneof1.pdf * * * gdi * diff +Oneof1.pdf * * * * fontations fuzzy=10,0.1,15 Oneof2.pdf * * * gdi * diff +Oneof2.pdf * * * * fontations fuzzy=10,0.1,15 PagePosition_any_rest.pdf * * * gdi * diff PagePosition_any_rest.pdf * * * * fontations fuzzy=10,0.1,15 PagePosition_first.pdf * * * gdi * diff @@ -890,7 +902,9 @@ Test_RadioButton.pdf * * * * fontations fuzzy=10,0.1,15 Test_ResetButton.pdf * * * gdi * diff Test_ResetButton.pdf * * * * fontations fuzzy=10,0.1,15 Test_TextField.pdf * * * gdi * diff +Test_TextField.pdf * * * * fontations fuzzy=10,0.1,15 TimeField.pdf * * * gdi * diff +TimeField.pdf * * * * fontations fuzzy=10,0.1,15 action_execute_a_menu_item.pdf * * * gdi * diff action_hide_show_form.pdf * * * gdi * diff action_on_focus.pdf * * * gdi * diff @@ -898,7 +912,7 @@ action_reset.pdf * * * gdi * diff action_run_javascript.pdf * * * gdi * diff action_submit_a_form.pdf * * * gdi * diff all_trigger_browsefordoc.pdf * * * gdi * diff -all_trigger_browsefordoc.pdf linux,win * * * fontations diff +all_trigger_browsefordoc.pdf * * * * fontations diff all_trigger_browsefordoc.pdf * * * * * fuzzy all_trigger_browsefordoc.pdf mac * * skia * fuzzy all_trigger_newdoc.pdf * * * gdi * diff @@ -913,6 +927,7 @@ app_launchurl.pdf * * * gdi * diff bi.pdf * * * gdi * diff bi.pdf mac * * skia * fuzzy bug_434.pdf * * * gdi * diff +bug_434.pdf * * * * fontations diff bug_440132.pdf * * * gdi * diff calculate_average.pdf * * * gdi * diff calculate_sum_a_b_c.pdf * * * gdi * diff @@ -1174,11 +1189,13 @@ bug_42270333.in * * * * * diff # TODO(crbug.com/40860237): Remove after associated bug is fixed bug_40860237.in mac * * agg * diff +bug_40860237.in * * * * fontations fuzzy=10,0.1,15 # This test is intentionally suppressed on Windows. Normally, Windows provides # the Symbol font, so this PDF would render correctly. However, in the hermetic # test environment, there is no Symbol font and the rendering is incorrect. bug_1442723.in win * * * * diff +bug_1442723.in * * * * fontations fuzzy=10,0.1,15 # TODO(crbug.com/42270459): Remove after associated bug is fixed bug_42270459_2.in * * * * * diff @@ -1258,8 +1275,10 @@ bug_1383708.in mac * * skia * fuzzy # TODO(crbug.com/42271067): Remove after associated bug is fixed barcode_test.pdf * * * gdi * diff +barcode_test.pdf * * * * fontations fuzzy=10,0.1,15 bug_1026918.in * * * gdi * diff bug_1072440.in * * * gdi * diff +bug_1072440.in * * * * fontations fuzzy=10,0.1,15 bug_113910.in * * * gdi * diff bug_1282.in * * * gdi * diff bug_1286970.in * * * gdi * diff @@ -1284,17 +1303,23 @@ checkbox_radiobutton_hide.in * * * gdi * diff checkbox_radiobutton_reset.in * * * gdi * diff combobox_form.in * * * gdi * diff dynamic_list_box_allow_multiple_selection.pdf * * * gdi * diff +dynamic_list_box_allow_multiple_selection.pdf * * * * fontations fuzzy=10,0.1,15 dynamic_password_field_background_fill.pdf * * * gdi * diff dynamic_password_field_background_fill.pdf mac * * skia * fuzzy +dynamic_password_field_background_fill.pdf * * * * fontations fuzzy=10,0.1,15 dynamic_table_color_and_width.pdf * * * gdi * diff +dynamic_table_color_and_width.pdf * * * * fontations fuzzy=10,0.1,15 password.in * * * gdi * diff resolve_nodes_0.pdf * * * gdi * diff resolve_nodes_0.pdf * * * * * fuzzy +resolve_nodes_0.pdf * * * * fontations fuzzy=10,0.1,15 scrollable_widgets1.in * * * gdi * diff scrollable_widgets2.in * * * gdi * diff scrollable_widgets2.in * * * * fontations fuzzy=10,0.1,15 static_list_box_caption.pdf * * * gdi * diff +static_list_box_caption.pdf * * * * fontations fuzzy=10,0.1,15 static_password_field_rotate.pdf * * * gdi * diff +static_password_field_rotate.pdf * * * * fontations fuzzy=15,0.1,15 text_form_custom_font.in * * * gdi * diff text_form_multiline.in * * * gdi * diff text_form_multiline.in * * * * fontations fuzzy=10,0.1,15 @@ -1412,7 +1437,7 @@ shading_2_9.pdf mac * * skia * fuzzy zh_file_structure.pdf mac * * skia * fuzzy zh_file_structure.pdf * * * * fontations diff zh_page.pdf mac * * skia * fuzzy -zh_page.pdf * * * * fontations fuzzy=10,0.1,15 +zh_page.pdf * * * * fontations fuzzy=20,0.1,15 zh_webdav.pdf mac * * skia * fuzzy zh_webdav.pdf * * * * fontations fuzzy=10,0.1,15 # @@ -1431,6 +1456,7 @@ bug_846.in * * * * fontations diff # # Fontations fuzzy matching, naming no test that appears above. # +050_extra_m.pdf * * * * fontations fuzzy=10,0.1,15 2_8_stamp1.pdf * * * * fontations fuzzy=10,0.1,15 FRC_10_8.2.2_Prev_remove_all.pdf * * * * fontations fuzzy=10,0.1,15 FRC_10_8.2.4__remove_ModDate_value.pdf * * * * fontations fuzzy=10,0.1,15 @@ -1580,9 +1606,16 @@ FRC_9_8.2.2_Prev_remove_value.pdf * * * * fontations fuzzy=10,0.1,15 FRC_9_8.2.4__remove__Description_obj.pdf * * * * fontations fuzzy=10,0.1,15 annotation_highlight_no_content.pdf * * * * fontations fuzzy=10,0.1,15 bug_113910.in * * * * fontations fuzzy=10,0.1,15 +bug_1308.pdf * * * * fontations fuzzy=15,0.1,15 +bug_1308_1.in * * * * fontations fuzzy=10,0.1,15 +bug_1355.in * * * * fontations fuzzy=15,0.1,15 +bug_1388_2.in * * * * fontations fuzzy=10,0.1,15 +bug_1388_3.in * * * * fontations fuzzy=10,0.1,15 +bug_1402.in * * * * fontations fuzzy=10,0.1,15 bug_1752.in * * * * fontations fuzzy=10,0.1,15 bug_1772.in * * * * fontations fuzzy=10,0.1,15 bug_1922.in * * * * fontations fuzzy=10,0.1,15 +bug_42270459.in * * * * fontations fuzzy=10,0.1,15 bug_432208037.in * * * * fontations fuzzy=10,0.1,15 bug_493126_endobj_bug.pdf * * * * fontations fuzzy=10,0.1,15 bug_493126_endobj_bug_weirdWS.pdf * * * * fontations fuzzy=10,0.1,15 @@ -1617,3 +1650,4 @@ generation_numbers1.pdf * * * * fontations fuzzy=10,0.1,15 generation_numbers2.pdf * * * * fontations fuzzy=10,0.1,15 password.in * * * * fontations fuzzy=10,0.1,15 scrollable_widgets1.in * * * * fontations fuzzy=10,0.1,15 +test_m.pdf * * * * fontations fuzzy=10,0.1,15 diff --git a/testing/utils/pixel_diff_util.h b/testing/utils/pixel_diff_util.h index c15e6366ce..4ad054a646 100644 --- a/testing/utils/pixel_diff_util.h +++ b/testing/utils/pixel_diff_util.h @@ -20,8 +20,8 @@ inline constexpr double kMaxFuzzyWindowMeanSquaredError = 15.0; // Fontations fuzzy matching limits: allows a larger per-channel delta to // accommodate subpixel curve antialiasing variances while enforcing a tight // mean squared error bound. -inline constexpr uint8_t kMaxFontationsPixelDelta = 10; -inline constexpr double kMaxFontationsMeanSquaredError = 0.10; +inline constexpr uint8_t kMaxFontationsPixelDelta = 12; +inline constexpr double kMaxFontationsMeanSquaredError = 0.20; inline constexpr int kMaxFontationsWindowSize = kMaxFuzzyWindowSize; inline constexpr double kMaxFontationsWindowMeanSquaredError = kMaxFuzzyWindowMeanSquaredError; diff --git a/xfa/fde/cfde_textout_unittest.cpp b/xfa/fde/cfde_textout_unittest.cpp index ce5a9b9ce6..171c8cdaf5 100644 --- a/xfa/fde/cfde_textout_unittest.cpp +++ b/xfa/fde/cfde_textout_unittest.cpp @@ -100,7 +100,7 @@ TEST_F(CFDETextOutTest, DrawLogicTextBasic) { #endif #if defined(PDF_ENABLE_FONTATIONS) if (CFX_GEModule::IsFontations()) { - return "59f4a2cfb7938032f144954642babe58"; + return "0064590d0532663140d521a2ea6780b1"; } #endif return "c143f8450f661a489cc9423de7cc1acc"; @@ -143,7 +143,7 @@ class CFDETextOutLargeBitmapTest : public CFDETextOutTest { #endif #if defined(PDF_ENABLE_FONTATIONS) if (CFX_GEModule::IsFontations()) { - return "89adff3e02833425d42a2f89ef8fd7e3"; + return "78842f43dce9b89af92f17b56d9ceaab"; } #endif return "add7cf2819b3e1397d8a60a9ec436a86"; From 3670b03f2be69a242a86c972f42169e3e256b119 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Mon, 5 Oct 2026 15:46:49 -0700 Subject: [PATCH 35/72] Support bare CFF fonts in CFX_Face via Skrifa Treat bare CFF fonts the same as Type 1 fonts in CFX_Face by checking for non-SFNT faces (!is_sfnt()) across character mapping, encoding selection, and glyph indexing. This allows built-in stock fonts (such as Foxit Sans) to provide charmaps and glyph indices under Fontations without FreeType, fixing XFA theme font loading fallbacks. Bug: 42271123 Change-Id: I3cd2c7bf05ab91b27fd1de29bc5d4436b5109a09 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159590 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxge/cfx_face.cpp | 21 ++++++++------- core/fxge/skrifa/fx_skrifa_unittest.cpp | 34 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index 1f9799aef9..6f3be9140a 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp @@ -480,10 +480,7 @@ struct SkrifaFontHolder { RetainPtr CFX_Face::New(RetainPtr cache_entry, RetainPtr font_stream, uint32_t face_index) { - CFX_FontMgr* font_mgr = CFX_GEModule::Get()->GetFontMgr(); pdfium::span data = font_stream->span(); - std::unique_ptr skrifa_font; - bool skip_freetype = false; #if defined(PDF_ENABLE_FONTATIONS) if (CFX_GEModule::IsFontations()) { @@ -496,13 +493,15 @@ RetainPtr CFX_Face::New(RetainPtr cache_entry, // keeping a face that only FreeType can read. return nullptr; } - skrifa_font = std::make_unique(std::move(raw_font)); - skip_freetype = skrifa_font->font->font_type() == skrifa::FaceFormat::Type1; + return pdfium::WrapRetain(new CFX_Face( + std::move(cache_entry), std::move(font_stream), /*rec=*/nullptr, + std::make_unique(std::move(raw_font)))); } #endif // defined(PDF_ENABLE_FONTATIONS) - FT_FaceRec* face_rec = nullptr; - if (!skip_freetype) { + if (CFX_GEModule::IsFreetype()) { + CFX_FontMgr* font_mgr = CFX_GEModule::Get()->GetFontMgr(); + FT_FaceRec* face_rec = nullptr; if (FT_New_Memory_Face(font_mgr->GetFTLibrary(), data.data(), pdfium::checked_cast(data.size()), pdfium::checked_cast(face_index), @@ -512,12 +511,12 @@ RetainPtr CFX_Face::New(RetainPtr cache_entry, if (FT_Set_Pixel_Sizes(face_rec, 64, 64) != 0) { return nullptr; } + return pdfium::WrapRetain(new CFX_Face(std::move(cache_entry), + std::move(font_stream), face_rec, + /*skrifa_font=*/nullptr)); } - // Private ctor. - return pdfium::WrapRetain(new CFX_Face(std::move(cache_entry), - std::move(font_stream), face_rec, - std::move(skrifa_font))); + return nullptr; } // static diff --git a/core/fxge/skrifa/fx_skrifa_unittest.cpp b/core/fxge/skrifa/fx_skrifa_unittest.cpp index 317b11b013..1099741220 100644 --- a/core/fxge/skrifa/fx_skrifa_unittest.cpp +++ b/core/fxge/skrifa/fx_skrifa_unittest.cpp @@ -264,6 +264,40 @@ TEST(FxSkrifaTest, TestType1Face) { EXPECT_EQ(glyph_mono->GetBitmap()->GetHeight(), 6); } +TEST(FxSkrifaTest, TestBareCffFace) { + if (!CFX_GEModule::IsFontations()) { + GTEST_SKIP(); + } + + auto stream = pdfium::MakeRetain(kFoxitSansFontData); + auto face = CFX_Face::New(nullptr, stream, 0); + ASSERT_TRUE(face); + + EXPECT_EQ(face->GetFontFormat(), "CFF"); + EXPECT_FALSE(face->IsTtOt()); + EXPECT_EQ(face->GetCharMapCount(), 2u); + EXPECT_EQ(face->GetCharMapPlatformIdByIndex(0), kPlatformAppleUnicode); + EXPECT_EQ(face->GetCharMapIdPairByIndex(0).encoding_id, + kAppleUnicodeEncodingUnicode2_0); + EXPECT_EQ(face->GetCharMapEncodingByIndex(0), fxge::FontEncoding::kUnicode); + EXPECT_EQ(face->GetCharMapPlatformIdByIndex(1), kPlatformAdobe); + EXPECT_EQ(face->GetCharMapIdPairByIndex(1).encoding_id, kAdobeEncodingCustom); + EXPECT_EQ(face->GetCharMapEncodingByIndex(1), + fxge::FontEncoding::kAdobeCustom); + + EXPECT_TRUE(face->SelectCharMap(fxge::FontEncoding::kAdobeCustom)); + int gid_x = face->GetCharIndex(120); + EXPECT_EQ(gid_x, 222); + + EXPECT_TRUE(face->SelectCharMap(fxge::FontEncoding::kUnicode)); + EXPECT_EQ(face->GetCharIndex(L'x'), gid_x); + + std::unique_ptr path = + face->LoadGlyphPath(gid_x, 0, false, nullptr); + ASSERT_TRUE(path); + EXPECT_EQ(path->GetPoints().size(), 12u); +} + TEST(FxSkrifaTest, TestGetSfntTable) { std::string font_path = PathService::GetTestFilePath("fonts/ahem/Ahem.ttf"); std::vector bytes = GetFileContents(font_path.c_str()); From 4fa235012d4c71bdf2cf1e621706e723299d1e5c Mon Sep 17 00:00:00 2001 From: Kei Kamikawa Date: Mon, 5 Oct 2026 17:29:45 -0700 Subject: [PATCH 36/72] Defer popup appearance generation until popup is opened Repeatedly rendering the same page, such as during tiled rendering, causes continuous memory growth on pages containing annotations with comments. CPDF_AnnotList creates temporary popup annotations for annotations with contents. The CPDF_Annot constructor generated appearances even for closed popups, adding document-owned font dictionaries and appearance streams. Because these indirect objects outlive the temporary popups, they accumulate over repeated renders. Update ShouldGenerateAP() to check ShouldDrawAnnotation() instead of !IsHidden(), preserving the hidden check while deferring appearance generation until the popup is visible. When a popup is opened, the existing DrawAppearance() and DrawInContext() paths already invoke GenerateAPIfNeeded(). Update the existing Bug1206 test to verify that saved file sizes remain identical across renders instead of growing. Update the regression tests to verify that rebuilding annotation lists does not add indirect objects and that popup appearances are generated only when opened. Keep the file size lower bound and the existing opening, closing, and reopening checks. Bug: 42270200 Change-Id: Id80f0ac3fcfa7bd2208373c05c00c154cd863330 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158790 Commit-Queue: Andy Phan Reviewed-by: Tom Sepez Reviewed-by: Andy Phan Reviewed-by: Lei Zhang --- core/fpdfdoc/cpdf_annot.cpp | 4 +++- core/fpdfdoc/cpdf_annotlist_unittest.cpp | 11 ++++------- fpdfsdk/fpdf_annot_embeddertest.cpp | 6 ++---- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp index 91782646f3..4600893617 100644 --- a/core/fpdfdoc/cpdf_annot.cpp +++ b/core/fpdfdoc/cpdf_annot.cpp @@ -163,7 +163,9 @@ bool CPDF_Annot::ShouldGenerateAP() const { return false; } - return !IsHidden(); + // Closed popups are recreated on every render. Generate their appearance + // only when opened; DrawAppearance() and DrawInContext() retry at that point. + return ShouldDrawAnnotation(); } bool CPDF_Annot::ShouldDrawAnnotation() const { diff --git a/core/fpdfdoc/cpdf_annotlist_unittest.cpp b/core/fpdfdoc/cpdf_annotlist_unittest.cpp index d5588dee42..9eae082d8d 100644 --- a/core/fpdfdoc/cpdf_annotlist_unittest.cpp +++ b/core/fpdfdoc/cpdf_annotlist_unittest.cpp @@ -139,15 +139,13 @@ TEST_F(CPDFAnnotListTest, ClosedPopupAppearanceObjects) { CPDF_AnnotList list(page_); ASSERT_EQ(2u, list.Count()); EXPECT_TRUE(list.GetAt(0)->GetAnnotDict()->KeyExist("AP")); - // TODO(crbug.com/42270200): Closed popups should not have an appearance. - EXPECT_TRUE(list.GetAt(1)->GetAnnotDict()->KeyExist("AP")); + EXPECT_FALSE(list.GetAt(1)->GetAnnotDict()->KeyExist("AP")); } const uint32_t object_count = document_->GetLastObjNum(); for (int i = 0; i < 30; ++i) { CPDF_AnnotList list(page_); - EXPECT_TRUE(list.GetAt(1)->GetAnnotDict()->KeyExist("AP")); - // TODO(crbug.com/42270200): Rebuilding the list should not add objects. - EXPECT_EQ(object_count + 2 * (i + 1), document_->GetLastObjNum()); + EXPECT_FALSE(list.GetAt(1)->GetAnnotDict()->KeyExist("AP")); + EXPECT_EQ(object_count, document_->GetLastObjNum()); } } @@ -177,8 +175,7 @@ TEST_P(CPDFPopupRenderTest, PopupRendering) { ASSERT_EQ(2u, list.Count()); CPDF_Annot* popup = list.GetAt(1); ASSERT_EQ(CPDF_Annot::Subtype::POPUP, popup->GetSubtype()); - // TODO(crbug.com/42270200): Generate the appearance only when opened. - EXPECT_TRUE(popup->GetAnnotDict()->KeyExist("AP")); + EXPECT_FALSE(popup->GetAnnotDict()->KeyExist("AP")); auto device = CFX_RenderDevice::CreateForNewBitmap(256, 256, FXDIB_Format::kBgra); ASSERT_TRUE(device); diff --git a/fpdfsdk/fpdf_annot_embeddertest.cpp b/fpdfsdk/fpdf_annot_embeddertest.cpp index daa226aa65..5edebc0151 100644 --- a/fpdfsdk/fpdf_annot_embeddertest.cpp +++ b/fpdfsdk/fpdf_annot_embeddertest.cpp @@ -2008,7 +2008,7 @@ TEST_F(FPDFAnnotEmbedderTest, GetFormAnnotAndCheckFlagsComboBox) { } TEST_F(FPDFAnnotEmbedderTest, Bug1206) { - static constexpr size_t kExpectedMinimumOriginalSize = 1601; + static constexpr size_t kExpectedMinimumOriginalSize = 1000; ASSERT_TRUE(OpenDocument("bug_1206.pdf")); @@ -2025,9 +2025,7 @@ TEST_F(FPDFAnnotEmbedderTest, Bug1206) { CompareBitmapWithExpectationSuffix(bitmap.get(), "bug_1206"); ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); - // TODO(https://crbug.com/42270200): This is wrong. The size should be - // equal, not bigger. - EXPECT_GT(GetString().size(), original_size); + EXPECT_EQ(original_size, GetString().size()); ClearString(); } } From 0766a85d176ab690470e8a742e9467fbe7528a07 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Mon, 5 Oct 2026 20:25:54 -0700 Subject: [PATCH 37/72] Add third_party/llvm-libclang presubmit check Add _CheckLibclangRevision() to PRESUBMIT.py and testing/tools/libclang_check.py to verify that third_party/llvm-libclang and third_party/rust-toolchain stay in sync in DEPS. Change-Id: Ie7af398542da735974d95061a44c3955a88cd14b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159395 Commit-Queue: Andy Phan Reviewed-by: Lei Zhang --- PRESUBMIT.py | 22 +++++++ testing/tools/PRESUBMIT.py | 3 + testing/tools/libclang_check.py | 68 ++++++++++++++++++++ testing/tools/libclang_check_test.py | 94 ++++++++++++++++++++++++++++ 4 files changed, 187 insertions(+) create mode 100755 testing/tools/libclang_check.py create mode 100755 testing/tools/libclang_check_test.py diff --git a/PRESUBMIT.py b/PRESUBMIT.py index f430bf7cc8..611e3ae68b 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -433,6 +433,27 @@ def _CheckLibcxxRevision(input_api, output_api): return [] +def _CheckLibclangRevision(input_api, output_api): + """Makes sure that third_party/llvm-libclang and third_party/rust-toolchain + are in sync in DEPS. + """ + if 'DEPS' not in [f.LocalPath() for f in input_api.AffectedFiles()]: + return [] + + script_path = input_api.os_path.join('testing', 'tools', 'libclang_check.py') + + try: + errors = input_api.subprocess.check_output([script_path, 'DEPS']) + except input_api.subprocess.CalledProcessError as error: + msg = 'libclang_check.py failed:' + long_text = error.output.decode('utf-8', 'ignore') + return [output_api.PresubmitError(msg, long_text=long_text)] + + if errors: + return [output_api.PresubmitError(errors)] + return [] + + def _CheckTestDuplicates(input_api, output_api): """Checks that pixel and javascript tests don't contain duplicates. We use .in and .pdf files, having both can cause race conditions on the bots, @@ -599,6 +620,7 @@ def CheckChangeOnUpload(input_api, output_api): input_api, output_api, lint_filters=LINT_FILTERS)) results.extend(_CheckIncludeOrder(input_api, output_api)) results.extend(_CheckLibcxxRevision(input_api, output_api)) + results.extend(_CheckLibclangRevision(input_api, output_api)) results.extend(_CheckTestDuplicates(input_api, output_api)) results.extend(_CheckPngNames(input_api, output_api)) results.extend(_CheckUselessForwardDeclarations(input_api, output_api)) diff --git a/testing/tools/PRESUBMIT.py b/testing/tools/PRESUBMIT.py index e76673f9c0..1066f47962 100644 --- a/testing/tools/PRESUBMIT.py +++ b/testing/tools/PRESUBMIT.py @@ -14,6 +14,9 @@ def _CommonChecks(input_api, output_api): tests = [] tests.extend( input_api.canned_checks.GetPylint(input_api, output_api, version='2.7')) + tests.extend( + input_api.canned_checks.GetUnitTestsInDirectory( + input_api, output_api, '.', files_to_check=[r'^.+_test\.py$'])) return tests diff --git a/testing/tools/libclang_check.py b/testing/tools/libclang_check.py new file mode 100755 index 0000000000..de8958bf5b --- /dev/null +++ b/testing/tools/libclang_check.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +# Copyright 2026 The PDFium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Verifies rust-libclang and rust-toolchain revisions are in sync in DEPS.""" + +import re +import sys + + +def _ExtractRevisions(deps_content, regex): + """Gets the revisions by searching the lines in deps_content using regex.""" + revisions = [] + for line in deps_content.splitlines(): + match = regex.match(line) + if not match: + continue + revisions.append((match.group(1), match.group(2))) + return revisions + + +def _GetLibclangRevisions(deps_content): + """Gets the rust-libclang revisions from DEPS content.""" + regex = re.compile( + r"^ 'object_name': '(.*)/rust-libclang-(.*)\.tar\.xz',$") + return _ExtractRevisions(deps_content, regex) + + +def _GetRustToolchainRevisions(deps_content): + """Gets the rust-toolchain revisions from DEPS content.""" + regex = re.compile( + r"^ 'object_name': '(.*)/rust-toolchain-(.*)\.tar\.xz',$") + return _ExtractRevisions(deps_content, regex) + + +def CheckDeps(deps_content): + """Checks that rust-libclang and rust-toolchain revisions match in DEPS.""" + libclang_revisions = _GetLibclangRevisions(deps_content) + if not libclang_revisions: + return 'Cannot parse rust-libclang revisions' + + rust_revisions = _GetRustToolchainRevisions(deps_content) + if not rust_revisions: + return 'Cannot parse rust-toolchain revisions' + + if libclang_revisions != rust_revisions: + return ('Mismatch between rust-libclang and rust-toolchain: ' + f'{libclang_revisions} vs. {rust_revisions}') + return None + + +def main(): + if len(sys.argv) != 2: + print('Wrong number of arguments') + return 0 + + deps_path = sys.argv[1] + with open(deps_path, 'r', encoding='utf-8') as f: + deps_content = f.read() + + error = CheckDeps(deps_content) + if error: + print(f'{deps_path}: {error}') + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/testing/tools/libclang_check_test.py b/testing/tools/libclang_check_test.py new file mode 100755 index 0000000000..b9c4b2f86c --- /dev/null +++ b/testing/tools/libclang_check_test.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +# Copyright 2026 The PDFium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Tests for libclang_check.""" + +import unittest + +from libclang_check import CheckDeps + + +class LibclangCheckTest(unittest.TestCase): + + def testSuccess(self): + deps = ''' +deps = { + 'third_party/llvm-libclang': { + 'objects': [ + { + 'object_name': 'Linux_x64/rust-libclang-1.tar.xz', + }, + { + 'object_name': 'Win/rust-libclang-1.tar.xz', + }, + ], + }, + 'third_party/rust-toolchain': { + 'objects': [ + { + 'object_name': 'Linux_x64/rust-toolchain-1.tar.xz', + }, + { + 'object_name': 'Win/rust-toolchain-1.tar.xz', + }, + ], + }, +} +''' + self.assertIsNone(CheckDeps(deps)) + + def testRevisionMismatch(self): + deps = ''' +deps = { + 'third_party/llvm-libclang': { + 'objects': [ + { + 'object_name': 'Linux_x64/rust-libclang-1.tar.xz', + }, + ], + }, + 'third_party/rust-toolchain': { + 'objects': [ + { + 'object_name': 'Linux_x64/rust-toolchain-2.tar.xz', + }, + ], + }, +} +''' + self.assertEqual( + 'Mismatch between rust-libclang and rust-toolchain: ' + "[('Linux_x64', '1')] vs. [('Linux_x64', '2')]", CheckDeps(deps)) + + def testMissingLibclang(self): + deps = ''' +deps = { + 'third_party/rust-toolchain': { + 'objects': [ + { + 'object_name': 'Linux_x64/rust-toolchain-1.tar.xz', + }, + ], + }, +} +''' + self.assertEqual('Cannot parse rust-libclang revisions', CheckDeps(deps)) + + def testMissingRustToolchain(self): + deps = ''' +deps = { + 'third_party/llvm-libclang': { + 'objects': [ + { + 'object_name': 'Linux_x64/rust-libclang-1.tar.xz', + }, + ], + }, +} +''' + self.assertEqual('Cannot parse rust-toolchain revisions', CheckDeps(deps)) + + +if __name__ == '__main__': + unittest.main() From 0a08d196ba51b1e85b90dd500533555613fefef0 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Mon, 5 Oct 2026 20:26:01 -0700 Subject: [PATCH 38/72] Add _run_roll_dep() helper to roll_pdfium_deps_test.py Deduplicate repeated roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, ...) calls across RollDepTest. This will be modified further in https://pdfium-review.googlesource.com/159750. Change-Id: I0964ecf6cbe8fc34d1b2c2da7d5223922327d851 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159970 Reviewed-by: Lei Zhang Commit-Queue: Andy Phan --- tools/roll_pdfium_deps_test.py | 94 +++++++++++++++------------------- 1 file changed, 40 insertions(+), 54 deletions(-) diff --git a/tools/roll_pdfium_deps_test.py b/tools/roll_pdfium_deps_test.py index c9bd7f4f84..d67df3b012 100644 --- a/tools/roll_pdfium_deps_test.py +++ b/tools/roll_pdfium_deps_test.py @@ -2445,107 +2445,104 @@ ''' +def _run_roll_dep(deps_entry): + return roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, deps_entry) + + class RollDepTest(unittest.TestCase): def testCipdDepsRolls(self): - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'gn_version') + success, message = _run_roll_dep('gn_version') self.assertTrue(success) self.assertEqual( 'CIPD gn_version: ' 'git_revision:5964f499767097d81dbe034e8b541c3988168073', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'siso_version') + success, message = _run_roll_dep('siso_version') self.assertTrue(success) self.assertEqual( 'CIPD siso_version: ' 'git_revision:49dcca5d2be985d8ac6d512e59ee59e315264fb8', message) def testCipdDepsRollsNothingToRoll(self): - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'android_ndk_version') + success, message = _run_roll_dep('android_ndk_version') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'cpython3_version') + success, message = _run_roll_dep('cpython3_version') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'ninja_version') + success, message = _run_roll_dep('ninja_version') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'reclient_version') + success, message = _run_roll_dep('reclient_version') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'result_adapter_revision') + success, message = _run_roll_dep('result_adapter_revision') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) def testGitDepsRollsToChromiumRevision(self): - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'gtest_revision') + success, message = _run_roll_dep('gtest_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/googletest/src ' '--roll-to 4fe3307fb2d9f86d19777c7eb0e4809e9694dde7 ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'icu_revision') + success, message = _run_roll_dep('icu_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/icu ' '--roll-to a86a32e67b8d1384b33f8fa48c83a6079b86f8cd ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'jpeg_turbo_revision') + success, message = _run_roll_dep('jpeg_turbo_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/libjpeg_turbo ' '--roll-to 6383cf609c1f63c18af0f59b2738caa0c6c7e379 ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'libcxx_revision') + success, message = _run_roll_dep('libcxx_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/libc++/src ' '--roll-to c5dd8ade977af3a7441bbf99a2dcac2d5820e702 ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'libcxxabi_revision') + success, message = _run_roll_dep('libcxxabi_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/libc++abi/src ' '--roll-to 83a852080747b9a362e8f9e361366b7a601f302c ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'libunwind_revision') + success, message = _run_roll_dep('libunwind_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/libunwind/src ' '--roll-to 88fc07ed143a5b3bbf45d430b72a4617ee9e235f ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'llvm_libc_revision') + success, message = _run_roll_dep('llvm_libc_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/llvm-libc/src ' '--roll-to 03f822d2a88c8f68f6a92c5cb3e79ccc3002e8a9 ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'nasm_source_revision') + success, message = _run_roll_dep('nasm_source_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/nasm ' '--roll-to af5eeeb054bebadfbb79c7bcd100a95e2ad4525f ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'v8_revision') + success, message = _run_roll_dep('v8_revision') self.assertTrue(success) self.assertEqual( 'roll-dep v8 ' @@ -2553,7 +2550,7 @@ def testGitDepsRollsToChromiumRevision(self): '--ignore-dirty-tree --no-log', message) def testGitDepsRollsToChromiumRevisionForFreeType(self): - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'freetype_revision') + success, message = _run_roll_dep('freetype_revision') self.assertTrue(success) self.assertEqual( 'third_party/freetype/roll-freetype.sh ' @@ -2561,104 +2558,93 @@ def testGitDepsRollsToChromiumRevisionForFreeType(self): '--ignore-dirty-tree --no-log', message) def testGitDepsRollsToChromiumRevisionNothingToRoll(self): - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'clang_format_revision') + success, message = _run_roll_dep('clang_format_revision') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'cpu_features_revision') + success, message = _run_roll_dep('cpu_features_revision') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'dragonbox_revision') + success, message = _run_roll_dep('dragonbox_revision') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'fast_float_revision') + success, message = _run_roll_dep('fast_float_revision') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'fp16_revision') + success, message = _run_roll_dep('fp16_revision') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'highway_revision') + success, message = _run_roll_dep('highway_revision') self.assertTrue(success) self.assertEqual('Revisions are the same.', message) def testGitDepsRollsToTipOfTree(self): - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'abseil_revision') + success, message = _run_roll_dep('abseil_revision') self.assertTrue(success) self.assertEqual( 'roll-dep third_party/abseil-cpp ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'brotli_revision') + success, message = _run_roll_dep('brotli_revision') self.assertTrue(success) self.assertEqual('roll-dep third_party/brotli --ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'build_revision') + success, message = _run_roll_dep('build_revision') self.assertTrue(success) self.assertEqual('roll-dep build --ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'buildtools_revision') + success, message = _run_roll_dep('buildtools_revision') self.assertTrue(success) self.assertEqual('roll-dep buildtools --ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'clang_revision') + success, message = _run_roll_dep('clang_revision') self.assertTrue(success) self.assertEqual('roll-dep tools/clang --ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'partition_allocator_revision') + success, message = _run_roll_dep('partition_allocator_revision') self.assertTrue(success) self.assertEqual( 'roll-dep base/allocator/partition_allocator ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'rust_revision') + success, message = _run_roll_dep('rust_revision') self.assertTrue(success) self.assertEqual('roll-dep third_party/rust --ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'testing_rust_revision') + success, message = _run_roll_dep('testing_rust_revision') self.assertTrue(success) self.assertEqual( 'roll-dep testing/scripts/rust ' '--ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'tools_rust_revision') + success, message = _run_roll_dep('tools_rust_revision') self.assertTrue(success) self.assertEqual('roll-dep tools/rust --ignore-dirty-tree --no-log', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'tools_win_revision') + success, message = _run_roll_dep('tools_win_revision') self.assertTrue(success) self.assertEqual('roll-dep tools/win --ignore-dirty-tree --no-log', message) def testInvalidEntry(self): - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, 'invalid') + success, message = _run_roll_dep('invalid') self.assertFalse(success) self.assertEqual('Entry "invalid" not found in PDFium DEPS.', message) def testUnsupportedEntry(self): - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'pdfium_tests_revision') + success, message = _run_roll_dep('pdfium_tests_revision') self.assertFalse(success) self.assertEqual('Rolling pdfium_tests_revision is not supported.', message) - success, message = roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, - 'test_fonts_revision') + success, message = _run_roll_dep('test_fonts_revision') self.assertFalse(success) self.assertEqual('Rolling test_fonts_revision is not supported.', message) From 84f950b4793b26b916db8853791f3475b826fdc7 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Mon, 5 Oct 2026 20:26:07 -0700 Subject: [PATCH 39/72] Support GCS dependencies in roll_pdfium_deps.py tools/roll_pdfium_deps.py previously only checked vars-based git and CIPD dependencies in DEPS. GCS dependencies (third_party/llvm-build/Release+Asserts, third_party/llvm-libclang, and third_party/rust-toolchain) are defined directly in deps and must be rolled in sync with Clang and Rust toolchain updates. To use this, pass a GCS dependency path (e.g., third_party/llvm-libclang) or ALL as the deps_entry argument to `tools/roll_pdfium_deps.py ` to compare its objects list against Chromium's DEPS and print the roll_downstream_gcs_deps.py command needed to update it. Change-Id: I2e9ed6d3bab67b2306d52eef1c1b7c1acf818946 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159750 Commit-Queue: Andy Phan Reviewed-by: Lei Zhang --- tools/roll_pdfium_deps.py | 60 ++++++++++++++++++--- tools/roll_pdfium_deps_test.py | 97 +++++++++++++++++++++++++++++++++- 2 files changed, 148 insertions(+), 9 deletions(-) diff --git a/tools/roll_pdfium_deps.py b/tools/roll_pdfium_deps.py index f72b1a4eb8..6fb3684776 100755 --- a/tools/roll_pdfium_deps.py +++ b/tools/roll_pdfium_deps.py @@ -41,6 +41,9 @@ 'siso_version', 'skia_revision', 'testing_rust_revision', + 'third_party/llvm-build/Release+Asserts', + 'third_party/llvm-libclang', + 'third_party/rust-toolchain', 'tools_rust_revision', 'tools_win_revision', 'v8_revision', @@ -88,10 +91,46 @@ def get_revision_from_dep_value(dep_value): return None -def roll_dep_impl(chromium_deps_parser, pdfium_deps_parser, deps_entry): +def roll_gcs_dep_impl(chromium_deps_parser, pdfium_deps_parser, deps_entry, + chromium_deps_file, pdfium_deps_file): + pdfium_dep_value = pdfium_deps_parser.deps.get(deps_entry) + pdfium_objects = pdfium_dep_value.get('objects') + if not pdfium_objects: + return (False, f'GCS entry "{deps_entry}" has no objects in PDFium DEPS.') + + chromium_path = 'src/' + deps_entry + chromium_dep_value = chromium_deps_parser.deps.get(chromium_path) + if not isinstance(chromium_dep_value, + dict) or (chromium_dep_value.get('dep_type') != 'gcs'): + return (False, f'GCS entry "{deps_entry}" not found in Chromium DEPS.') + + chromium_objects = chromium_dep_value.get('objects') + if not chromium_objects: + return (False, f'GCS entry "{deps_entry}" has no objects in Chromium DEPS.') + + if chromium_objects == pdfium_objects: + return (True, 'Revisions are the same.') + + return ( + True, + f'roll_downstream_gcs_deps.py --source-deps {chromium_deps_file} ' + f'--destination-deps {pdfium_deps_file} ' + f'--source-package {chromium_path} --destination-package {deps_entry}', + ) + + +def roll_dep_impl(chromium_deps_parser, pdfium_deps_parser, deps_entry, + chromium_deps_file, pdfium_deps_file): if deps_entry in UNSUPPORTED_ENTRIES: return (False, f'Rolling {deps_entry} is not supported.') + if deps_entry in pdfium_deps_parser.deps: + pdfium_dep_value = pdfium_deps_parser.deps.get(deps_entry) + if isinstance(pdfium_dep_value, dict) and (pdfium_dep_value.get('dep_type') + == 'gcs'): + return roll_gcs_dep_impl(chromium_deps_parser, pdfium_deps_parser, + deps_entry, chromium_deps_file, pdfium_deps_file) + # In PDFium DEPS, only search vars for the entry. if deps_entry not in pdfium_deps_parser.vars: return (False, f'Entry "{deps_entry}" not found in PDFium DEPS.') @@ -143,19 +182,23 @@ def roll_dep_impl(chromium_deps_parser, pdfium_deps_parser, deps_entry): '--ignore-dirty-tree --no-log') -def roll_dep(chromium_deps_content, pdfium_deps_content, deps_entry): +def roll_dep(chromium_deps_content, pdfium_deps_content, deps_entry, + chromium_deps_file, pdfium_deps_file): chromium_deps_parser = DepsParser(chromium_deps_content) pdfium_deps_parser = DepsParser(pdfium_deps_content) - return roll_dep_impl(chromium_deps_parser, pdfium_deps_parser, deps_entry) + return roll_dep_impl(chromium_deps_parser, pdfium_deps_parser, deps_entry, + chromium_deps_file, pdfium_deps_file) -def roll_all_deps(chromium_deps_content, pdfium_deps_content): +def roll_all_deps(chromium_deps_content, pdfium_deps_content, + chromium_deps_file, pdfium_deps_file): chromium_deps_parser = DepsParser(chromium_deps_content) pdfium_deps_parser = DepsParser(pdfium_deps_content) messages = [] for deps_entry in ALL_DEPS_ENTRIES: success, message = roll_dep_impl(chromium_deps_parser, pdfium_deps_parser, - deps_entry) + deps_entry, chromium_deps_file, + pdfium_deps_file) if not success: return (False, message) @@ -186,7 +229,9 @@ def main(): if args.deps_entry == 'ALL': success, maybe_messages = roll_all_deps(chromium_deps_content, - pdfium_deps_content) + pdfium_deps_content, + args.chromium_deps_file, + args.pdfium_deps_file) if not success: print(maybe_messages, file=sys.stderr) return 1 @@ -196,7 +241,8 @@ def main(): return 0 success, message = roll_dep(chromium_deps_content, pdfium_deps_content, - args.deps_entry) + args.deps_entry, args.chromium_deps_file, + args.pdfium_deps_file) if not success: print(message, file=sys.stderr) return 1 diff --git a/tools/roll_pdfium_deps_test.py b/tools/roll_pdfium_deps_test.py index d67df3b012..7d0987eb71 100644 --- a/tools/roll_pdfium_deps_test.py +++ b/tools/roll_pdfium_deps_test.py @@ -784,6 +784,40 @@ }, ], }, + 'src/third_party/llvm-libclang': { + 'dep_type': 'gcs', + 'bucket': 'chromium-browser-clang', + 'objects': [ + { + 'object_name': 'Linux_x64/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': 'b251621641190cdab7d23c4a47257e4e1f1f335c34c9676118940fa562bb66ff', + 'size_bytes': 22776236, + 'generation': 1790798150313742, + 'condition': 'host_os == "linux" and non_git_source', + }, + { + 'object_name': 'Mac/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '4f7e9d166ad2ced03b9d5c66f2a919fefce5127d03dbe93661a0d012c1dda9ef', + 'size_bytes': 22924716, + 'generation': 1790798154061688, + 'condition': 'host_os == "mac" and host_cpu == "x64"', + }, + { + 'object_name': 'Mac_arm64/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '444cfa9bd9d3cda991943c9743f1992004b1f50d6641372b5ff9103d9a4db478', + 'size_bytes': 20588924, + 'generation': 1790798157457698, + 'condition': 'host_os == "mac" and host_cpu == "arm64"', + }, + { + 'object_name': 'Win/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': 'e8bb31ac1bded5c1fce08567a8a1a8f304213cceeee7384c2cba844dcaddfd20', + 'size_bytes': 21527244, + 'generation': 1790798161045212, + 'condition': 'host_os == "win"', + }, + ], + }, 'src/third_party/clang-format/script': Var('chromium_git') + '/external/github.com/llvm/llvm-project/clang/tools/clang-format.git@' + @@ -2080,6 +2114,41 @@ Var('chromium_git') + '/external/github.com/llvm/llvm-project/libc.git@' + Var('llvm_libc_revision'), + 'third_party/llvm-libclang': { + 'dep_type': 'gcs', + 'bucket': 'chromium-browser-clang', + 'objects': [ + { + 'object_name': 'Linux_x64/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': 'b251621641190cdab7d23c4a47257e4e1f1f335c34c9676118940fa562bb66ff', + 'size_bytes': 22776236, + 'generation': 1790798150313742, + 'condition': 'host_os == "linux" and non_git_source', + }, + { + 'object_name': 'Mac/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '4f7e9d166ad2ced03b9d5c66f2a919fefce5127d03dbe93661a0d012c1dda9ef', + 'size_bytes': 22924716, + 'generation': 1790798154061688, + 'condition': 'host_os == "mac" and host_cpu == "x64"', + }, + { + 'object_name': 'Mac_arm64/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': '444cfa9bd9d3cda991943c9743f1992004b1f50d6641372b5ff9103d9a4db478', + 'size_bytes': 20588924, + 'generation': 1790798157457698, + 'condition': 'host_os == "mac" and host_cpu == "arm64"', + }, + { + 'object_name': 'Win/rust-libclang-1edd55dcfcd573872c727fa3e086369a71661ee0-1110-llvmorg-24-init-7747-g62397f8b.tar.xz', + 'sha256sum': 'e8bb31ac1bded5c1fce08567a8a1a8f304213cceeee7384c2cba844dcaddfd20', + 'size_bytes': 21527244, + 'generation': 1790798161045212, + 'condition': 'host_os == "win"', + }, + ], + }, + 'third_party/markupsafe': Var('chromium_git') + '/chromium/src/third_party/markupsafe.git@' + Var('markupsafe_revision'), @@ -2446,7 +2515,8 @@ def _run_roll_dep(deps_entry): - return roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, deps_entry) + return roll_dep(CHROMIUM_DEPS, PDFIUM_DEPS, deps_entry, 'CHROMIUM_DEPS', + 'DEPS') class RollDepTest(unittest.TestCase): @@ -2485,6 +2555,24 @@ def testCipdDepsRollsNothingToRoll(self): self.assertTrue(success) self.assertEqual('Revisions are the same.', message) + def testGcsDepsRolls(self): + success, message = _run_roll_dep('third_party/llvm-build/Release+Asserts') + self.assertTrue(success) + self.assertEqual( + 'roll_downstream_gcs_deps.py ' + '--source-deps CHROMIUM_DEPS --destination-deps DEPS ' + '--source-package src/third_party/llvm-build/Release+Asserts ' + '--destination-package third_party/llvm-build/Release+Asserts', message) + + def testGcsDepsRollsNothingToRoll(self): + success, message = _run_roll_dep('third_party/llvm-libclang') + self.assertTrue(success) + self.assertEqual('Revisions are the same.', message) + + success, message = _run_roll_dep('third_party/rust-toolchain') + self.assertTrue(success) + self.assertEqual('Revisions are the same.', message) + def testGitDepsRollsToChromiumRevision(self): success, message = _run_roll_dep('gtest_revision') self.assertTrue(success) @@ -2699,13 +2787,18 @@ def testRollAll(self): '--roll-to 83b0b9e6065a60617504aa1d6e6997c511c3afac ' '--ignore-dirty-tree --no-log', 'roll-dep testing/scripts/rust --ignore-dirty-tree --no-log', + 'roll_downstream_gcs_deps.py ' + '--source-deps CHROMIUM_DEPS --destination-deps DEPS ' + '--source-package src/third_party/llvm-build/Release+Asserts ' + '--destination-package third_party/llvm-build/Release+Asserts', 'roll-dep tools/rust --ignore-dirty-tree --no-log', 'roll-dep tools/win --ignore-dirty-tree --no-log', 'roll-dep v8 --roll-to 5bd40de12569247beb113659504906aa41e48959 ' '--ignore-dirty-tree --no-log', ] - success, message = roll_all_deps(CHROMIUM_DEPS, PDFIUM_DEPS) + success, message = roll_all_deps(CHROMIUM_DEPS, PDFIUM_DEPS, + 'CHROMIUM_DEPS', 'DEPS') self.assertTrue(success) self.assertEqual(EXPECTED_ALL, message) From 88d0b7025f18371b44a899dc8a24f596f1fd53d9 Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Mon, 5 Oct 2026 22:29:21 -0700 Subject: [PATCH 40/72] Use libyuv::RGB24ToRAW in fxcodec::ReverseRGB Benchmarks Native Performance (2048x200 RGB24, Coral NPU RVV 2048 px): CPU Before libyuv Speedup --------------------------------------------------------- AMD Zen 4 (AVX512VBMI) 240.8 us 29.7 us 8.10x AMD Zen 5 (AVX512VBMI) 171.5 us 21.7 us 7.91x AMD Zen 2 (AVX2) 377.1 us 67.4 us 5.60x AMD Zen 3 (AVX2) 284.1 us 52.5 us 5.41x ARM Cortex-A53 (NEON) 3613.3 us 774.2 us 4.67x Intel Skylake-X (AVX512) 432.6 us 95.8 us 4.52x Intel Emerald Rapids 265.2 us 66.8 us 3.97x Intel Ice Lake (AVX512) 307.2 us 78.0 us 3.94x Intel Haswell (AVX2) 419.9 us 106.5 us 3.94x Intel Granite Rapids 189.8 us 52.1 us 3.64x Intel Sapphire Rapids 204.1 us 60.4 us 3.38x ARM Neoverse-N1 (NEON) 90.2 us 61.5 us 1.47x NVIDIA Grace (SVE2) 39.5 us 39.0 us 1.01x ARM Neoverse-V2 (SVE2) 31.4 us 33.6 us 0.93x Google Coral NPU (RVV) 30736 cyc 1664 cyc 18.47x WebAssembly Performance (2048x200 RGB24, V8 d8, SIMD128): CPU Before libyuv Speedup --------------------------------------------------------- ARM Neoverse-V2 293.1 us 42.1 us 6.96x NVIDIA Grace 283.6 us 41.3 us 6.86x ARM Neoverse-N1 438.2 us 85.2 us 5.15x AMD Zen 2 403.5 us 79.1 us 5.10x AMD Zen 3 334.2 us 66.7 us 5.01x AMD Zen 4 293.1 us 61.7 us 4.75x Intel Ice Lake 387.9 us 87.6 us 4.43x Intel Skylake-X 495.1 us 115.2 us 4.30x AMD Zen 5 172.2 us 45.2 us 3.81x Intel Emerald Rapids 311.8 us 84.6 us 3.68x Intel Sapphire Rapids 246.6 us 72.9 us 3.38x Intel Granite Rapids 199.9 us 63.1 us 3.17x Intel Haswell 470.4 us 157.7 us 2.98x ARM Cortex-A53 5512.9 us 2753.3 us 2.00x Add a pdf_use_libyuv GN build argument (enabled by default) that defines PDF_USE_LIBYUV and links //third_party/libyuv into core/fxcodec. When PDF_USE_LIBYUV is enabled, fxcodec::ReverseRGB() delegates 24-bpp RGB-to-BGR conversion to libyuv::RGB24ToRAW() instead of the scalar loop. When pdf_use_libyuv is set to false, fxcodec::ReverseRGB() falls back to the existing C++ implementation. Change-Id: I450490a81d74c7da5bbbe646b74b812f734a4226 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159396 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- .gn | 4 ++++ BUILD.gn | 4 ++++ DEPS | 7 +++++++ core/fxcodec/BUILD.gn | 4 ++++ core/fxcodec/DEPS | 3 +++ core/fxcodec/fx_codec.cpp | 17 ++++++++++++++--- pdfium.gni | 3 +++ third_party/BUILD.gn | 5 +++++ 8 files changed, 44 insertions(+), 3 deletions(-) diff --git a/.gn b/.gn index 13ba5d1c1e..33179129c2 100644 --- a/.gn +++ b/.gn @@ -53,6 +53,10 @@ default_args = { # Adds -Wexit-time-destructors check to match Chromium. is_wexit_time_destructors_default = true + + # Avoid pulling libjpeg_turbo into libyuv in standalone builds. + libyuv_disable_jpeg = true + libyuv_include_tests = false } no_check_targets = [ diff --git a/BUILD.gn b/BUILD.gn index 6c29783ee9..5c6d2060a8 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -60,6 +60,10 @@ config("pdfium_common_config") { defines += [ "PDF_USE_PARTITION_ALLOC" ] } + if (pdf_use_libyuv) { + defines += [ "PDF_USE_LIBYUV" ] + } + if (is_win) { # Assume UTF-8 by default to avoid code page dependencies. cflags += [ "/utf-8" ] diff --git a/DEPS b/DEPS index 3f9f0cdb9b..5dffa8d053 100644 --- a/DEPS +++ b/DEPS @@ -202,6 +202,10 @@ vars = { # and whatever else without interference from each other. 'libunwind_revision': 'eb1ca4993b534b7d565daee144bbc7f9072b967b', # Three lines of non-changing comments so that + # the commit queue can handle CLs rolling libyuv + # and whatever else without interference from each other. + 'libyuv_revision': 'eb8eda9c7973704d1103a535059224df7a6063b5', + # Three lines of non-changing comments so that # the commit queue can handle CLs rolling llvm-libc # and whatever else without interference from each other. 'llvm_libc_revision': '14e51fd2cd7ec21294f18a3a0b2fc5339afea271', @@ -493,6 +497,9 @@ deps = { 'condition': 'checkout_libpng', }, + 'third_party/libyuv': + Var('chromium_git') + '/libyuv/libyuv.git@' + Var('libyuv_revision'), + 'third_party/llvm-build/Release+Asserts': { 'dep_type': 'gcs', 'bucket': 'chromium-browser-clang', diff --git a/core/fxcodec/BUILD.gn b/core/fxcodec/BUILD.gn index 3870f6da54..c48a8daa2b 100644 --- a/core/fxcodec/BUILD.gn +++ b/core/fxcodec/BUILD.gn @@ -245,6 +245,10 @@ source_set("fxcodec") { ] deps += [ "//third_party:jpeg" ] } + + if (pdf_use_libyuv) { + deps += [ "//third_party/libyuv" ] + } visibility = [ "../../*" ] } diff --git a/core/fxcodec/DEPS b/core/fxcodec/DEPS index b19b06b0db..143f6899cc 100644 --- a/core/fxcodec/DEPS +++ b/core/fxcodec/DEPS @@ -5,4 +5,7 @@ specific_include_rules = { "codec_memory_sk_stream_unittest\.cpp": [ '+third_party/skia/include', ], + "fx_codec\.cpp": [ + '+third_party/libyuv/include/libyuv/planar_functions.h', + ], } diff --git a/core/fxcodec/fx_codec.cpp b/core/fxcodec/fx_codec.cpp index 7a526c9a48..3eef9272a7 100644 --- a/core/fxcodec/fx_codec.cpp +++ b/core/fxcodec/fx_codec.cpp @@ -6,13 +6,18 @@ #include "core/fxcodec/fx_codec.h" -#include - #include "core/fxcrt/numerics/safe_conversions.h" #include "core/fxcrt/span_util.h" -#include "core/fxcrt/zip.h" #include "core/fxge/dib/fx_dib.h" +#if defined(PDF_USE_LIBYUV) +#include "third_party/libyuv/include/libyuv/planar_functions.h" +#else +#include + +#include "core/fxcrt/zip.h" +#endif + #if BUILDFLAG(IS_WIN) #include "core/fxcodec/basic/basicmodule.h" #include "core/fxcodec/fax/faxmodule.h" @@ -50,6 +55,11 @@ void ReverseRGB(pdfium::span pDestBuf, fxcrt::reinterpret_span>(pSrcBuf).first( count); +#if defined(PDF_USE_LIBYUV) + libyuv::RGB24ToRAW(pdfium::as_bytes(src_span).data(), pixels * 3, + pdfium::as_writable_bytes(dst_span).data(), pixels * 3, + pixels, 1); +#else if (dst_span.data() == src_span.data()) { for (auto& pix : dst_span) { std::swap(pix.red, pix.blue); @@ -66,6 +76,7 @@ void ReverseRGB(pdfium::span pDestBuf, dst_pix.green = green; dst_pix.blue = red; } +#endif } void RegisterEncoders() { diff --git a/pdfium.gni b/pdfium.gni index 7549afa01e..4d001c2da9 100644 --- a/pdfium.gni +++ b/pdfium.gni @@ -38,6 +38,9 @@ declare_args() { # Build PDFium to use AGG (fully supported). pdf_use_agg = true + # Build PDFium to use libyuv for SIMD pixel format conversions. + pdf_use_libyuv = true + # Build PDFium to use Skia (experimental) for all PDFium graphics. # If `pdf_use_agg` is enabled as well, coexists in build with AGG graphics # and the default renderer is selectable at runtime. diff --git a/third_party/BUILD.gn b/third_party/BUILD.gn index cb24885dc6..98bd9d8d7b 100644 --- a/third_party/BUILD.gn +++ b/third_party/BUILD.gn @@ -347,6 +347,11 @@ if (!build_with_chromium) { public_deps = [ "//third_party/libjpeg" ] } } + + # Stub target for //third_party/libyuv, which references + # //third_party:jpeg_includes when libyuv_disable_jpeg is false. + group("jpeg_includes") { + } } config("system_zlib_config") { From 72f228ef81d1e623024c814380af6d5afb882037 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Tue, 6 Oct 2026 08:04:55 -0700 Subject: [PATCH 41/72] Roll third_party/freetype/src/ 4800589f7..b76738eff (7 commits) https://chromium.googlesource.com/chromium/src/third_party/freetype2.git/+log/4800589f76dc..b76738eff2f3 Created with: roll-dep third_party/freetype/src Partial roll, since the next commit causes test expectations to fail. Change-Id: I2dbc014a1ae59afb44402298fccb07c47eea804e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159491 Reviewed-by: Lei Zhang Commit-Queue: Andy Phan --- DEPS | 2 +- third_party/freetype/README.pdfium | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DEPS b/DEPS index 5dffa8d053..8b1b554db3 100644 --- a/DEPS +++ b/DEPS @@ -146,7 +146,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': '4800589f76dc62fbe523a74a59e0d4850a5dd7df', + 'freetype_revision': 'b76738eff2f3846721f76f023cbb471396932669', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling GN CIPD package version # and whatever else without interference from each other. diff --git a/third_party/freetype/README.pdfium b/third_party/freetype/README.pdfium index 43e7bf72c9..486f3b6cde 100644 --- a/third_party/freetype/README.pdfium +++ b/third_party/freetype/README.pdfium @@ -1,7 +1,7 @@ Name: FreeType URL: https://gitlab.freedesktop.org/freetype/freetype -Version: VER-2-14-3-85 -Revision: 4800589f76dc62fbe523a74a59e0d4850a5dd7df +Version: VER-2-14-3-92 +Revision: b76738eff2f3846721f76f023cbb471396932669 Update Mechanism: Manual CPEPrefix: cpe:/a:freetype:freetype:2.14.3 Security Critical: yes From c585d039f9ccb589286abb55e3338836b44f243d Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Tue, 6 Oct 2026 13:10:34 -0700 Subject: [PATCH 42/72] Use libyuv in CompositeRow_Bgr2Bgra_NoBlend_NoClip When PDF_USE_LIBYUV is enabled, delegate 24-bpp kBgr-to-kBgra scanline compositing in CompositeRow_Bgr2Bgra_NoBlend_NoClip() to libyuv::RGB24ToARGB() (for BGRA output) and libyuv::RAWToARGB() (for RGBA byte-order output), achieving a 6.11x speedup on 2048-pixel rows while remaining bit-exact. When pdf_use_libyuv is false, fall back to CopyRowToOpaqueBgra(). Change-Id: I2bc681d995874f1c0333bd6fad0e151f35e54933 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160031 Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang --- core/fxge/BUILD.gn | 4 ++ core/fxge/DEPS | 5 ++ core/fxge/dib/cfx_scanlinecompositor.cpp | 28 ++++++++-- .../dib/cfx_scanlinecompositor_unittest.cpp | 54 +++++++++++++++++++ 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn index e68c2d740b..2622e865b3 100644 --- a/core/fxge/BUILD.gn +++ b/core/fxge/BUILD.gn @@ -141,6 +141,10 @@ source_set("fxge") { deps += [ "../../third_party:fx_agg" ] } + if (pdf_use_libyuv) { + deps += [ "//third_party/libyuv" ] + } + if (pdf_use_skia) { sources += [ "skia/cfx_dibbase_skia.cpp", diff --git a/core/fxge/DEPS b/core/fxge/DEPS index 5f0bc43fc7..28ca37542a 100644 --- a/core/fxge/DEPS +++ b/core/fxge/DEPS @@ -3,3 +3,8 @@ include_rules = [ '+third_party/skia/include', ] +specific_include_rules = { + "cfx_scanlinecompositor\.cpp": [ + '+third_party/libyuv/include/libyuv/convert_argb.h', + ], +} diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp index 498f80a929..fd7864330f 100644 --- a/core/fxge/dib/cfx_scanlinecompositor.cpp +++ b/core/fxge/dib/cfx_scanlinecompositor.cpp @@ -7,21 +7,25 @@ #include "core/fxge/dib/cfx_scanlinecompositor.h" #include +#include #include "core/fxcrt/check.h" #include "core/fxcrt/check_op.h" #include "core/fxcrt/compiler_specific.h" #include "core/fxcrt/fx_memcpy_wrappers.h" #include "core/fxcrt/notreached.h" +#include "core/fxcrt/numerics/safe_conversions.h" #include "core/fxcrt/span_util.h" #include "core/fxcrt/stl_util.h" #include "core/fxcrt/zip.h" #include "core/fxge/dib/blend.h" #include "core/fxge/dib/fx_dib.h" -#if defined(PDF_USE_SKIA) -#include +#if defined(PDF_USE_LIBYUV) +#include "third_party/libyuv/include/libyuv/convert_argb.h" +#endif +#if defined(PDF_USE_SKIA) #include "third_party/skia/include/core/SkBlendMode.h" // nogncheck #include "third_party/skia/include/core/SkCanvas.h" // nogncheck #include "third_party/skia/include/core/SkImage.h" // nogncheck @@ -440,9 +444,23 @@ void CompositeRow_Bgr2Bgra_NoBlend_NoClip( int src_Bpp) { const size_t width = dest_span.size(); if (src_Bpp == 3) { - CopyRowToOpaqueBgra(dest_span, - fxcrt::reinterpret_span>( - src_span.first(width * 3))); + auto bgr_span = fxcrt::reinterpret_span>( + src_span.first(width * 3)); +#if defined(PDF_USE_LIBYUV) + const int pixel_count = pdfium::checked_cast(width); + const uint8_t* src_bytes = pdfium::as_bytes(bgr_span).data(); + uint8_t* dest_bytes = pdfium::as_writable_bytes(dest_span).data(); + if constexpr (std::is_same_v>) { + libyuv::RGB24ToARGB(src_bytes, pixel_count * 3, dest_bytes, + pixel_count * 4, pixel_count, 1); + } else { + static_assert(std::is_same_v>); + libyuv::RAWToARGB(src_bytes, pixel_count * 3, dest_bytes, pixel_count * 4, + pixel_count, 1); + } +#else + CopyRowToOpaqueBgra(dest_span, bgr_span); +#endif return; } CHECK_EQ(src_Bpp, 4); diff --git a/core/fxge/dib/cfx_scanlinecompositor_unittest.cpp b/core/fxge/dib/cfx_scanlinecompositor_unittest.cpp index 6b78d29ce0..cb2ba0d8e3 100644 --- a/core/fxge/dib/cfx_scanlinecompositor_unittest.cpp +++ b/core/fxge/dib/cfx_scanlinecompositor_unittest.cpp @@ -856,3 +856,57 @@ TEST(ScanlineCompositorTest, CompositeRgbBitmapLineBgraPremulLuminosity) { RunPreMultiplyTest(compositor, kSrcScan3, kExpectations3); } #endif // defined(PDF_USE_SKIA) + +TEST(ScanlineCompositorTest, CompositeRgbBitmapLineBgrToBgraNormal) { + static constexpr FX_BGR_STRUCT kBgrSrc[] = { + {.blue = 10, .green = 20, .red = 30}, + {.blue = 40, .green = 50, .red = 60}, + {.blue = 70, .green = 80, .red = 90}, + {.blue = 100, .green = 110, .red = 120}, + {.blue = 130, .green = 140, .red = 150}, + }; + + { + CFX_ScanlineCompositor compositor; + ASSERT_TRUE(compositor.Init(/*dest_format=*/FXDIB_Format::kBgra, + /*src_format=*/FXDIB_Format::kBgr, + /*src_palette=*/{}, + /*mask_color=*/0, + /*blend_type=*/BlendMode::kNormal, + /*bRgbByteOrder=*/false)); + std::array, 5> dest_scan = {}; + compositor.CompositeRgbBitmapLine(pdfium::as_writable_byte_span(dest_scan), + pdfium::as_byte_span(kBgrSrc), + dest_scan.size(), {}); + static constexpr FX_BGRA_STRUCT kExpectedBgra[] = { + {.blue = 10, .green = 20, .red = 30, .alpha = 255}, + {.blue = 40, .green = 50, .red = 60, .alpha = 255}, + {.blue = 70, .green = 80, .red = 90, .alpha = 255}, + {.blue = 100, .green = 110, .red = 120, .alpha = 255}, + {.blue = 130, .green = 140, .red = 150, .alpha = 255}, + }; + EXPECT_THAT(dest_scan, ElementsAreArray(kExpectedBgra)); + } + + { + CFX_ScanlineCompositor compositor; + ASSERT_TRUE(compositor.Init(/*dest_format=*/FXDIB_Format::kBgra, + /*src_format=*/FXDIB_Format::kBgr, + /*src_palette=*/{}, + /*mask_color=*/0, + /*blend_type=*/BlendMode::kNormal, + /*bRgbByteOrder=*/true)); + std::array, 5> dest_scan = {}; + compositor.CompositeRgbBitmapLine(pdfium::as_writable_byte_span(dest_scan), + pdfium::as_byte_span(kBgrSrc), + dest_scan.size(), {}); + static constexpr FX_BGRA_STRUCT kExpectedRgba[] = { + {.blue = 30, .green = 20, .red = 10, .alpha = 255}, + {.blue = 60, .green = 50, .red = 40, .alpha = 255}, + {.blue = 90, .green = 80, .red = 70, .alpha = 255}, + {.blue = 120, .green = 110, .red = 100, .alpha = 255}, + {.blue = 150, .green = 140, .red = 130, .alpha = 255}, + }; + EXPECT_THAT(dest_scan, ElementsAreArray(kExpectedRgba)); + } +} From 321be12a4988a9fed3635ac06bc6ec7de3179e33 Mon Sep 17 00:00:00 2001 From: Jan Wytze Zuidema Date: Tue, 6 Oct 2026 15:20:08 -0700 Subject: [PATCH 43/72] Fix "re" output for rectangle paths with redundant points CPDF_PageContentGenerator::ProcessPathPoints() and OutputPath() in fpdf_transformpage.cpp write a rectangle path as "re", using GetPoints()[0] and GetPoints()[2] as opposite corners. CFX_Path::IsRect() first normalizes paths with more than 5 points by dropping duplicate points, so GetPoints()[2] is not always the opposite corner. For example, "0 0 m 0 0 l 2 0 l 2 1 l 0 1 l 0 0 l" is written as "0 0 2 0 re", which is an empty rectangle. Add CFX_Path::GetRectOppositeCorner(), which returns the opposite corner of the normalized points, and use it in both places. The output does not change for paths with 4 or 5 points. Bug: 570412111 Change-Id: I10d960bb3ab6e892f4d9a0ec214f22cdac0cc0b9 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160011 Reviewed-by: Tom Sepez Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang --- AUTHORS | 1 + .../edit/cpdf_pagecontentgenerator.cpp | 5 ++-- .../cpdf_pagecontentgenerator_unittest.cpp | 13 ++++++++++ core/fpdfapi/page/cpdf_path.cpp | 4 ++++ core/fpdfapi/page/cpdf_path.h | 2 ++ core/fxge/cfx_path.cpp | 17 +++++++++++++ core/fxge/cfx_path.h | 5 ++++ core/fxge/cfx_path_unittest.cpp | 24 +++++++++++++++++++ fpdfsdk/fpdf_transformpage.cpp | 6 +++-- 9 files changed, 73 insertions(+), 4 deletions(-) diff --git a/AUTHORS b/AUTHORS index 0d44ac783a..00880613db 100644 --- a/AUTHORS +++ b/AUTHORS @@ -29,6 +29,7 @@ Haoran Tang Helmut Januschka Huy Ngo Ivan Odulo +Jan Wytze Zuidema Jeroen Bobbeldijk Jiang Jiang Jimin Lee diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp index b70ec55c05..207468f9b4 100644 --- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp +++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp @@ -741,8 +741,9 @@ void CPDF_PageContentGenerator::ProcessForm(fxcrt::ostringstream* buf, void CPDF_PageContentGenerator::ProcessPathPoints(fxcrt::ostringstream* buf, CPDF_Path* pPath) { pdfium::span points = pPath->GetPoints(); - if (pPath->IsRect()) { - CFX_PointF diff = points[2].point_ - points[0].point_; + std::optional corner = pPath->GetRectOppositeCorner(); + if (corner.has_value()) { + CFX_PointF diff = corner.value() - points[0].point_; WritePoint(*buf, points[0].point_) << " "; WritePoint(*buf, diff) << " re"; return; diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp index 9ccb871895..1074d87aba 100644 --- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp +++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp @@ -76,6 +76,19 @@ TEST_F(CPDFPageContentGeneratorTest, ProcessRect) { buf.str(""); TestProcessPath(&generator, &buf, pPathObj.get()); EXPECT_EQ("q 0 0 5.2 3.78 re n Q\n", ByteString(buf)); + + // A rectangle with a duplicate second point, so its third point is not the + // opposite corner. + pPathObj = std::make_unique(); + pPathObj->path().AppendPoint(CFX_PointF(0, 0), CFX_Path::Point::Type::kMove); + pPathObj->path().AppendPoint(CFX_PointF(0, 0), CFX_Path::Point::Type::kLine); + pPathObj->path().AppendPoint(CFX_PointF(2, 0), CFX_Path::Point::Type::kLine); + pPathObj->path().AppendPoint(CFX_PointF(2, 1), CFX_Path::Point::Type::kLine); + pPathObj->path().AppendPoint(CFX_PointF(0, 1), CFX_Path::Point::Type::kLine); + pPathObj->path().AppendPoint(CFX_PointF(0, 0), CFX_Path::Point::Type::kLine); + buf.str(""); + TestProcessPath(&generator, &buf, pPathObj.get()); + EXPECT_EQ("q 0 0 2 1 re n Q\n", ByteString(buf)); } TEST_F(CPDFPageContentGeneratorTest, Bug937) { diff --git a/core/fpdfapi/page/cpdf_path.cpp b/core/fpdfapi/page/cpdf_path.cpp index c300359494..74469b5ab5 100644 --- a/core/fpdfapi/page/cpdf_path.cpp +++ b/core/fpdfapi/page/cpdf_path.cpp @@ -37,6 +37,10 @@ bool CPDF_Path::IsRect() const { return ref_.GetObject()->IsRect(); } +std::optional CPDF_Path::GetRectOppositeCorner() const { + return ref_.GetObject()->GetRectOppositeCorner(); +} + void CPDF_Path::Transform(const CFX_Matrix& matrix) { ref_.GetPrivateCopy()->Transform(matrix); } diff --git a/core/fpdfapi/page/cpdf_path.h b/core/fpdfapi/page/cpdf_path.h index 0745cc9597..ff5907ef9b 100644 --- a/core/fpdfapi/page/cpdf_path.h +++ b/core/fpdfapi/page/cpdf_path.h @@ -7,6 +7,7 @@ #ifndef CORE_FPDFAPI_PAGE_CPDF_PATH_H_ #define CORE_FPDFAPI_PAGE_CPDF_PATH_H_ +#include #include #include "core/fxcrt/shared_copy_on_write.h" @@ -30,6 +31,7 @@ class CPDF_Path { float miter_limit) const; bool IsRect() const; + std::optional GetRectOppositeCorner() const; void Transform(const CFX_Matrix& matrix); void Append(const CFX_Path& path, const CFX_Matrix* pMatrix); diff --git a/core/fxge/cfx_path.cpp b/core/fxge/cfx_path.cpp index 04ba1f75b5..d444a7aa4e 100644 --- a/core/fxge/cfx_path.cpp +++ b/core/fxge/cfx_path.cpp @@ -426,6 +426,23 @@ bool CFX_Path::IsRect() const { return IsRectImpl(points_); } +std::optional CFX_Path::GetRectOppositeCorner() const { + bool do_normalize = PathPointsNeedNormalization(points_); + std::vector normalized; + if (do_normalize) { + normalized = GetNormalizedPoints(points_); + } + const std::vector& path_points = do_normalize ? normalized : points_; + + if (!IsRectImpl(path_points)) { + return std::nullopt; + } + + // GetNormalizedPoints() keeps the first point, so this is also the opposite + // corner of `points_[0]`. + return path_points[2].point_; +} + std::optional CFX_Path::GetRect(const CFX_Matrix* matrix) const { bool do_normalize = PathPointsNeedNormalization(points_); std::vector normalized; diff --git a/core/fxge/cfx_path.h b/core/fxge/cfx_path.h index 3722c59538..b73faf856f 100644 --- a/core/fxge/cfx_path.h +++ b/core/fxge/cfx_path.h @@ -58,6 +58,11 @@ class CFX_Path { bool IsRect() const; std::optional GetRect(const CFX_Matrix* matrix) const; + // If IsRect(), returns the corner diagonally opposite to the first point. + // This is not always GetPoints()[2], because a rectangle can have points + // that do not change its shape. + std::optional GetRectOppositeCorner() const; + void Append(const CFX_Path& src, const CFX_Matrix* matrix); void AppendFloatRect(const CFX_FloatRect& rect); void AppendRect(float left, float bottom, float right, float top); diff --git a/core/fxge/cfx_path_unittest.cpp b/core/fxge/cfx_path_unittest.cpp index a1ec3c1dd5..1dc55ff108 100644 --- a/core/fxge/cfx_path_unittest.cpp +++ b/core/fxge/cfx_path_unittest.cpp @@ -249,6 +249,30 @@ TEST(CFXPath, SixPlusPointRect) { EXPECT_EQ(CFX_FloatRect(0, 0, 2, 1), path.GetBoundingBox()); } +TEST(CFXPath, GetRectOppositeCorner) { + CFX_Path path; + path.AppendRect(/*left=*/1, /*bottom=*/2, /*right=*/3, /*top=*/5); + EXPECT_EQ(CFX_PointF(3, 5), path.GetRectOppositeCorner()); + + // A duplicate point makes GetPoints()[2] a point on the first edge. + path.Clear(); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({0, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kLine); + ASSERT_EQ(CFX_PointF(2, 0), path.GetPoints()[2].point_); + EXPECT_EQ(CFX_PointF(2, 1), path.GetRectOppositeCorner()); + + path.Clear(); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); + path.AppendPoint({2, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({3, 1}, CFX_Path::Point::Type::kLine); + path.AppendPointAndClose({0, 1}, CFX_Path::Point::Type::kLine); + EXPECT_FALSE(path.GetRectOppositeCorner().has_value()); +} + TEST(CFXPath, NotRect) { CFX_Path path; path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp index bac53b588e..1dfdb95059 100644 --- a/fpdfsdk/fpdf_transformpage.cpp +++ b/fpdfsdk/fpdf_transformpage.cpp @@ -7,6 +7,7 @@ #include "public/fpdf_transformpage.h" #include +#include #include #include "constants/page_object.h" @@ -75,8 +76,9 @@ void OutputPath(fxcrt::ostringstream& buf, CPDF_Path path) { } pdfium::span points = pPath->GetPoints(); - if (path.IsRect()) { - CFX_PointF diff = points[2].point_ - points[0].point_; + std::optional corner = pPath->GetRectOppositeCorner(); + if (corner.has_value()) { + CFX_PointF diff = corner.value() - points[0].point_; buf << points[0].point_.x << " " << points[0].point_.y << " " << diff.x << " " << diff.y << " re\n"; return; From 58e11305710a506ce3369581662eeb14440639cf Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Tue, 6 Oct 2026 16:12:29 -0700 Subject: [PATCH 44/72] Correctly initialize current cell in agg::outline_aa Initialize `m_cur_cell` to (0x7FFFFFFF, 0x7FFFFFFF) instead of (0x7FFF, 0x7FFF) in outline_aa::outline_aa() and outline_aa::reset(), matching `m_min_x` and `m_min_y`. Previously, if a path started at cell (0x7FFF, 0x7FFF), outline_aa::set_cur_cell() treated the coordinates as unchanged and skipped updating `m_min_x`, `m_max_x`, `m_min_y`, and `m_max_y`. This left the bounds out of sync with the cells in `m_cells`, leading to out-of-bounds memory accesses in outline_aa::sort_cells() and rasterizer_scanline_aa::sweep_scanline(). Since cell coordinates passed to outline_aa::set_cur_cell() are shifted right by `poly_base_shift`, they can never equal 0x7FFFFFFF. This matches the equivalent code in newer versions of AGG. TAG=agy CONV=c8cb5ce3-fe6b-4ebe-8831-b653899043f0 Bug: 570167922 Change-Id: I5e06c418226e67ff7487e4e8bba6233402a4ea8e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160091 Commit-Queue: Lei Zhang Reviewed-by: Tom Sepez --- third_party/agg23/0018-outline_aa_reset.patch | 20 +++++++++++++++++++ third_party/agg23/README.pdfium | 1 + .../agg23/agg_rasterizer_scanline_aa.cpp | 4 ++-- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 third_party/agg23/0018-outline_aa_reset.patch diff --git a/third_party/agg23/0018-outline_aa_reset.patch b/third_party/agg23/0018-outline_aa_reset.patch new file mode 100644 index 0000000000..7d9c8d63fd --- /dev/null +++ b/third_party/agg23/0018-outline_aa_reset.patch @@ -0,0 +1,20 @@ +diff --git a/third_party/agg23/agg_rasterizer_scanline_aa.cpp b/third_party/agg23/agg_rasterizer_scanline_aa.cpp +index ed59cf0ffb..d561e02b58 100644 +--- a/third_party/agg23/agg_rasterizer_scanline_aa.cpp ++++ b/third_party/agg23/agg_rasterizer_scanline_aa.cpp +@@ -101,13 +101,13 @@ outline_aa::outline_aa() : + m_max_y(-0x7FFFFFFF), + m_sorted(false) + { +- m_cur_cell.set(0x7FFF, 0x7FFF, 0, 0); ++ m_cur_cell.set(0x7FFFFFFF, 0x7FFFFFFF, 0, 0); + } + void outline_aa::reset() + { + m_num_cells = 0; + m_cur_block = 0; +- m_cur_cell.set(0x7FFF, 0x7FFF, 0, 0); ++ m_cur_cell.set(0x7FFFFFFF, 0x7FFFFFFF, 0, 0); + m_sorted = false; + m_min_x = 0x7FFFFFFF; + m_min_y = 0x7FFFFFFF; diff --git a/third_party/agg23/README.pdfium b/third_party/agg23/README.pdfium index a40bb083d5..f0bc592d43 100644 --- a/third_party/agg23/README.pdfium +++ b/third_party/agg23/README.pdfium @@ -39,3 +39,4 @@ outline_aa::render_line(). 0016-support-negative-dash-phases.patch: Support negative dash phases in calc_dash_start(). 0017-support-odd-size-dash-arrays.patch: Support odd-sized dash arrays. +0018-outline_aa_reset.patch: Correctly reset current cell. diff --git a/third_party/agg23/agg_rasterizer_scanline_aa.cpp b/third_party/agg23/agg_rasterizer_scanline_aa.cpp index ed59cf0ffb..d561e02b58 100644 --- a/third_party/agg23/agg_rasterizer_scanline_aa.cpp +++ b/third_party/agg23/agg_rasterizer_scanline_aa.cpp @@ -101,13 +101,13 @@ outline_aa::outline_aa() : m_max_y(-0x7FFFFFFF), m_sorted(false) { - m_cur_cell.set(0x7FFF, 0x7FFF, 0, 0); + m_cur_cell.set(0x7FFFFFFF, 0x7FFFFFFF, 0, 0); } void outline_aa::reset() { m_num_cells = 0; m_cur_block = 0; - m_cur_cell.set(0x7FFF, 0x7FFF, 0, 0); + m_cur_cell.set(0x7FFFFFFF, 0x7FFFFFFF, 0, 0); m_sorted = false; m_min_x = 0x7FFFFFFF; m_min_y = 0x7FFFFFFF; From e72afa79f63c9348d499974986db6de7d980bc36 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 6 Oct 2026 16:48:01 -0700 Subject: [PATCH 45/72] Support building PDFium and running tests without FreeType Allow pdf_enable_freetype=false when pdf_enable_fontations=true and pdf_enable_skia=true. Guard FreeType specific paths across core/fxge, testing environments, and fpdfsdk behind defined(PDF_ENABLE_FREETYPE). Populate font_data_ in CFX_Font::LoadFaceFromSpanStream() so that Skia device drivers can render fonts loaded from span streams instead of falling back to FT for this one case. Update Skia + Fontations text rendering test checksums in cfde_textout_unittest.cpp. Bug: 42271123 Change-Id: I403fb18c50fc39962843b410ae745856af8dbd96 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159552 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- BUILD.gn | 24 ++- build_overrides/pdfium.gni | 4 + core/fxcrt/BUILD.gn | 1 - core/fxge/BUILD.gn | 12 +- core/fxge/cfx_face.cpp | 219 ++++++++++++++++++++---- core/fxge/cfx_face.h | 24 +-- core/fxge/cfx_font.cpp | 5 + core/fxge/cfx_fontmgr.cpp | 17 +- core/fxge/cfx_fontmgr.h | 9 + core/fxge/cfx_gemodule.h | 13 +- core/fxge/cfx_renderdevice.cpp | 8 +- core/fxge/freetype/fx_freetype.h | 4 + core/fxge/skrifa/fx_skrifa_unittest.cpp | 2 + fpdfsdk/fpdf_view.cpp | 18 +- pdfium.gni | 17 +- skia/BUILD.gn | 57 +++--- testing/embedder_test_environment.cpp | 6 + testing/fuzzers/BUILD.gn | 14 +- testing/pdf_test_environment.cpp | 4 +- third_party/BUILD.gn | 2 +- xfa/fde/cfde_textout_unittest.cpp | 13 +- 21 files changed, 371 insertions(+), 102 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 5c6d2060a8..a5d8a7741d 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -15,15 +15,6 @@ group("default") { } } -group("freetype_common") { - public_deps = [] - if (pdf_bundle_freetype) { - public_deps += [ "third_party:fx_freetype" ] - } else { - public_deps += [ "//build/config/freetype" ] - } -} - config("pdfium_common_config") { cflags = [] cflags_cc = [] @@ -44,6 +35,10 @@ config("pdfium_common_config") { defines += [ "PDF_ENABLE_FONTATIONS" ] } + if (pdf_enable_freetype) { + defines += [ "PDF_ENABLE_FREETYPE" ] + } + if (pdf_enable_rust_bmp) { defines += [ "PDF_ENABLE_RUST_BMP" ] } @@ -286,6 +281,17 @@ component("pdfium") { } } +if (pdf_enable_freetype) { + group("freetype_common") { + public_deps = [] + if (pdf_bundle_freetype) { + public_deps += [ "third_party:fx_freetype" ] + } else { + public_deps += [ "//build/config/freetype" ] + } + } +} + # Targets below this are only visible within this file. visibility = [ ":*" ] diff --git a/build_overrides/pdfium.gni b/build_overrides/pdfium.gni index cdbbca4b53..e89d55372a 100644 --- a/build_overrides/pdfium.gni +++ b/build_overrides/pdfium.gni @@ -9,6 +9,10 @@ # Default: Use a bundled FreeType. pdf_bundle_freetype_override = true +# Build PDFium with FreeType support. +# Default: With FreeType support. +pdf_enable_freetype_override = true + # Build PDFium with experimental Brotli compression support. # Default: Brotli support is disabled until PDF 2.0 spec is confirmed. pdf_enable_brotli_override = false diff --git a/core/fxcrt/BUILD.gn b/core/fxcrt/BUILD.gn index 91baf8ab03..eee64a7f27 100644 --- a/core/fxcrt/BUILD.gn +++ b/core/fxcrt/BUILD.gn @@ -162,7 +162,6 @@ source_set("fxcrt") { "//third_party/fast_float", ] public_deps = [ - "../../:freetype_common", "//third_party/abseil-cpp:absl", "//third_party/icu:icuuc", ] diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn index 2622e865b3..3be2a18f68 100644 --- a/core/fxge/BUILD.gn +++ b/core/fxge/BUILD.gn @@ -99,8 +99,6 @@ source_set("fxge") { "fontdata/chromefontdata/FoxitSerifMM.cpp", "fontdata/chromefontdata/FoxitSymbol.cpp", "fontdata/chromefontdata/chromefontdata.h", - "freetype/fx_freetype.cpp", - "freetype/fx_freetype.h", "fx_font.cpp", "fx_font.h", "fx_fontencoding.h", @@ -121,7 +119,15 @@ source_set("fxge") { public_deps = [] defines = [] - if (is_component_build || use_system_freetype) { + if (pdf_enable_freetype) { + sources += [ + "freetype/fx_freetype.cpp", + "freetype/fx_freetype.h", + ] + public_deps += [ "../../:freetype_common" ] + } + + if (pdf_enable_freetype && (is_component_build || use_system_freetype)) { # ft_adobe_glyph_list is not exported from the Freetype shared library so we # need it defined in component builds and builds using system freetype. defines += [ "DEFINE_PS_TABLES_DATA" ] diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index 6f3be9140a..4e86dc17c1 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp @@ -53,21 +53,23 @@ namespace { -struct OUTLINE_PARAMS { - UnownedPtr path_; - FT_Pos cur_x_; - FT_Pos cur_y_; -}; - -constexpr float kCoordUnit = 64 * 64.0f; +#if defined(PDF_ENABLE_FREETYPE) constexpr int kThousandthMinInt = std::numeric_limits::min() / 1000; constexpr int kThousandthMaxInt = std::numeric_limits::max() / 1000; - constexpr int kMaxGlyphDimension = 2048; +#endif // defined(PDF_ENABLE_FREETYPE) // Boundary value to avoid integer overflow when adding 1/64th of the value. constexpr int kMaxRectTop = 2114445437; +#if defined(PDF_ENABLE_FREETYPE) +struct OUTLINE_PARAMS { + UnownedPtr path_; + FT_Pos cur_x_; + FT_Pos cur_y_; +}; + +constexpr float kCoordUnit = 64 * 64.0f; int FTPosToCBoxInt(FT_Pos pos) { // Boundary values to avoid integer overflow when multiplied by 1000. @@ -168,6 +170,7 @@ int Outline_CubicTo(const FT_Vector* control1, param->cur_y_ = to->y; return 0; } +#endif // defined(PDF_ENABLE_FREETYPE) #if defined(PDF_ENABLE_FONTATIONS) constexpr float kFixedPpem = 64.0f; @@ -176,16 +179,6 @@ CFX_PointF ToCFXPointF(const skrifa::Point& pt) { return CFX_PointF(pt.x, pt.y); } -void CloseContours(pdfium::span points, - std::vector& contours) { - if (!points.empty()) { - uint16_t last = static_cast(points.size() - 1); - if (contours.empty() || contours.back() != last) { - contours.push_back(last); - } - } -} - std::unique_ptr ConvertOutline(const skrifa::Outline& outline) { if (outline.verbs.empty() || outline.points.empty()) { return nullptr; @@ -248,6 +241,17 @@ std::unique_ptr ConvertOutline(const skrifa::Outline& outline) { return skrifa_path; } +#if defined(PDF_ENABLE_FREETYPE) +void CloseContours(pdfium::span points, + std::vector& contours) { + if (!points.empty()) { + uint16_t last = static_cast(points.size() - 1); + if (contours.empty() || contours.back() != last) { + contours.push_back(last); + } + } +} + struct ConvertedFTOutline { std::vector points; std::vector tags; @@ -328,8 +332,10 @@ ConvertedFTOutline ConvertToFTOutline(const skrifa::Outline& outline, CloseContours(result.points, result.contours); return result; } +#endif // defined(PDF_ENABLE_FREETYPE) #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) FT_Encoding ToFTEncoding(fxge::FontEncoding encoding) { switch (encoding) { case fxge::FontEncoding::kAdobeCustom: @@ -362,6 +368,7 @@ FT_Encoding ToFTEncoding(fxge::FontEncoding encoding) { return FT_ENCODING_WANSUNG; } } +#endif // defined(PDF_ENABLE_FREETYPE) fxge::FontEncoding CharMapIdPairToFontEncoding( CFX_Face::CharMapIdPair charmap_id_pair) { @@ -413,6 +420,7 @@ fxge::FontEncoding CharMapIdPairToFontEncoding( return fxge::FontEncoding::kNone; } +#if defined(PDF_ENABLE_FREETYPE) FX_RECT FXRectFromFTPos(FT_Pos left, FT_Pos top, FT_Pos right, FT_Pos bottom) { return FX_RECT(pdfium::checked_cast(left), pdfium::checked_cast(top), @@ -465,6 +473,7 @@ class ScopedFaceTransform { private: UnownedPtr const rec_; }; +#endif // defined(PDF_ENABLE_FREETYPE) } // namespace @@ -493,12 +502,13 @@ RetainPtr CFX_Face::New(RetainPtr cache_entry, // keeping a face that only FreeType can read. return nullptr; } - return pdfium::WrapRetain(new CFX_Face( - std::move(cache_entry), std::move(font_stream), /*rec=*/nullptr, - std::make_unique(std::move(raw_font)))); + return pdfium::WrapRetain( + new CFX_Face(std::move(cache_entry), std::move(font_stream), nullptr, + new SkrifaFontHolder(std::move(raw_font)))); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (CFX_GEModule::IsFreetype()) { CFX_FontMgr* font_mgr = CFX_GEModule::Get()->GetFontMgr(); FT_FaceRec* face_rec = nullptr; @@ -515,6 +525,7 @@ RetainPtr CFX_Face::New(RetainPtr cache_entry, std::move(font_stream), face_rec, /*skrifa_font=*/nullptr)); } +#endif // defined(PDF_ENABLE_FREETYPE) return nullptr; } @@ -529,7 +540,10 @@ wchar_t CFX_Face::UnicodeFromAdobeName(const char* name) { : 0; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return static_cast(FXFT_unicode_from_adobe_name(name) & 0x7FFFFFFF); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } // static @@ -543,9 +557,12 @@ ByteString CFX_Face::AdobeNameFromUnicode(wchar_t unicode) { return ByteString(ByteStringView(result)); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) char glyph_name[64]; FXFT_adobe_name_from_unicode(glyph_name, unicode); return ByteString(glyph_name); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } bool CFX_Face::HasGlyphNames() const { @@ -554,7 +571,10 @@ bool CFX_Face::HasGlyphNames() const { return skrifa_font_->font->has_glyph_names(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return !!(GetRec()->face_flags & FT_FACE_FLAG_GLYPH_NAMES); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } bool CFX_Face::IsTtOt() const { @@ -563,8 +583,11 @@ bool CFX_Face::IsTtOt() const { return skrifa_font_->font->is_sfnt(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) const FT_FaceRec* rec = GetRec(); return rec && (rec->face_flags & FT_FACE_FLAG_SFNT); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } ByteString CFX_Face::GetFontFormat() { @@ -582,7 +605,10 @@ ByteString CFX_Face::GetFontFormat() { } } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return ByteString(FT_Get_Font_Format(GetRec())); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } bool CFX_Face::IsTricky() const { @@ -591,7 +617,10 @@ bool CFX_Face::IsTricky() const { return skrifa_font_->font->is_tricky(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return !!(GetRec()->face_flags & FT_FACE_FLAG_TRICKY); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } #if defined(PDF_ENABLE_FONTATIONS) @@ -611,7 +640,10 @@ bool CFX_Face::IsFixedWidth() const { return skrifa_font_->font->is_fixed_pitch(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return !!(GetRec()->face_flags & FT_FACE_FLAG_FIXED_WIDTH); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } #if defined(PDF_ENABLE_XFA) @@ -621,7 +653,10 @@ bool CFX_Face::IsScalable() const { return skrifa_font_->font->is_scalable(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return !!(GetRec()->face_flags & FT_FACE_FLAG_SCALABLE); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } #endif // defined(PDF_ENABLE_XFA) @@ -631,8 +666,11 @@ bool CFX_Face::IsItalic() const { return skrifa_font_->font->is_italic(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) const FT_FaceRec* rec = GetRec(); return rec && (rec->style_flags & FT_STYLE_FLAG_ITALIC); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } bool CFX_Face::IsBold() const { @@ -641,8 +679,11 @@ bool CFX_Face::IsBold() const { return skrifa_font_->font->is_bold(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) const FT_FaceRec* rec = GetRec(); return rec && (rec->style_flags & FT_STYLE_FLAG_BOLD); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } ByteString CFX_Face::GetFamilyName() const { @@ -652,7 +693,10 @@ ByteString CFX_Face::GetFamilyName() const { return ByteString(ByteStringView(skrifa_result)); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return ByteString(GetRec()->family_name); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } ByteString CFX_Face::GetStyleName() const { @@ -662,7 +706,10 @@ ByteString CFX_Face::GetStyleName() const { return ByteString(skrifa_result.c_str()); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return ByteString(GetRec()->style_name); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } FX_RECT CFX_Face::GetBBox() const { @@ -677,6 +724,7 @@ FX_RECT CFX_Face::GetBBox() const { } } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (CFX_GEModule::IsFreetype()) { const FT_FaceRec* rec = GetRec(); if (rec) { @@ -686,6 +734,7 @@ FX_RECT CFX_Face::GetBBox() const { pdfium::checked_cast(rec->bbox.yMax)); } } +#endif // defined(PDF_ENABLE_FREETYPE) return FX_RECT(-1000, -1000, 1000, 1000); } @@ -695,7 +744,10 @@ uint16_t CFX_Face::GetUnitsPerEm() const { return pdfium::checked_cast(skrifa_font_->font->units_per_em()); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return pdfium::checked_cast(GetRec()->units_per_EM); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } int CFX_Face::EmAdjust(int value) const { @@ -708,7 +760,10 @@ int16_t CFX_Face::GetAscender() const { return static_cast(std::round(skrifa_font_->font->ascent())); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return pdfium::checked_cast(GetRec()->ascender); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } int16_t CFX_Face::GetDescender() const { @@ -717,7 +772,10 @@ int16_t CFX_Face::GetDescender() const { return static_cast(std::round(skrifa_font_->font->descent())); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return pdfium::checked_cast(GetRec()->descender); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } pdfium::span CFX_Face::GetData() const { @@ -731,6 +789,7 @@ size_t CFX_Face::GetSfntTable(uint32_t table, pdfium::span buffer) { rust::Slice(buffer)); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return 0; } @@ -746,6 +805,7 @@ size_t CFX_Face::GetSfntTable(uint32_t table, pdfium::span buffer) { return pdfium::checked_cast(length); } } +#endif // defined(PDF_ENABLE_FREETYPE) return 0; } @@ -791,6 +851,7 @@ std::optional> CFX_Face::GetOs2UnicodeRange() { return std::nullopt; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return std::nullopt; } @@ -802,6 +863,8 @@ std::optional> CFX_Face::GetOs2UnicodeRange() { static_cast(os2->ulUnicodeRange2), static_cast(os2->ulUnicodeRange3), static_cast(os2->ulUnicodeRange4)}; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } #endif // defined(PDF_ENABLE_XFA) @@ -816,6 +879,7 @@ std::optional> CFX_Face::GetOs2CodePageRange() { return std::nullopt; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return std::nullopt; } @@ -825,6 +889,8 @@ std::optional> CFX_Face::GetOs2CodePageRange() { } return std::array{static_cast(os2->ulCodePageRange1), static_cast(os2->ulCodePageRange2)}; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } std::optional> CFX_Face::GetOs2Panose() { @@ -837,6 +903,7 @@ std::optional> CFX_Face::GetOs2Panose() { return std::nullopt; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return std::nullopt; } @@ -845,6 +912,8 @@ std::optional> CFX_Face::GetOs2Panose() { return std::nullopt; } return std::array{os2->panose[0], os2->panose[1]}; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } #endif // defined(PDF_ENABLE_XFA) || BUILDFLAG(IS_ANDROID) || // BUILDFLAG(IS_LINUX) @@ -855,7 +924,10 @@ int CFX_Face::GetGlyphCount() const { return static_cast(skrifa_font_->font->num_glyphs()); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return pdfium::checked_cast(GetRec()->num_glyphs); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } std::unique_ptr CFX_Face::RenderGlyph( @@ -889,11 +961,10 @@ std::unique_ptr CFX_Face::RenderGlyph( CFX_Matrix effective_matrix = matrix; AdjustSubstFontTransform(subst_font, dest_width, unscaled_advance, is_cid_font, is_vertical, &effective_matrix); - +#if defined(PDF_ENABLE_FREETYPE) const float scale = is_scaled ? 1.0f : kFixedPpem / upem; const bool is_lcd = (anti_alias == FontAntiAliasingMode::kLcd); const float x_scale = is_lcd ? 3.0f : 1.0f; - ConvertedFTOutline converted = ConvertToFTOutline(outline, effective_matrix, scale, x_scale); if (converted.points.empty() || converted.contours.empty()) { @@ -1053,8 +1124,12 @@ std::unique_ptr CFX_Face::RenderGlyph( return std::make_unique(CFX_Point(bitmap_left, bitmap_top), std::move(new_bitmap)); +#else + return nullptr; +#endif // defined(PDF_ENABLE_FREETYPE) } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) FT_FaceRec* rec = GetRec(); if (!rec) { return nullptr; @@ -1149,6 +1224,9 @@ std::unique_ptr CFX_Face::RenderGlyph( new_bitmap->PopulateFromSpan(src_span, src_pitch); } return glyph_bitmap; +#else + return nullptr; +#endif // defined(PDF_ENABLE_FREETYPE) } std::unique_ptr CFX_Face::LoadGlyphPath( @@ -1179,6 +1257,7 @@ std::unique_ptr CFX_Face::LoadGlyphPath( return nullptr; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return nullptr; } @@ -1237,6 +1316,9 @@ std::unique_ptr CFX_Face::LoadGlyphPath( pPath->ClosePath(); return pPath; +#else + return nullptr; +#endif // defined(PDF_ENABLE_FREETYPE) } int CFX_Face::GetGlyphTTWidth(uint32_t glyph_index) const { @@ -1250,9 +1332,12 @@ int CFX_Face::GetGlyphTTWidth(uint32_t glyph_index) const { return 0; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) const auto* fontglyph = GetRec()->glyph; DCHECK_EQ(glyph_index, fontglyph->glyph_index); return NormalizeFontMetric(fontglyph->metrics.horiAdvance, GetUnitsPerEm()); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } int CFX_Face::GetGlyphWidth(uint32_t glyph_index, @@ -1271,6 +1356,7 @@ int CFX_Face::GetGlyphWidth(uint32_t glyph_index, return 0; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (subst_font && subst_font->IsBuiltInGenericFont()) { AdjustVariationParams(glyph_index, dest_width, weight); } @@ -1292,6 +1378,8 @@ int CFX_Face::GetGlyphWidth(uint32_t glyph_index, } return EmAdjust(static_cast(horizontal_advance)); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } ByteString CFX_Face::GetGlyphName(uint32_t glyph_index) { @@ -1301,6 +1389,7 @@ ByteString CFX_Face::GetGlyphName(uint32_t glyph_index) { return ByteString(skrifa_result.c_str()); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return ByteString(); } @@ -1308,6 +1397,8 @@ ByteString CFX_Face::GetGlyphName(uint32_t glyph_index) { FT_Get_Glyph_Name(GetRec(), glyph_index, name, sizeof(name)); name[255] = 0; return ByteString(name); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } int CFX_Face::GetCharIndex(uint32_t code) { @@ -1346,10 +1437,13 @@ int CFX_Face::GetCharIndex(uint32_t code) { return 0; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return 0; } return FT_Get_Char_Index(GetRec(), code); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } int CFX_Face::GetNameIndex(const char* name) { @@ -1358,10 +1452,13 @@ int CFX_Face::GetNameIndex(const char* name) { return static_cast(skrifa_font_->font->name_index(name)); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return 0; } return FT_Get_Name_Index(GetRec(), name); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } int CFX_Face::LoadGlyph(uint32_t glyph_index, bool scale) { @@ -1370,6 +1467,7 @@ int CFX_Face::LoadGlyph(uint32_t glyph_index, bool scale) { return skrifa_font_->font->has_outline(glyph_index) ? 0 : -1; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return -1; } @@ -1378,6 +1476,8 @@ int CFX_Face::LoadGlyph(uint32_t glyph_index, bool scale) { args |= FT_LOAD_NO_SCALE; } return FT_Load_Glyph(GetRec(), glyph_index, args); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } ByteString CFX_Face::GetPostscriptName() { @@ -1387,19 +1487,26 @@ ByteString CFX_Face::GetPostscriptName() { return ByteString(ByteStringView(skrifa_result)); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return ByteString(); } return ByteString(FT_Get_Postscript_Name(GetRec())); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } CFX_Size CFX_Face::GetPixelSize() const { +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return {64, 64}; } int pixel_size_x = GetRec()->size->metrics.x_ppem; int pixel_size_y = GetRec()->size->metrics.y_ppem; return {pixel_size_x, pixel_size_y}; +#else + return {64, 64}; +#endif // defined(PDF_ENABLE_FREETYPE) } std::optional CFX_Face::GetFontGlyphBBox(uint32_t glyph_index) { @@ -1416,6 +1523,7 @@ std::optional CFX_Face::GetFontGlyphBBox(uint32_t glyph_index) { NormalizeFontMetric(bbox.y_max, upem)); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (IsTricky()) { int error = FT_Set_Char_Size(GetRec(), 0, 1000 * 64, 72, 72); if (error) { @@ -1453,6 +1561,9 @@ std::optional CFX_Face::GetFontGlyphBBox(uint32_t glyph_index) { GetRec()->glyph->metrics.horiBearingY - GetRec()->glyph->metrics.height, GetRec()->glyph->metrics.horiBearingX + GetRec()->glyph->metrics.width, GetRec()->glyph->metrics.horiBearingY, em, em); +#else + return std::nullopt; +#endif // defined(PDF_ENABLE_FREETYPE) } FX_RECT CFX_Face::GetCharBBox(uint32_t code, int glyph_index) { @@ -1476,6 +1587,7 @@ FX_RECT CFX_Face::GetCharBBox(uint32_t code, int glyph_index) { return rect; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) FT_FaceRec* rec = GetRec(); if (!rec) { return rect; @@ -1518,6 +1630,7 @@ FX_RECT CFX_Face::GetCharBBox(uint32_t code, int glyph_index) { } } } +#endif // defined(PDF_ENABLE_FREETYPE) return rect; } @@ -1532,6 +1645,7 @@ FX_RECT CFX_Face::GetGlyphBBox(uint32_t glyph_index) const { NormalizeFontMetric(bbox.y_min, upem)); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) const auto* glyph = GetRec()->glyph; DCHECK_EQ(glyph_index, glyph->glyph_index); @@ -1542,6 +1656,8 @@ FX_RECT CFX_Face::GetGlyphBBox(uint32_t glyph_index) const { NormalizeFontMetric(top, upem), NormalizeFontMetric(left + glyph->metrics.width, upem), NormalizeFontMetric(top - glyph->metrics.height, upem)); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } std::vector CFX_Face::GetCharCodesAndIndices( @@ -1558,6 +1674,7 @@ std::vector CFX_Face::GetCharCodesAndIndices( return results; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) CharCodeAndIndex char_code_and_index; char_code_and_index.char_code = static_cast( FT_Get_First_Char(GetRec(), &char_code_and_index.glyph_index)); @@ -1575,6 +1692,8 @@ std::vector CFX_Face::GetCharCodesAndIndices( results.push_back(char_code_and_index); } return results; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } CFX_Face::CharMap CFX_Face::GetCurrentCharMap() const { @@ -1586,7 +1705,10 @@ CFX_Face::CharMap CFX_Face::GetCurrentCharMap() const { return nullptr; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return GetRec() ? GetRec()->charmap : nullptr; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } std::optional CFX_Face::GetCurrentCharMapEncoding() const { @@ -1601,12 +1723,15 @@ std::optional CFX_Face::GetCurrentCharMapEncoding() const { return fxge::FontEncoding::kUnicode; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec() || !GetRec()->charmap) { return std::nullopt; } return CharMapIdPairToFontEncoding( {.platform_id = GetRec()->charmap->platform_id, .encoding_id = GetRec()->charmap->encoding_id}); +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } CFX_Face::CharMapIdPair CFX_Face::GetCharMapIdPairByIndex(size_t index) const { @@ -1627,10 +1752,13 @@ uint16_t CFX_Face::GetCharMapPlatformIdByIndex(size_t index) const { return 0; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return 0; } return GetCharMaps()[index]->platform_id; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } uint16_t CFX_Face::GetCharMapEncodingIdByIndex(size_t index) const { @@ -1647,10 +1775,13 @@ uint16_t CFX_Face::GetCharMapEncodingIdByIndex(size_t index) const { return 0; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return 0; } return GetCharMaps()[index]->encoding_id; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } fxge::FontEncoding CFX_Face::GetCharMapEncodingByIndex(size_t index) const { @@ -1667,11 +1798,15 @@ size_t CFX_Face::GetCharMapCount() const { return skrifa_font_->font->get_charmap_count(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return GetRec() && GetRec()->charmaps ? pdfium::checked_cast(GetRec()->num_charmaps) : 0; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } +#if defined(PDF_ENABLE_FREETYPE) pdfium::span CFX_Face::GetCharMaps() const { #if defined(PDF_ENABLE_FONTATIONS) if (CFX_GEModule::IsFontations()) { @@ -1690,6 +1825,7 @@ pdfium::span CFX_Face::GetCharMaps() const { // SAFETY: required from library to provide correct count. return UNSAFE_BUFFERS({GetRec()->charmaps, count}); } +#endif // defined(PDF_ENABLE_FREETYPE) void CFX_Face::SetCharMap(CharMap map) { #if defined(PDF_ENABLE_FONTATIONS) @@ -1706,9 +1842,11 @@ void CFX_Face::SetCharMap(CharMap map) { return; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (GetRec()) { FT_Set_Charmap(GetRec(), static_cast(map)); } +#endif // defined(PDF_ENABLE_FREETYPE) } void CFX_Face::SetCharMapByIndex(size_t index) { @@ -1722,8 +1860,10 @@ void CFX_Face::SetCharMapByIndex(size_t index) { } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) // SAFETY: required from library as enforced by check above. SetCharMap(UNSAFE_BUFFERS(GetRec()->charmaps[index])); +#endif // defined(PDF_ENABLE_FREETYPE) } bool CFX_Face::SelectCharMap(fxge::FontEncoding encoding) { @@ -1752,6 +1892,7 @@ bool CFX_Face::SelectCharMap(fxge::FontEncoding encoding) { return false; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return false; } @@ -1761,6 +1902,8 @@ bool CFX_Face::SelectCharMap(fxge::FontEncoding encoding) { } selected_encoding_ = encoding; return true; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } #if defined(PDF_ENABLE_XFA) @@ -1772,7 +1915,10 @@ int CFX_Face::GetNumFaces() const { skrifa::get_num_faces(rust::Slice(data))); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) return GetRec() ? pdfium::checked_cast(GetRec()->num_faces) : 1; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } #endif // defined(PDF_ENABLE_XFA) @@ -1790,32 +1936,39 @@ bool CFX_Face::CanEmbed() { return true; } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) if (!GetRec()) { return true; } FT_UShort fstype = FT_Get_FSType_Flags(GetRec()); return (fstype & (FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING | FT_FSTYPE_BITMAP_EMBEDDING_ONLY)) == 0; +#endif // defined(PDF_ENABLE_FREETYPE) + NOTREACHED(); } #endif // BUILDFLAG(IS_WIN) -CFX_Face::CFX_Face( - RetainPtr cache_entry, - RetainPtr font_stream, - FT_FaceRec* rec, - [[maybe_unused]] std::unique_ptr skrifa_font) +CFX_Face::CFX_Face(RetainPtr cache_entry, + RetainPtr font_stream, + [[maybe_unused]] FT_FaceRec* rec, + [[maybe_unused]] SkrifaFontHolder* skrifa_font) : cache_entry_(std::move(cache_entry)), - font_stream_(std::move(font_stream)), + font_stream_(std::move(font_stream)) +#if defined(PDF_ENABLE_FREETYPE) + , rec_(rec) +#endif #if defined(PDF_ENABLE_FONTATIONS) , - skrifa_font_(std::move(skrifa_font)) + skrifa_font_(skrifa_font) #endif // defined(PDF_ENABLE_FONTATIONS) { -#if defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) && defined(PDF_ENABLE_FONTATIONS) DCHECK(rec_ || skrifa_font_); -#else +#elif defined(PDF_ENABLE_FREETYPE) DCHECK(rec_); +#elif defined(PDF_ENABLE_FONTATIONS) + DCHECK(skrifa_font_); #endif } @@ -1831,6 +1984,7 @@ SkTypeface* CFX_Face::GetOrCreateSkTypeface() { CFX_Face::~CFX_Face() = default; +#if defined(PDF_ENABLE_FREETYPE) void CFX_Face::AdjustVariationParams(int glyph_index, int dest_width, int weight) { @@ -1879,6 +2033,7 @@ void CFX_Face::AdjustVariationParams(int glyph_index, } FT_Set_MM_Design_Coordinates(rec, 2, coords); } +#endif // defined(PDF_ENABLE_FREETYPE) #if defined(PDF_ENABLE_FONTATIONS) void CFX_Face::AdjustSubstFontTransform(const CFX_SubstFont* subst_font, diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h index 840e3b4b17..3f8403df02 100644 --- a/core/fxge/cfx_face.h +++ b/core/fxge/cfx_face.h @@ -19,7 +19,6 @@ #include "core/fxcrt/observed_ptr.h" #include "core/fxcrt/retain_ptr.h" #include "core/fxcrt/span.h" -#include "core/fxge/freetype/fx_freetype.h" #include "core/fxge/fx_font.h" #include "core/fxge/fx_fontencoding.h" @@ -27,9 +26,11 @@ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck #endif -#if defined(PDF_ENABLE_FONTATIONS) -#include "third_party/rust/cxx/v1/cxx.h" -#endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) +#include "core/fxge/freetype/fx_freetype.h" +#else +using FT_FaceRec = struct FT_FaceRec_; +#endif // defined(PDF_ENABLE_FREETYPE) class CFX_CTTGSUBTable; class CFX_GlyphBitmap; @@ -44,11 +45,7 @@ class CFX_CTTNameTable; class SkTypeface; #endif -#if defined(PDF_ENABLE_FONTATIONS) struct SkrifaFontHolder; -#else -struct SkrifaFontHolder {}; -#endif namespace fxge { enum class FontEncoding : uint32_t; @@ -171,18 +168,22 @@ class CFX_Face final : public Retainable, public Observable { CFX_Face(RetainPtr cache_entry, RetainPtr font_stream, FT_FaceRec* rec, - std::unique_ptr skrifa_font); + SkrifaFontHolder* skrifa_font); ~CFX_Face() override; +#if defined(PDF_ENABLE_FREETYPE) FT_FaceRec* GetRec() { return rec_.get(); } const FT_FaceRec* GetRec() const { return rec_.get(); } +#endif uint16_t GetCharMapEncodingIdByIndex(size_t index) const; CFX_Size GetPixelSize() const; bool IsTricky() const; +#if defined(PDF_ENABLE_FREETYPE) void AdjustVariationParams(int glyph_index, int dest_width, int weight); +#endif #if defined(PDF_ENABLE_FONTATIONS) void AdjustSubstFontTransform(const CFX_SubstFont* subst_font, int dest_width, @@ -191,8 +192,9 @@ class CFX_Face final : public Retainable, public Observable { bool is_vertical, CFX_Matrix* matrix) const; #endif - +#if defined(PDF_ENABLE_FREETYPE) pdfium::span GetCharMaps() const; +#endif // Returns the size of the data, or 0 on failure. Only write into `buffer` if // it is large enough to hold the data. @@ -217,7 +219,9 @@ class CFX_Face final : public Retainable, public Observable { // this member while the `rec_` and `skia_typeface_` is still using it. RetainPtr font_stream_; +#if defined(PDF_ENABLE_FREETYPE) ScopedFXFTFaceRec const rec_; +#endif #if defined(PDF_USE_SKIA) sk_sp skia_typeface_; #endif // defined(PDF_USE_SKIA) diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp index 2be39e2946..532d05e878 100644 --- a/core/fxge/cfx_font.cpp +++ b/core/fxge/cfx_font.cpp @@ -200,6 +200,11 @@ bool CFX_Font::LoadFaceFromSpanStream( uint64_t object_tag) { object_tag_ = object_tag; face_ = CFX_Face::New(nullptr, stream, face_index); +#if defined(PDF_ENABLE_FONTATIONS) + if (CFX_GEModule::IsFontations() && face_) { + font_data_ = face_->GetData(); + } +#endif return !!face_; } diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp index 0bedea0e35..1a18fb9cf5 100644 --- a/core/fxge/cfx_fontmgr.cpp +++ b/core/fxge/cfx_fontmgr.cpp @@ -48,8 +48,12 @@ sk_sp CreateSkiaFontManagerFallback( return SkFontMgr_New_Fontations_Empty(); } #endif // defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FREETYPE) // This is a SkFontMgr which will use FreeType to decode font data. return SkFontMgr_New_Custom_Empty(); +#else + return nullptr; +#endif // defined(PDF_ENABLE_FREETYPE) #endif // defined(PDF_USE_SKIA_CUSTOM_FONT_MANAGER) } @@ -68,15 +72,22 @@ sk_sp CreateSkiaFontManager(CFX_FontMgr::FontBackend backend) { } // namespace CFX_FontMgr::CFX_FontMgr([[maybe_unused]] FontBackend backend) - : ft_library_(InitializeFreeType()), + : +#if defined(PDF_ENABLE_FREETYPE) + ft_library_(InitializeFreeType()), +#endif #if defined(PDF_USE_SKIA) font_backend_(backend), skia_fontmgr_(CreateSkiaFontManager(font_backend_)), #endif - builtin_mapper_(std::make_unique()), + builtin_mapper_(std::make_unique()) +#if defined(PDF_ENABLE_FREETYPE) + , ft_library_supports_hinting_( FreeTypeSetLcdFilterMode(ft_library_.get()) || - FreeTypeVersionSupportsHinting(ft_library_.get())) { + FreeTypeVersionSupportsHinting(ft_library_.get())) +#endif +{ } CFX_FontMgr::~CFX_FontMgr() = default; diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h index 390fc9fcca..16437c24a4 100644 --- a/core/fxge/cfx_fontmgr.h +++ b/core/fxge/cfx_fontmgr.h @@ -16,7 +16,10 @@ #include "core/fxcrt/observed_ptr.h" #include "core/fxcrt/retain_ptr.h" #include "core/fxcrt/span.h" + +#if defined(PDF_ENABLE_FREETYPE) #include "core/fxge/freetype/fx_freetype.h" +#endif #if defined(PDF_USE_SKIA) #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck @@ -44,17 +47,21 @@ class CFX_FontMgr { // Always present. CFX_FontMapper* GetBuiltinMapper() const { return builtin_mapper_.get(); } +#if defined(PDF_ENABLE_FREETYPE) FXFT_LibraryRec* GetFTLibrary() const { return ft_library_.get(); } bool FTLibrarySupportsHinting() const { return ft_library_supports_hinting_; } +#endif #if defined(PDF_USE_SKIA) sk_sp MakeSkTypeface(pdfium::span font_span); #endif private: +#if defined(PDF_ENABLE_FREETYPE) // Must come before `builtin_mapper_`. ScopedFXFTLibraryRec const ft_library_; +#endif #if defined(PDF_USE_SKIA) const FontBackend font_backend_; sk_sp skia_fontmgr_; @@ -62,7 +69,9 @@ class CFX_FontMgr { #endif std::unique_ptr builtin_mapper_; std::map> glyph_cache_map_; +#if defined(PDF_ENABLE_FREETYPE) const bool ft_library_supports_hinting_; +#endif }; #if defined(PDF_USE_SKIA) && defined(PDF_USE_SKIA_CUSTOM_FONT_MANAGER) diff --git a/core/fxge/cfx_gemodule.h b/core/fxge/cfx_gemodule.h index 85d6f3c141..e17f37daf7 100644 --- a/core/fxge/cfx_gemodule.h +++ b/core/fxge/cfx_gemodule.h @@ -109,19 +109,20 @@ class CFX_GEModule { } #endif -#if defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FONTATIONS) && defined(PDF_ENABLE_FREETYPE) static bool IsFontations() { return Get()->font_backend_ == CFX_FontMgr::FontBackend::kFontations; } -#endif - static bool IsFreetype() { -#if defined(PDF_ENABLE_FONTATIONS) return Get()->font_backend_ == CFX_FontMgr::FontBackend::kFreeType; + } +#elif defined(PDF_ENABLE_FONTATIONS) + static bool IsFontations() { return true; } +#elif defined(PDF_ENABLE_FREETYPE) + static bool IsFreetype() { return true; } #else - return true; +#error "Neither freetype nor fontations available" #endif - } private: CFX_GEModule(std::optional> user_font_paths, diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp index 1ccc00e546..7426706958 100644 --- a/core/fxge/cfx_renderdevice.cpp +++ b/core/fxge/cfx_renderdevice.cpp @@ -1170,7 +1170,13 @@ bool CFX_RenderDevice::DrawNormalText(pdfium::span pCharPos, CFX_TextRenderOptions text_options(options); if (is_text_smooth) { if (GetDeviceType() == DeviceType::kDisplay && bpp_ > 1) { - if (!CFX_GEModule::Get()->GetFontMgr()->FTLibrarySupportsHinting()) { +#if defined(PDF_ENABLE_FREETYPE) + const bool lacks_hinting = + !CFX_GEModule::Get()->GetFontMgr()->FTLibrarySupportsHinting(); +#else + const bool lacks_hinting = false; +#endif + if (lacks_hinting) { // Some Freetype implementations (like the one packaged with Fedora) do // not support hinting due to patents 6219025, 6239783, 6307566, // 6225973, 6243070, 6393145, 6421054, 6282327, and 6624828; the latest diff --git a/core/fxge/freetype/fx_freetype.h b/core/fxge/freetype/fx_freetype.h index e570367c8c..35d68b8462 100644 --- a/core/fxge/freetype/fx_freetype.h +++ b/core/fxge/freetype/fx_freetype.h @@ -7,6 +7,10 @@ #ifndef CORE_FXGE_FREETYPE_FX_FREETYPE_H_ #define CORE_FXGE_FREETYPE_FX_FREETYPE_H_ +#if !defined(PDF_ENABLE_FREETYPE) +#error "PDF_ENABLE_FREETYPE must be defined." +#endif // defined(PDF_ENABLE_FREETYPE) + #include #include diff --git a/core/fxge/skrifa/fx_skrifa_unittest.cpp b/core/fxge/skrifa/fx_skrifa_unittest.cpp index 1099741220..c549e5e0bc 100644 --- a/core/fxge/skrifa/fx_skrifa_unittest.cpp +++ b/core/fxge/skrifa/fx_skrifa_unittest.cpp @@ -236,6 +236,7 @@ TEST(FxSkrifaTest, TestType1Face) { ASSERT_TRUE(path); EXPECT_EQ(path->GetPoints().size(), 12u); +#if defined(PDF_ENABLE_FREETYPE) auto glyph_bitmap = face->RenderGlyph(gid_x, /*is_cid_font=*/false, /*is_vertical=*/false, CFX_Matrix(12.0f, 0, 0, 12.0f, 0, 0), /*dest_width=*/0, @@ -262,6 +263,7 @@ TEST(FxSkrifaTest, TestType1Face) { EXPECT_TRUE(glyph_mono->GetBitmap()); EXPECT_EQ(glyph_mono->GetBitmap()->GetWidth(), 6); EXPECT_EQ(glyph_mono->GetBitmap()->GetHeight(), 6); +#endif // defined(PDF_ENABLE_FREETYPE) } TEST(FxSkrifaTest, TestBareCffFace) { diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp index 793ea938f4..1c4a7026d8 100644 --- a/fpdfsdk/fpdf_view.cpp +++ b/fpdfsdk/fpdf_view.cpp @@ -218,20 +218,28 @@ FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* config) { #endif } +#if defined(PDF_ENABLE_FONTATIONS) && defined(PDF_ENABLE_FREETYPE) CFX_FontMgr::FontBackend backend = CFX_FontMgr::FontBackend::kFreeType; if (config && config->version >= 5) { -#if defined(PDF_ENABLE_FONTATIONS) CHECK(config->m_FontLibraryType == FPDF_FONTBACKENDTYPE_FREETYPE || config->m_FontLibraryType == FPDF_FONTBACKENDTYPE_FONTATIONS); if (config->m_FontLibraryType == FPDF_FONTBACKENDTYPE_FONTATIONS) { backend = CFX_FontMgr::FontBackend::kFontations; } -#else - // Builds without Fontations should always use - // `FPDF_FONTBACKENDTYPE_FREETYPE`. + } +#elif defined(PDF_ENABLE_FONTATIONS) + CFX_FontMgr::FontBackend backend = CFX_FontMgr::FontBackend::kFontations; + if (config && config->version >= 5) { + CHECK_EQ(config->m_FontLibraryType, FPDF_FONTBACKENDTYPE_FONTATIONS); + } +#elif defined(PDF_ENABLE_FREETYPE) + CFX_FontMgr::FontBackend backend = CFX_FontMgr::FontBackend::kFreeType; + if (config && config->version >= 5) { CHECK_EQ(config->m_FontLibraryType, FPDF_FONTBACKENDTYPE_FREETYPE); -#endif } +#else +#error "Neither FreeType nor Fontations enabled" +#endif #if defined(PDF_ENABLE_BROTLI) if (config && config->version >= 6) { BrotliDecoder::SetBrotliEnabled(config->m_BrotliEnabled); diff --git a/pdfium.gni b/pdfium.gni index 4d001c2da9..f48a16cd12 100644 --- a/pdfium.gni +++ b/pdfium.gni @@ -7,6 +7,11 @@ import("//build_overrides/pdfium.gni") # This file contains PDFium-related build flags. +declare_args() { + # Build PDFium with FreeType support. + pdf_enable_freetype = pdf_enable_freetype_override +} + declare_args() { # Build PDFium either: # 1) When set to true, with a bundled FreeType, built from FreeType source @@ -14,7 +19,7 @@ declare_args() { # third_party/freetype/include. # 2) When set to false, use whatever FreeType target is defined in # //build/config/freetype. - pdf_bundle_freetype = pdf_bundle_freetype_override + pdf_bundle_freetype = pdf_bundle_freetype_override && pdf_enable_freetype # Build PDFium with experimental Brotli compression support. pdf_enable_brotli = pdf_enable_brotli_override @@ -104,6 +109,16 @@ assert(!pdf_is_complete_lib || !is_component_build, assert(pdf_use_agg || pdf_use_skia, "At least one of pdf_use_agg or pdf_use_skia must be true") +assert( + pdf_enable_freetype || pdf_enable_fontations, + "At least one of pdf_enable_freetype or pdf_enable_fontations must be true") + +assert(!pdf_bundle_freetype || pdf_enable_freetype, + "pdf_bundle_freetype=true requires pdf_enable_freetype=true") + +assert(pdf_use_skia || pdf_enable_freetype, + "pdf_enable_freetype=true is required when building without Skia") + assert( !pdf_enable_fontations || (enable_rust && enable_rust_cxx), "pdf_enable_fontations=true requires enable_rust=true and enable_rust_cxx=true") diff --git a/skia/BUILD.gn b/skia/BUILD.gn index aa54741444..30e1656fc9 100644 --- a/skia/BUILD.gn +++ b/skia/BUILD.gn @@ -160,7 +160,7 @@ config("skia_config") { "SK_ENABLE_LEGACY_SHADERCONTEXT", ] - if (is_win) { + if (pdf_enable_freetype && is_win) { defines += [ "SK_FREETYPE_MINIMUM_RUNTIME_VERSION=(((FREETYPE_MAJOR) * 0x01000000) | ((FREETYPE_MINOR) * 0x00010000) | ((FREETYPE_PATCH) * 0x00000100))" ] } @@ -220,10 +220,10 @@ config("skia_library_config") { "SKIA_IMPLEMENTATION=1", ] - if (use_blink && !use_system_freetype) { + if (pdf_enable_freetype && use_blink && !use_system_freetype) { defines += [ "SK_FREETYPE_MINIMUM_RUNTIME_VERSION=(((FREETYPE_MAJOR) * 0x01000000) | ((FREETYPE_MINOR) * 0x00010000) | ((FREETYPE_PATCH) * 0x00000100))" ] } - if (use_blink) { + if (pdf_enable_freetype && use_blink) { defines += [ "SK_TYPEFACE_FACTORY_FREETYPE" ] } if (is_win) { @@ -351,7 +351,7 @@ component("skia") { # FreeType is needed everywhere (except on iOS), on Linux and Android as main # font backend, on Windows and Mac as fallback backend for Variations. - if (!is_ios) { + if (pdf_enable_freetype && !is_ios) { sources += skia_ports_freetype_sources } @@ -374,13 +374,6 @@ component("skia") { ] } - if (is_linux || is_chromeos) { - sources += skia_ports_fci_sources - sources += skia_ports_fontmgr_custom_sources - sources += skia_ports_fontmgr_empty_sources - sources += skia_ports_typeface_proxy_sources - } - if (is_android) { # Unlike Chromium, standalone PDFium on Linux and Chrome OS does not # require these files, since PDFium does not perform Android emulation. @@ -396,11 +389,19 @@ component("skia") { sources += [ "//third_party/skia/src/ports/SkLog_stdio.cpp" ] } - if (is_win || (is_apple && use_blink)) { - # Add the FreeType custom font manager as a fallback backend for variable - # fonts. - sources += skia_ports_fontmgr_custom_sources - sources += skia_ports_fontmgr_empty_sources + if (pdf_enable_freetype) { + if (is_linux || is_chromeos) { + sources += skia_ports_fci_sources + sources += skia_ports_fontmgr_custom_sources + sources += skia_ports_fontmgr_empty_sources + sources += skia_ports_typeface_proxy_sources + } + if (is_win || (is_apple && use_blink)) { + # Add the FreeType custom font manager as a fallback backend for variable + # fonts. + sources += skia_ports_fontmgr_custom_sources + sources += skia_ports_fontmgr_empty_sources + } } if (pdf_enable_fontations) { @@ -433,15 +434,11 @@ component("skia") { ":skcms", ":skia_opts", "../third_party:zlib", - "//:freetype_common", ] public_deps = [ ":skia_core_and_effects" ] if (is_linux || is_chromeos) { - deps += [ - "//third_party:fontconfig", - "//third_party/icu:icuuc", - ] + deps += [ "//third_party/icu:icuuc" ] } if (is_android) { @@ -449,17 +446,23 @@ component("skia") { "//third_party/cpu_features:ndk_compat", "//third_party/expat", ] - } - - if (is_android && !is_debug) { - configs -= [ "//build/config/compiler:default_optimization" ] - configs += [ "//build/config/compiler:optimize_max" ] + if (!is_debug) { + configs -= [ "//build/config/compiler:default_optimization" ] + configs += [ "//build/config/compiler:optimize_max" ] + } } if (is_ios) { frameworks += [ "ImageIO.framework" ] } + if (pdf_enable_freetype) { + deps += [ "//:freetype_common" ] + if (is_linux || is_chromeos) { + deps += [ "//third_party:fontconfig" ] + } + } + if (skia_support_pdf) { sources += skia_pdf_sources } else { @@ -586,6 +589,7 @@ if (current_cpu == "x64") { } visibility = [ ":skcms" ] } + skia_source_set("skcms_TransformSkx") { sources = skcms_TransformSkx if (!is_win) { @@ -604,6 +608,7 @@ if (current_cpu == "x64") { sources = [] visibility = [ ":skcms" ] } + skia_source_set("skcms_TransformSkx") { sources = [] visibility = [ ":skcms" ] diff --git a/testing/embedder_test_environment.cpp b/testing/embedder_test_environment.cpp index 61104c4176..fdc711a608 100644 --- a/testing/embedder_test_environment.cpp +++ b/testing/embedder_test_environment.cpp @@ -54,8 +54,14 @@ void EmbedderTestEnvironment::SetUp() { #endif // PDF_ENABLE_V8 .m_RendererType = renderer_type_, +#if defined(PDF_ENABLE_FONTATIONS) && defined(PDF_ENABLE_FREETYPE) .m_FontLibraryType = fontations_ ? FPDF_FONTBACKENDTYPE_FONTATIONS : FPDF_FONTBACKENDTYPE_FREETYPE, +#elif defined(PDF_ENABLE_FONTATIONS) + .m_FontLibraryType = FPDF_FONTBACKENDTYPE_FONTATIONS, +#else + .m_FontLibraryType = FPDF_FONTBACKENDTYPE_FREETYPE, +#endif .m_BrotliEnabled = brotli_enabled_, }; diff --git a/testing/fuzzers/BUILD.gn b/testing/fuzzers/BUILD.gn index d9a89721e1..789e3dcfca 100644 --- a/testing/fuzzers/BUILD.gn +++ b/testing/fuzzers/BUILD.gn @@ -100,6 +100,7 @@ source_set("fuzzer_init") { if (pdf_enable_xfa) { assert(pdf_enable_v8) + source_set("fuzzer_xfa_process_state") { testonly = !is_component_build sources = [ @@ -201,6 +202,7 @@ template("pdfium_fuzzer") { impl_name = target_name + "_impl" template_target_name = target_name + source_set("${target_name}_src") { testonly = true sources = [ "component_fuzzer_template.cc" ] @@ -214,6 +216,7 @@ template("pdfium_fuzzer") { } else { impl_name = target_name + "_src" } + source_set(impl_name) { testonly = true sources = invoker.sources @@ -254,6 +257,7 @@ if (pdf_enable_v8) { "../../fxjs", ] } + pdfium_fuzzer("pdf_fx_date_helpers_fuzzer") { sources = [ "pdf_fx_date_helpers_fuzzer.cc" ] deps = [ @@ -267,13 +271,15 @@ if (pdf_enable_v8) { pdfium_fuzzer("pdf_bidi_fuzzer") { sources = [ "pdf_bidi_fuzzer.cc" ] deps = [ - "../../:freetype_common", "../../core/fxcrt", "../../core/fxge", "../../xfa/fgas/font", "../../xfa/fgas/layout", "//third_party/icu:icuuc", ] + if (pdf_enable_freetype) { + deps += [ "../../:freetype_common" ] + } } pdfium_fuzzer("pdf_cfgas_stringformatter_fuzzer") { @@ -459,6 +465,7 @@ if (is_clang) { ] public_fuzzer = true } + pdfium_fuzzer("pdf_xfa_raw_fuzzer") { sources = [ "pdf_xfa_raw_fuzzer.cc" ] deps = [ @@ -467,6 +474,7 @@ if (is_clang) { ] public_fuzzer = true } + pdfium_fuzzer("pdf_xfa_xdp_fdp_fuzzer") { sources = [ "pdf_xfa_xdp_fdp_fuzzer.cc" ] deps = [ @@ -481,11 +489,13 @@ if (is_clang) { pdfium_fuzzer("pdf_cmap_fuzzer") { sources = [ "pdf_cmap_fuzzer.cc" ] deps = [ - "../../:freetype_common", "../../core/fpdfapi/font", "../../core/fxcrt", "../../core/fxge", ] + if (pdf_enable_freetype) { + deps += [ "../../:freetype_common" ] + } } pdfium_fuzzer("pdf_codec_a85_fuzzer") { diff --git a/testing/pdf_test_environment.cpp b/testing/pdf_test_environment.cpp index 5b4f70a1f1..cf8ff83645 100644 --- a/testing/pdf_test_environment.cpp +++ b/testing/pdf_test_environment.cpp @@ -19,9 +19,11 @@ PDFTestEnvironment::~PDFTestEnvironment() = default; void PDFTestEnvironment::SetUp() { CFX_GEModule::Create(test_fonts_.FontPathsSpan(), CFX_GEModule::RendererType::kDefault, -#if defined(PDF_ENABLE_FONTATIONS) +#if defined(PDF_ENABLE_FONTATIONS) && defined(PDF_ENABLE_FREETYPE) fontations_ ? CFX_FontMgr::FontBackend::kFontations : CFX_FontMgr::FontBackend::kFreeType); +#elif defined(PDF_ENABLE_FONTATIONS) + CFX_FontMgr::FontBackend::kFontations); #else CFX_FontMgr::FontBackend::kFreeType); #endif diff --git a/third_party/BUILD.gn b/third_party/BUILD.gn index 98bd9d8d7b..96068f14ac 100644 --- a/third_party/BUILD.gn +++ b/third_party/BUILD.gn @@ -38,7 +38,7 @@ if (pdf_enable_xfa) { } } -if (pdf_bundle_freetype) { +if (pdf_enable_freetype && pdf_bundle_freetype) { config("freetype_public_includes_config") { # The relative freetype/include path points to PDFium's custom config. # The absolute path points to whatever copy of FreeType is in diff --git a/xfa/fde/cfde_textout_unittest.cpp b/xfa/fde/cfde_textout_unittest.cpp index 171c8cdaf5..54980b78f5 100644 --- a/xfa/fde/cfde_textout_unittest.cpp +++ b/xfa/fde/cfde_textout_unittest.cpp @@ -93,9 +93,15 @@ class CFDETextOutTest : public testing::Test { TEST_F(CFDETextOutTest, DrawLogicTextBasic) { text_out().DrawLogicText(device(), L"foo", CFX_RectF(0, 0, 2100, 100)); const char* checksum = []() { -#if defined(PDF_USE_SKIA) && BUILDFLAG(IS_WIN) +#if defined(PDF_USE_SKIA) if (CFX_GEModule::IsSkiaRenderer()) { +#if BUILDFLAG(IS_WIN) return "02c55ce12d3c31ae32fa08fe59c38996"; +#elif defined(PDF_ENABLE_FONTATIONS) + if (CFX_GEModule::IsFontations()) { + return "8a6b320f8a4ae1febfc6e50513506dcf"; + } +#endif } #endif #if defined(PDF_ENABLE_FONTATIONS) @@ -138,6 +144,11 @@ class CFDETextOutLargeBitmapTest : public CFDETextOutTest { const char* GetLargeTextBlobChecksum() { #if defined(PDF_USE_SKIA) if (CFX_GEModule::IsSkiaRenderer()) { +#if defined(PDF_ENABLE_FONTATIONS) + if (CFX_GEModule::IsFontations()) { + return "8b657167ef063bca5adb38f6a5d5ae54"; + } +#endif return "e9aaffff1ea680bd5dc40a7b8904788d"; } #endif From dec451160f621a422066f2309c84a995079999ee Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Wed, 7 Oct 2026 08:29:31 -0700 Subject: [PATCH 46/72] [fxjs] Migrate V8 callback data accessors to DataV2() V8 deprecated FunctionCallbackInfo::Data() and PropertyCallbackInfo::Data() in favor of DataV2(), which returns Local. This does not change callback behavior. Bug: 559925519 Change-Id: I0f16a5437d76a4acfe6c71d3dff36ef53cc6de49 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159990 Reviewed-by: Lei Zhang Auto-Submit: Deepak Mohan (Robo) Commit-Queue: Tom Sepez Reviewed-by: Tom Sepez --- AUTHORS | 1 + fxjs/cfxjs_engine.cpp | 2 +- fxjs/xfa/cfxjse_class.cpp | 15 ++++++++------- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/AUTHORS b/AUTHORS index 00880613db..eccd868087 100644 --- a/AUTHORS +++ b/AUTHORS @@ -21,6 +21,7 @@ Chenguang Shao Chery Cherian Claudio DeSouza Dan Ilan +Deepak Mohan Dmitrii Chunikhin Dorian Rudolph Felix Kauselmann diff --git a/fxjs/cfxjs_engine.cpp b/fxjs/cfxjs_engine.cpp index 7fa7d49fc7..0aad165ddc 100644 --- a/fxjs/cfxjs_engine.cpp +++ b/fxjs/cfxjs_engine.cpp @@ -187,7 +187,7 @@ class CFXJS_ObjDefinition { fxv8::ThrowExceptionHelper(isolate, "illegal constructor"); return; } - if (info.Data().As()->Value() != FXJSOBJTYPE_DYNAMIC) { + if (info.DataV2().As()->Value() != FXJSOBJTYPE_DYNAMIC) { fxv8::ThrowExceptionHelper(isolate, "not a dynamic object"); return; } diff --git a/fxjs/xfa/cfxjse_class.cpp b/fxjs/xfa/cfxjse_class.cpp index 05007e884b..2e3790a5d5 100644 --- a/fxjs/xfa/cfxjse_class.cpp +++ b/fxjs/xfa/cfxjse_class.cpp @@ -46,7 +46,7 @@ FXJSE_CLASS_DESCRIPTOR* AsClassDescriptor(void* ptr) { void V8FunctionCallback_Wrapper( const v8::FunctionCallbackInfo& info) { const FXJSE_FUNCTION_DESCRIPTOR* pFunctionInfo = - AsFunctionDescriptor(info.Data().As()->Value( + AsFunctionDescriptor(info.DataV2().As()->Value( v8::kExternalPointerTypeTagDefault)); if (!pFunctionInfo) { return; @@ -62,7 +62,7 @@ void V8ConstructorCallback_Wrapper( } const FXJSE_CLASS_DESCRIPTOR* pClassDescriptor = - AsClassDescriptor(info.Data().As()->Value( + AsClassDescriptor(info.DataV2().As()->Value( v8::kExternalPointerTypeTagDefault)); if (!pClassDescriptor) { return; @@ -77,7 +77,7 @@ void V8ConstructorCallback_Wrapper( void Context_GlobalObjToString( const v8::FunctionCallbackInfo& info) { const FXJSE_CLASS_DESCRIPTOR* pClassDescriptor = - AsClassDescriptor(info.Data().As()->Value( + AsClassDescriptor(info.DataV2().As()->Value( v8::kExternalPointerTypeTagDefault)); if (!pClassDescriptor) { return; @@ -99,7 +99,8 @@ void Context_GlobalObjToString( void DynPropGetterAdapter_MethodCallback( const v8::FunctionCallbackInfo& info) { - v8::Local hCallBackInfo = info.Data().As(); + v8::Local hCallBackInfo = + info.DataV2().As().As(); if (hCallBackInfo->InternalFieldCount() != 2) { return; } @@ -211,7 +212,7 @@ v8::Intercepted NamedPropertyQueryCallback( v8::Local property, const v8::PropertyCallbackInfo& info) { const FXJSE_CLASS_DESCRIPTOR* pClass = - AsClassDescriptor(info.Data().As()->Value( + AsClassDescriptor(info.DataV2().As()->Value( v8::kExternalPointerTypeTagDefault)); if (!pClass) { return v8::Intercepted::kNo; @@ -235,7 +236,7 @@ v8::Intercepted NamedPropertyGetterCallback( v8::Local property, const v8::PropertyCallbackInfo& info) { const FXJSE_CLASS_DESCRIPTOR* pClass = - AsClassDescriptor(info.Data().As()->Value( + AsClassDescriptor(info.DataV2().As()->Value( v8::kExternalPointerTypeTagDefault)); if (!pClass) { return v8::Intercepted::kNo; @@ -256,7 +257,7 @@ v8::Intercepted NamedPropertySetterCallback( v8::Local value, const v8::PropertyCallbackInfo& info) { const FXJSE_CLASS_DESCRIPTOR* pClass = - AsClassDescriptor(info.Data().As()->Value( + AsClassDescriptor(info.DataV2().As()->Value( v8::kExternalPointerTypeTagDefault)); if (!pClass) { return v8::Intercepted::kNo; From 3fee6113b317026c0b4c7365837ba89b692fcfc1 Mon Sep 17 00:00:00 2001 From: Andy Phan Date: Wed, 7 Oct 2026 09:51:40 -0700 Subject: [PATCH 47/72] Roll third_party/freetype/src/ b76738eff..891f904e2 (18 commits) https://chromium.googlesource.com/chromium/src/third_party/freetype2.git/+log/b76738eff2f3..891f904e2e7b Created with: roll-dep third_party/freetype/src Then update test expectations to match the latest FreeType behavior. See https://pdfium-review.googlesource.com/159770 for corpus test expectation updates. Change-Id: Id4538089434ea8f7ee3b3981865b323b566992b2 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159790 Reviewed-by: Lei Zhang Commit-Queue: Andy Phan --- DEPS | 4 ++-- testing/SUPPRESSIONS | 12 ++++++------ ..._stamp_with_ap_base_content_skia_linux.png | Bin 21388 -> 21420 bytes ...tion_stamp_with_ap_modified_image_skia.png | Bin 46873 -> 47766 bytes ...ation_stamp_with_ap_modified_path_skia.png | Bin 53612 -> 53915 bytes ...ation_stamp_with_ap_modified_text_skia.png | Bin 54218 -> 54670 bytes ...nnotation_stamp_with_ap_new_annot_skia.png | Bin 55229 -> 55437 bytes ...nnotation_stamp_with_ap_new_image_skia.png | Bin 53681 -> 54303 bytes ...annotation_stamp_with_ap_new_text_skia.png | Bin 55351 -> 56240 bytes .../annotation_stamp_with_ap_skia.png | Bin 53891 -> 54231 bytes ...nnotation_stamp_with_ap_two_paths_skia.png | Bin 53718 -> 54023 bytes ...nnots_page1_focus_highlight_skia_linux.png | Bin 17828 -> 17951 bytes .../annots_page1_focus_link_skia_linux.png | Bin 17876 -> 18005 bytes .../annots_page1_skia_linux.png | Bin 17785 -> 17908 bytes .../annots_page2_modified_skia_linux.png | Bin 5131 -> 5102 bytes .../annots_page2_skia_linux.png | Bin 5129 -> 5099 bytes ...ded_bold_and_stretched_text_skia_linux.png | Bin 7179 -> 7173 bytes ...bottom_text_added_bold_text_skia_linux.png | Bin 3450 -> 3447 bytes .../embedder_tests/bottom_text_skia_linux.png | Bin 2321 -> 2325 bytes .../bottom_text_text_object_skia_linux.png | Bin 1199 -> 1222 bytes .../embedder_tests/bug_1558_skia_linux.png | Bin 707 -> 700 bytes .../embedder_tests/bug_1574_skia_linux.png | Bin 483 -> 474 bytes .../bug_1893_removed_underline_skia_linux.png | Bin 687 -> 692 bytes .../embedder_tests/bug_1893_skia_linux.png | Bin 691 -> 699 bytes .../embedder_tests/bug_410996566_skia.png | Bin 1563 -> 633 bytes .../bug_535730401_combobox_skia_linux.png | Bin 4767 -> 3521 bytes .../bug_535730401_skia_linux.png | Bin 3394 -> 2651 bytes .../bug_889099_flattened_skia.png | Bin 851 -> 843 bytes .../embedder_tests/bug_889099_skia.png | Bin 1119 -> 1125 bytes .../embedder_tests/encrypted_skia_linux.png | Bin 3400 -> 3410 bytes .../focused_text_form_with_abc_skia_linux.png | Bin 987 -> 970 bytes .../form_object_scaled_skia_linux.png | Bin 485 -> 474 bytes .../embedder_tests/form_object_skia_linux.png | Bin 952 -> 939 bytes ...otation_without_da_modified_skia_linux.png | Bin 673 -> 658 bytes ...etext_annotation_without_da_skia_linux.png | Bin 672 -> 659 bytes .../goodbye_world_scaled_10_skia_linux.png | Bin 12364 -> 12351 bytes .../goodbye_world_scaled_1_skia_linux.png | Bin 1301 -> 1288 bytes .../goodbye_world_scaled_2_skia_linux.png | Bin 3313 -> 3300 bytes .../hello_world_added_paths_skia_linux.png | Bin 2183 -> 2152 bytes .../hello_world_forced_dark_skia_linux.png | Bin 1324 -> 1316 bytes .../hello_world_lcd_skia_linux.png | Bin 1426 -> 1422 bytes .../hello_world_no_smoothtext_skia_linux.png | Bin 362 -> 349 bytes .../hello_world_removed_skia_linux.png | Bin 645 -> 643 bytes .../hello_world_scaled_10_skia_linux.png | Bin 6268 -> 6255 bytes .../hello_world_scaled_1_skia_linux.png | Bin 593 -> 568 bytes .../hello_world_scaled_2_skia_linux.png | Bin 1618 -> 1605 bytes .../embedder_tests/hello_world_skia.png | Bin 1426 -> 1422 bytes ...streams_removed_hello_world_skia_linux.png | Bin 1600 -> 1594 bytes ...llo_world_with_changed_text_skia_linux.png | Bin 1718 -> 1721 bytes .../embedder_tests/loaded_text_skia_linux.png | Bin 2439 -> 2437 bytes .../save_multiple_fonts_skia_linux.png | Bin 8145 -> 3232 bytes .../save_new_text_skia_linux.png | Bin 2440 -> 2431 bytes ...lit_streams_removed_stream1_skia_linux.png | Bin 11013 -> 10987 bytes .../stamp_with_color_scheme_skia_linux.png | Bin 52290 -> 52709 bytes .../text_form_no_highlight_skia_linux.png | Bin 781 -> 764 bytes .../embedder_tests/text_form_skia_linux.png | Bin 1107 -> 1086 bytes ...t_in_page_marked_non_primes_skia_linux.png | Bin 8257 -> 8229 bytes .../text_in_page_marked_skia_linux.png | Bin 13817 -> 13791 bytes .../truetype_font_text_skia_linux.png | Bin 3161 -> 3163 bytes ...nfocused_text_form_with_abc_skia_linux.png | Bin 1539 -> 1521 bytes .../pixel/bug_1072440_expected_skia.pdf.0.png | Bin 430 -> 387 bytes .../pixel/bug_113910_expected_skia.pdf.0.png | Bin 788 -> 774 bytes .../pixel/bug_1372651_expected_skia.pdf.0.png | Bin 1752 -> 1735 bytes .../pixel/bug_1388_2_expected_skia.pdf.0.png | Bin 430 -> 422 bytes .../bug_432208037_expected_skia.pdf.0.png | Bin 1177 -> 1184 bytes .../bug_477200528_expected_skia.pdf.0.png | Bin 4152 -> 4190 bytes .../bug_524043_1_expected_skia.pdf.0.png | Bin 1549 -> 1547 bytes .../bug_524043_2_expected_skia.pdf.0.png | Bin 685 -> 681 bytes .../bug_524043_3_expected_skia.pdf.0.png | Bin 1549 -> 1547 bytes .../bug_524043_4_expected_skia.pdf.0.png | Bin 1549 -> 1547 bytes .../bug_524043_5_expected_skia.pdf.0.png | Bin 1549 -> 1547 bytes .../bug_524043_7_expected_skia.pdf.0.png | Bin 685 -> 681 bytes .../pixel/bug_528103_expected_skia.pdf.0.png | Bin 1196 -> 1195 bytes .../bug_543018_1_expected_skia.pdf.0.png | Bin 1549 -> 1547 bytes .../bug_543018_2_expected_skia.pdf.0.png | Bin 1549 -> 1547 bytes .../bug_551258_1_expected_skia.pdf.0.png | Bin 1549 -> 1547 bytes .../pixel/bug_725389_expected_skia.pdf.0.png | Bin 405 -> 400 bytes .../pixel/bug_733528_expected_skia.pdf.0.png | Bin 1015 -> 1002 bytes .../bug_736695_2_expected_skia.pdf.0.png | Bin 1459 -> 1442 bytes .../bug_736695_3_expected_skia.pdf.0.png | Bin 1350 -> 1381 bytes .../pixel/bug_820345_expected_skia.pdf.0.png | Bin 1426 -> 1422 bytes .../bug_909762_expected_skia_linux.pdf.0.png | Bin 654 -> 636 bytes .../pixel/bug_925736_expected_skia.pdf.0.png | Bin 1634 -> 1626 bytes .../pixel/font_size_expected_skia.pdf.0.png | Bin 3062 -> 3064 bytes ...tfield_focused_ltr_expected_skia.pdf.0.png | Bin 471 -> 488 bytes ...tfield_focused_rtl_expected_skia.pdf.0.png | Bin 467 -> 455 bytes ...field_selected_ltr_expected_skia.pdf.0.png | Bin 782 -> 804 bytes ...field_selected_rtl_expected_skia.pdf.0.png | Bin 768 -> 707 bytes ...otation_without_da_expected_skia.pdf.0.png | Bin 672 -> 659 bytes ...eneration_numbers1_expected_skia.pdf.0.png | Bin 1289 -> 1294 bytes ...eneration_numbers2_expected_skia.pdf.0.png | Bin 1289 -> 1294 bytes ...crollable_widgets1_expected_skia.pdf.0.png | Bin 2445 -> 2434 bytes ...crollable_widgets2_expected_skia.pdf.0.png | Bin 3139 -> 3113 bytes ...ext_form_multiline_expected_skia.pdf.0.png | Bin 944 -> 964 bytes third_party/freetype/README.pdfium | 4 ++-- 95 files changed, 10 insertions(+), 10 deletions(-) diff --git a/DEPS b/DEPS index 8b1b554db3..aa44c63d70 100644 --- a/DEPS +++ b/DEPS @@ -146,7 +146,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': 'b76738eff2f3846721f76f023cbb471396932669', + 'freetype_revision': '6f5bcbbad52e111296bff1bf115c4504d31f3cef', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling GN CIPD package version # and whatever else without interference from each other. @@ -228,7 +228,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling pdfium_tests # and whatever else without interference from each other. - 'pdfium_tests_revision': '6a4136071608f159f45e274fed1b7d5f4272ca8f', + 'pdfium_tests_revision': '141d7ba49d797e856f57fd7e76a9b7f73468988e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling result_adapter_revision # and whatever else without interference from each other. diff --git a/testing/SUPPRESSIONS b/testing/SUPPRESSIONS index cb7e9ffc94..b24ec4ecf8 100644 --- a/testing/SUPPRESSIONS +++ b/testing/SUPPRESSIONS @@ -190,7 +190,7 @@ en_contact.pdf * * * * fontations fuzzy=10,0.1,15 en_diy.pdf mac * * agg * diff en_diy.pdf * * * * fontations diff en_foxit.pdf mac * * agg * diff -en_foxit.pdf * * * * fontations fuzzy=10,0.1,15 +en_foxit.pdf * * * * fontations diff en_fqa2.pdf mac * * agg * diff en_fqa2.pdf * * * * fontations fuzzy=10,0.1,15 en_fqa2.pdf mac * * skia * fuzzy @@ -453,7 +453,7 @@ form_combobox_time.pdf * nov8 * * * diff form_list.pdf * * * * * diff form_list1.pdf * * * * * diff form_same.pdf mac * * agg * diff -form_same.pdf * * * * fontations fuzzy=10,0.1,15 +form_same.pdf * * * * fontations diff form_text_sign_url.pdf * * * * * diff format_combo_box.pdf mac * * agg * diff format_combo_box.pdf * * * * fontations fuzzy=10,0.1,15 @@ -584,9 +584,9 @@ xfermodes2.pdf * * * agg * diff xfermodes2.pdf * * * skia * fuzzy zh_file1.pdf mac * * agg * diff -zh_file1.pdf * * * * fontations fuzzy=10,0.1,15 +zh_file1.pdf * * * * fontations diff zh_function_list.pdf mac * * agg * diff -zh_function_list.pdf * * * * fontations fuzzy=10,0.1,15 +zh_function_list.pdf * * * * fontations diff zh_function_list.pdf mac * * skia * fuzzy zh_shared_document.pdf mac * * agg * diff zh_shared_document.pdf * * * * fontations diff @@ -684,9 +684,9 @@ example_004.pdf mac_x86 * * skia * diff example_028.pdf mac_x86 * * skia * diff example_055.pdf mac_x86 * * skia * diff font_1_embedded_font_en_feature.pdf mac_x86 * * skia * diff -font_1_embedded_font_en_feature.pdf * * * * fontations fuzzy=16,0.1,15 +font_1_embedded_font_en_feature.pdf * * * * fontations diff font_2_embedded_font_en_size14.pdf mac_x86 * * skia * diff -font_2_embedded_font_en_size14.pdf * * * * fontations fuzzy=16,0.1,15 +font_2_embedded_font_en_size14.pdf * * * * fontations diff new_stamp4.pdf mac_x86 * * skia * diff octest.pdf mac_x86 * * skia * diff path_5_pattern.pdf mac_x86 * * skia * diff diff --git a/testing/resources/embedder_tests/annotation_stamp_with_ap_base_content_skia_linux.png b/testing/resources/embedder_tests/annotation_stamp_with_ap_base_content_skia_linux.png index 22d3f3ca68780308fd538cb0eeeb7dc346fcaf1d..fde8d8308995d5b7d83199db545b06f1a90ed952 100644 GIT binary patch literal 21420 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 a3)ib2p)KT~P8WlQ^MbCCPN}wi*na>zRbv1E literal 21388 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 A5dZ)H diff --git a/testing/resources/embedder_tests/annotation_stamp_with_ap_modified_image_skia.png b/testing/resources/embedder_tests/annotation_stamp_with_ap_modified_image_skia.png index d86556b54b04a7190937f0e90b68c97669f24046..d94e1f78a10a3a84d35e756fa3aa12f5ec3fb849 100644 GIT binary patch literal 47766 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

l!OtLaLwsG=Hmh`6n+~~c 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 P9i5h%zG|`ZttbBhj{KdL literal 46873 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�*I@P-}RLiYsws=tfN3uRx$DEQ2{^ZfzxaVi#- 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 diff --git a/testing/resources/embedder_tests/annotation_stamp_with_ap_modified_path_skia.png b/testing/resources/embedder_tests/annotation_stamp_with_ap_modified_path_skia.png index 877616c539c51d41376c9a60462463b2adfd6c90..1b2ab8804de468384f9c4a4eb84524d0564b40eb 100644 GIT binary patch literal 53915 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

Gsa)^O#2xCRtnZBuPAc!3uvbT+xm?*(lQH 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%0D5H=j&_EqJ@Qp%odv0oqKPK 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 diff --git a/testing/resources/embedder_tests/annotation_stamp_with_ap_modified_text_skia.png b/testing/resources/embedder_tests/annotation_stamp_with_ap_modified_text_skia.png index c138198bca21b9f9f590a3ffcdeeb0f295b4ca74..59a97cc0cbfa8e050766bb1ad8a320d020ded707 100644 GIT binary patch literal 54670 zcmc$`WmHw|*EdRccXx?MgX9KOknWQ15|I{ROGtMLn~+wJ5D*2W8$GbUSMtoEZz9D;nlu^IP`B){Iv_5Gl`gmb-lLn)dSbk{xk~ZP7}PpKW1} z(5Py0zS~_nYvL-q$3@QOx=o22vCTMq_o!DAi{bX%`>`0IVH~)WnCQ9vBTvTDV_eyD zjFmWDori`b?v##0n~(r6Mx6)4PeTGL&mDXa66%$^ZV@|A$}me|>`giP!vzwj<;lh9*8}ef*m4 zREz6XfrGV7HHz1_cQKUj+{Q~3i+(YjGbQ-)yrVp6 zG#nk5Z*4EFZZbO}`^S})lpgBjV!k!?I&_6eO)OMhr6wlqj@XwMDO;Os^^7H^9_deG zmC4dq5&CD(vG44Cx82c5VL0cc)!p5_R)RGwL!@6qsVubL%(TUvH!jB^89`wcB9Fdb z%*I|(k2rf|DehI*{`?EJPU=yIUu%AUomziWd~v++=1O0Th}(3n$-(kt`%VS7o~$ey zx0WH~t6X7EwZVabk#zP%8TYaLFX&qvle`KI1rm;2^1du3Y9(`RH`qOU9Haiu)ET`R zYd<>_u#ugFZQA`P@jGs9JB0f0tY}1fAO8OOBJj&yQootHnM}2lmxU54D#)QE+MUFb zl9FGaU*W$;{`ySn$!ulyAvzl8;>C9JN2Yg9|L$jUtBnXw_EqcTB969XJU!Ph#gkpI zZtlxbsg-hnohRYggD#ZuoPX-=*d0DRt`>E|(La{Uhart-QM9u`UYVh}YxvLo*#++7E%|0`twRoBp-4^whs<(d$P==ko z-d-vi3g61q)UnQ6+wULSlk3gbTSs_#IW4KOmZs~cz+MjP9(kA-) z6=vagVG{|=^#vJ~A>^`d{5||bN+*!@!`8+f!6@T7KJDIf@4VF~ilnQp{_R0aUAHaA zi0fG;xkheUN?;P!YhXo1fF{?3D zkcrsyjqSY8VNCdO8Fp)Hz36Vs-up*p>-bXKK}d}W<*Gg=CS$6i%-F5D*1@X9-YB*G zQc~Ea15s={Gv@qbOXsnxiQN8O{;QYrpTMQlu;Znwsj*1xub-E6^Tl5Im(QNQ-J=fa~C&2%eNPs;8b z{_dX$SQ}w|8M-P|JEAFW(bo;(=kdh0gncrf|6~!Uwko% zaO|RY*R5@?{rdNfw#2vmU+0}Wc(qi7{WT_0$dC8ob&iTZU&uC}xI-7}gDWh_hX^9N*ik zrq6qfA1NdvLLy((ZS~~(2l4Dk(}()6wl7PE)4Z+JB)_nkz#G9Qf{_2V+^Z&TP$a9P zPko9nCh}^q^fM*9d|H_XTS?62gtHxzDj4lIQKr@;z5MQhp5WX{>0Ls&PvZ(awOrMR z&`_L$;QqUWTMEttac$CNak%(I&Gp#dqbq$r-&*PmCQcHjxZWxiljt*J^IcRp7wDsqzg<3rxd z34OFfSkH;lmWZ64GCMoFzVg!2QnYhQQj)s&OFRh~C=&cyX<0p{iQEY(PDM8tJBE$! zw!keDpVCnYsucSzcD#7;BBoonK%A3>rS{r^rSseqcYmpVj%%$Rgo04cW~|%bz_35& zB{*-}Cia}0phU`5D=d9ymW)|EZ5Iw$dnQ(W=f{s9xVX5-o3IQA{ni<7WBHV?V{pz} zHuUKnM7fTn#f%3?Thy7usw{NfmZ6OJ?|ZHK{}aym|EdvBNNZ(s-B$|P+}ZK}iZnJh z#-Iz?<$Y^Ce(vuZ<%zt7BABKZxr=#|M9UwDL4V!avg<)&p(5#$!WK`gX2Jx~ zrGk3-aL3jL=Xm+}@N&t`T(_6HTc+YfE$W=KM%BpQx81P4dUX^aLE*HD6gMv&6nF`n zryF$^^})#+1y~&Ykb3loO3hT~!32A#z_5%_r+;rf^OJL>pnqSS5xuD}1^!;neO1Paz7S#LV4I~5C08?Lqfm}?~_o-{2( z+;OQGf%jI5xWh)w%geiBGrK{~ES@KJE%0Dxb%gB*YF#Au3o}O-l)4GE)3{lY8h|UN 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≪^=zWFx81vCzA@_DeTz4*35lqKqG! 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

yWrRt3mMoO)BE@JF?a>kf{iOamC4kR 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 Db*pz& diff --git a/testing/resources/embedder_tests/annotation_stamp_with_ap_new_image_skia.png b/testing/resources/embedder_tests/annotation_stamp_with_ap_new_image_skia.png index a2976e659a20705a3f748f4ec92bf2670d96ac29..779c3d2b5fa9561a3d7c75fa9820cbb7790795da 100644 GIT binary patch literal 54303 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

jUaRD)`Dz-~3`65Kk7h!AKVu7a(yw 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 diff --git a/testing/resources/embedder_tests/annotation_stamp_with_ap_new_text_skia.png b/testing/resources/embedder_tests/annotation_stamp_with_ap_new_text_skia.png index 83f0049b687766aab8d724563d5b5882ab7043c2..242e9a8e2ee45e362f84c3dcef544c00614a520b 100644 GIT binary patch literal 56240 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 literal 55351 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%0DU$WRLaP8jGj!xJjndqa{K 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

p|+>V@vxLEhLljv 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 PN6URV71^SDhJODW1k*Dg literal 53891 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

j12v(FvDulXCM_0x`Lk6iABMBP~tph@d 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 z
    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 OhmNL!Mz)%*?|%b8&rh)c literal 53718 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 UIMZ)i($i8obx!fMys^js0QH=DR{#J2 diff --git a/testing/resources/embedder_tests/annots_page1_focus_highlight_skia_linux.png b/testing/resources/embedder_tests/annots_page1_focus_highlight_skia_linux.png index e595c2bcd2ff3a14b8d539144e977e14e70d6380..8d587ab07c80d533ed59c9120e0d31048e89f599 100644 GIT binary patch literal 17951 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 literal 17876 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

    ;79x0?;9Qk;#-AX>WIm0 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 literal 17785 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 diff --git a/testing/resources/embedder_tests/annots_page2_modified_skia_linux.png b/testing/resources/embedder_tests/annots_page2_modified_skia_linux.png index 2c13a5b5af3508d3a6927ccf1f8a4234578b99c0..f24d344a22ab9eef98d4f7bcbf7de45a18c1b352 100644 GIT binary patch delta 3191 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 hH

    (D;W5S{2jfAhiD|002ovPDHLkV1i|0dSn0q delta 3179 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 RvR(iH002ovPDHLkV1k7NoK*k- diff --git a/testing/resources/embedder_tests/bottom_text_added_bold_and_stretched_text_skia_linux.png b/testing/resources/embedder_tests/bottom_text_added_bold_and_stretched_text_skia_linux.png index 1dc83c74c7e2582320e230096640f5e84c14e106..a696b87a0fe9ad2b7dbb116a4123436ac55b3d91 100644 GIT binary patch delta 6368 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 literal 7179 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 diff --git a/testing/resources/embedder_tests/bottom_text_added_bold_text_skia_linux.png b/testing/resources/embedder_tests/bottom_text_added_bold_text_skia_linux.png index dad708444df3213cdf00457f5870f873273f58c3..015a80908dc38f5b53dfd5323b867b78730ededb 100644 GIT binary patch delta 2199 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 Z_g`oiY}b@#4|D(k002ovPDHLkV1jQWsFnZ# delta 2190 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 QCIA2c07*qoM6N<$f}9SMaR2}S diff --git a/testing/resources/embedder_tests/bottom_text_skia_linux.png b/testing/resources/embedder_tests/bottom_text_skia_linux.png index bc0fd2212294f2f07c5c494a5a2d470745b8df3f..cc9d46c40cb640c3f9ea871b7f114e19ea46661c 100644 GIT binary patch delta 1047 zcmV+y1nB#b5|t8=BYz0oNklqCsi3a03+=rP;+fn#OSIrU~Aj-g7aI z7wj)F=H~<3+50@dodfUt0&@zJ5CTn;?*VR;?*S;2906&O;BNwR3X>25O_T2dZj>on))U&pV8qb;=cEJyxnfF0vuD*w>aG6Hd+~>R-wd2z-lm08R z)Z8@}{NOG%Co^**yKE!-dtj(~Y+U}7jlGLkq?eZVDj2o ztMC0{VbAp;ywtPntYfKx*DJ>tjBE@wgYwHZgfQ>gK5zHV*`@tN7X7O3QrlQOY5(%F z)JjY7*251x8dhiSWaZJF?5Yhd6Q2t=&ud%VJ$?0y?rYi9si7gUq4oKpf2q0Vyl`^B zD{WsSn(OnIv?lxhw4+l~G?rb<-uR-q`n(0LFWes1^xN@QvO2Z4DE{4{$uq);B}c1E zLw%xd@5qvzUD{VSfWu;n=}U zWWUBwgmCMc`odG;*+)X?f43zX%dX`_*7;=E)+;=`Fod_~@E#Krd zHO9YceR@=g<_>h&e|LP~g0@etZaE{eQ<=4FWYJtUvd?b(rFGWA%rn`>gOi{5vG|Y1 znX!i2qHX(bE6LfV{YKV2EHAm``e{u!bW0u0?Oc_OY-cjwcV+s25>?&0y%pV?`X|Qx z7E*I#3O8>b9=~aQI3u!#l5 delta 1043 zcmV+u1nm2j5|I*+BYyw^b5ch_0Itp)=>Px-%Sl8*RCwC$)_bhia~#LV!>OZ$POD_6hCd=Da|vTJn+-E2hU~DD88Mf&g)#A z4+1#?lVJkYlm7w^lPm%ylb{1`lb{1d0vrL8AObOypaX7`paVmb+yobs{{lCY{{lCY z{{lCY{{jbp{)3T~zq@|$pDuPzO_E&mLE7g0ZdKa#yZajc^1)Xe^GeTso#o!b|1`4g z!~S%!vN=gI?e8L6*_<5tmk%ymSGZ4P|J%s+jLLnNo_qYPx0}kJOp+|E9&`Gp-6IFJ zB)NY;^-FE%UofI>V?LXFa>H9ak=--)_gp$deY$((pq2{`7{6(4Q~lT%^KtFX zqpMa=AGR<_(lfiTr2f@p_sBslokJJZ4tp)Ry>8rPKPJiIxwB51(3SV=$JV}`+%|mD zLqm(U^qt6(w3Tn$d-TOwF(OHJlx@qk3)9~7B^&)g+6J%B{2Mc7dDaZslO&~AWkdfB z8_K$W^4Q5~Z_f6Ev+tzm^Lgp^&O_eJ?CRaS25e4xXN3=6dviJuem+l(Psf-ay3fBm zNm>VW6?*pZG=={)M2eJzzmTl!XHvy%zSv+3~O>GCPXk8 z#`Z^MBtP}r*%R3phjk~XbaWn>+;mxT!s?`dcUBbH;mMkc%wL?mJRwP1XCx~|C&`wB z^5CrGsmh`)eJiqyl8G;6%fKZ0<=XL+tIjBnY);ZPXVrln44t4 zx}M11uSha&Y3I=7mg|xctCHSXQDo&wXL+U{S5s3nBS~84B`c4~qm5^rR+2>vlJ_cq zi?;OL$d--Uo5%kcS=XW6zy0xFoislC$n<1Szwe5^WDPIw7g=HUhsYM()B8iMGm{ln z8~bn0`jRX;H+j0UXiMLXY{}W#aptM%XiAdQzEOxQb<474%&sIUy&;ck!AlE~eKxtSYFU!x(EG*@e;{eEt3T_@Y^|uuS;IbB zds=<{YuPWd^vnv8ZLO#(M3zO>)#rShB(1YsYA0^V+~E`7nKV7uRZdw_RkWoZuSE8* zYF$ut@x!Y>XYoAmNo4+^iibDr~@=llRJ07HSEz@OY6Oa$hI^na}Zo>zGXFujesYJkVu z$nQuSIkXm^0u8{cPP^ror#-vp(cYBn^}8MD+seK>1(!pgyTs!)U?lLP(|#}5s8t9e z*F(TBYTE_O1V1F#z+u_pH1M)y<%`F1 zaV-X(0lwGRPeS;G$vb8AzG=q0{PKWuV7}~p9vG{!G2k8|o{J zxE4=2*WyWSYA@iTS==!#E)$rnz6_7N8sJMH3m67m1A6FJD|sF zpk)H%B_pm)z6#8gyaO_9f8a^!&2hLz$s^)QFLbWO2GwK0Lf|{~t(N0-0iMO%E!dlo-9Wz;oK)L%{FJ^oBWCaN;v`YI0S73)t-;>|#Cek;gbL zT<4l=`gQ^D7{_R5`hEt6d*szPQSFGF@m*lAY450YJsja&y%k~7&Ag+)D>C*KAWiK{ zfz4)IsUn$0lssDCT=m8l`M^1q%YcDq-YQ^$M}JFii)(PJt)b z!+*}=8sMz6uAB7Qgubm442~+MO8|CW7`jR4kLQx6Xzq6UsE1BM?$kkFjqN|_* zm;j6rfixMi8}NW+ow7muy`(<jQ z@_gsA_29Kwr%fvG$U@FCOVOYbc+d1rHm}8f+E_gN_UWV!RAL&u08g5iS)O?<1?yO8 z>SuHaT!hIZBImOF-0xhr9s{=Nn)^$SFkb*E64zfPccb|%wM`CIA_v)TqSs1sEK#yw z+(Nx6+y^LfK6f++9pvP3J%-i-TP&g`q`WJI=Hi+ne~E5{zUFH{3Mt%K{0}UtU!5xG R)Lj4o002ovPDHLkV1g;RM*9E& delta 1180 zcmV;N1Y`Tg39ku|BYyw^b5ch_0Itp)=>Px(X-PyuR9J=Wn0siKRT#%VZm#CYY2H|^ zDUpT2O7@49>58BN!I}`}%7~~4DvGG+B1jkdr@stbcc^GY1zu*!BBByoE^{_D%gWR) zX6Bl$)N+}#e?Bi9PVf6}`)!)YzVPFH&h0tRdCqe?KY*RUOn+b!u!p0AIlx01V^0AW zNiP9z9pGMFz!?LS?~?(_P$-@OegbAi{h@r--q~@F;Q@WX-_gL?1&$pn#4=3&pX8Va zTnKy{^&by9DhNsB8UcJ^-*VtV;6q>+a6fPdupZb7Oikfa1T+AffX{)KfMTFl9^U~A zqcwMH&>Ml-Mt`oyf%lxhR2~550Ph29jVzaDoTp29+koxBy}{UA&+w^do01}5BhUl1 z0F}Ubz-rgD0awXuD$uUHn>}|8uoBn-Je?t57Qa`4f9$_9m>EO%G&i2QCTLEd;(%ceg1=?ti|CafMg{G<&htz+W;0cmjAX zMc`RLt43DrMspo&$VrQvqqMjRC@%QV`h4JL9U?{-uvmH`@TcF2KxdFL zZ_-d>`NjbUrHg0!}s10gUw=%Yq1-x^Gd+#tE8%!@w3V`z`yo zq$myG9j(5{b?XaEFDq2u-(EzOhA|m=m}Rdj1)<59r0%-wNyp{xI59^pjs-(XD}?VSiLf*8wj|?=u5koxx+NI_@^wPPczX zAm7^H4rdy1JH6vK174~7hBa4={eBOpw2M>bpKioB6*yuVdp?JM7WM^nk9$qfz&Av5 zOEY+M1ay}&jRW=u{oO{j@j0?g0Dkj43HG{XTc8uvOWcn2l*g|>NYhcmzfq$}usnmu zuYUpkyM_;NGjNMhxg_8{M%fem7@g}s`{o%}fAN@6;Tqd74T2K?CUB!92BU11GYo-zMgzm*o=t-!mc(Ikb;2Rh4Sl*j<9q|YU2{ywHb5gIH$yVd38`Lc4`}U`YpA{ zuXWC_Ac$n{JD8Dck*|(}43l`|j=IHUj?a{hr)=~?4;eQ?QtgpWk;7Mzn7=Oij zQj6jG0lg3v&}7Q$vZyCTz7K$}Rbai|{IGNDO%Ig?=;%lezdVHUWxYZH9+7vu&au)0 zJq_!0xC-Yq`C4uEk+sX$;WQsBvw_#V+ie=qxdrSygcBT1zzzLeQ|4bJ$zK-t^;Y@} uX5<>eiH&amT3T!=(P7~~gdrSz{1poVBtx_ZHlGFn0000gtTC#UkhW#?^6O#~w`fpT z{f+N)@jLKbJn-S1!#PI(Ng0vASCP*nfAVLLjv1~SdQvqfR?rLB5~XJBu?}(S1sttXS&7F^j4wyE_)&5LUqL%`D`acGy7_c*CLSXZMs#XfAGfl zZ!XE3P%xrs>&Ls!(Om97JkfdNcI|L>WdUTg?$ztc?6@y}v0ss(tOH5A<-d|YTEU2- z0cq7hE}M-p+mG(c-;q3Iz!+m*=()RF7J#&dC0*?;0ja;A%jRp64j%Xg;*%sjZd*NJ z0m$jFND<_NGxj;H;S=iY(Alk@{xRfR zsJ6@(mpt~qE#~;xHrJx=cH7cO+1xu(=d2|$Zz?ZKJ&P;4 zlCw9c(S#nkmVLMC%N}i?%4z*Yi3X-}IzuuG?WZP_Pa_Z@K!5-N0t5&Uk=q^^{6+l) X*-_)V0n6#p00000NkvXXu0mjfo#+p@ delta 566 zcmV-60?GZn1;Yi9BYyw^b5ch_0Itp)=>Px%eMv+?RCwC$)=x;&aTv#OZymBz6}jfk`ilM(`nl-0sSBxwVa7Wikley)EI(j~AJf)=|}iaLpc>X^y!)<&zO#10X& z4O$4Hu}_EJM1NsWCx6EKIefnG9KP`4`NH=p(0@_|K!5-N0+Hq;k^u>l0SS@;36cQ` zk^u>l0SS@;36cQ`k^u>S0_5)?kBjT3^u>ST?Xq69D5+0#E8g*RYh2Rti^25`{{7Ro znn-1zq{*!px+!@l`+0M3W zDoIY4ht+tXrK~@nvyDd02L-%Ww=ahbw4A%5>+4=dkG%Kn?X?MiWW=q+4ut~Jm`ajr z4J*>5^u~;t?e}%7^;t#!Y2_gqr*fMz^7I&Kg}uW+eS=pD%x)yWZ7?-{6WZCQBoc@feZ;36cQ^82m&10_-pZ4HA*G7XSbN07*qoM6N<$ Ef|oWBrvLx| diff --git a/testing/resources/embedder_tests/bug_1574_skia_linux.png b/testing/resources/embedder_tests/bug_1574_skia_linux.png index 13a610774cff8dc116407d3408f2d537cbe5a6f0..683603c9881ba9313b3067c8ed12bf0f918816c1 100644 GIT binary patch literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQbvS?whQ$*XCjmJNJzX3_DsH{KYOmc|D01Lq zvhjq6Wz}9&jyl;kPr6$@VS2)pNe}bxHSFrPXEwSuWlz&=A0M&6uGy|SJ9K0|f9Cu1 z)p)a?|^2f?5`D)%1!3&p%#+p2Ty>*ge`{T85*R=1N z`|$F~8M@-1tiFD@A-Cshy8GTck-8Pi&jkgyR|daLe>lO)*m(W4=lf2z?dh3QWB2@S z*t+#k-d(Ehobb`doP@Z(uALxc6*`xPiLIpB%HJN0PawdTu(k?zZaDbsW!H zy3@W-d~g3@>-F8XAGbcgIWOv;r>Ve@1rt7A`_8X!e%m|$sPnnWRp#H5CwzDEUwuz@ zes#5~bKbV?ennOvzijw)E9S)%?w?sHCZDH1i!?p)H1D8v<-FCaUKz`8F4vT~ z_;s#!o@Kv1>-hFf&o92JC1mu*=k1qCua90kTJYH7?XSnD|6Dwg&dx{-_*wjyNs}pL US!+VS5h(UNUHx3vIVCg!031VvdjJ3c diff --git a/testing/resources/embedder_tests/bug_1893_removed_underline_skia_linux.png b/testing/resources/embedder_tests/bug_1893_removed_underline_skia_linux.png index 1d6d7663a327921be1f08ebef8c788bd82b91c74..5a92b77ae76a1d7f60031c3e79b8948f3f23d017 100644 GIT binary patch literal 692 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQbvS?whQ$*XCowQEReQQPhE&{od&fFsilYeI zh1h~Z!$Q{(mkF&J8Asf?d=mu)oI7%_Oi&UC2xJNLm~bTAr)kjwF(o@LQPC|Q8nY8s zT?Cq^Np15;PF^U$%(k7QN$2sq^ZeJstRCJ;YSZK|f9LZ(^^na<9u8^%kDdt+?<}fL z%rCpS`$>s{b*Xy2_PM?<^H%HXF8#8lP)mmKr@eylT;ANvnki-F3txJcOz_$3mH6V# z`NztdPg2UCmOiXrBKvYhVO8*nbK;6QmD1Wze$JQ7T;F@qf(B_({%|81)aZ$CNs=9cu&rTJ;Q#nx9oOJ`@K2KXr+8oPhfKH1aL4*xqG zSe~NR*s}Jifq{v<0+1?Gl=HaU)V=jn^FN z`j&qtuIsLd+Fesv-!=bP)TxL67I&<>_U$A8?00oLr!6}%wQAC8Q>zJQJYJ@{Ot}49 z&;QL1ySd9wES+GiF60q%K0o#9)C+gyFNy3F`BZZE`3r@G`9^cgTe~DWM4fG|uA+ literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQbvS?whQ$*XCjlwO;vjb?hIQv;UNSH+WqP_e zhE&{oduOlr)kG2Yg8vQErmg<6$=y}*p%QDD2a6+%n|{#5Mo~d0=j+q8r9AV^Je++U zd0l@Ta^-HC#-_hzYLVh{g$!>G7H*{->hJsIEzGYf&o{Q=KmX(5ocr%{?zcs#Uu9sT z2AHJuB=+;eoij3C{hGCR88^3ll>G9W6VFAjKK`!g->r=T;g0|KPdsW}m^{Du#HF7H zFF!u%_)Wa~sFP*a`A3QVd@pxPYxmw4e(O>F{KAD4KFc3kN#}D`P58Jq|H%a(mtxhx z6TRX&pCUqtrV9px0^ZtRPd8i>YFc0y*sP$^g5^GGHW;O z++_RDB0FV*UY%F){99L_TPtvzP04@aX+>f7OU*}){*;*6bt33V*7UN_tncP~{?xw9 oc>nF9gv_>^jt*1=|5p8D=wJI|Wkr6cKPV-7y85}Sb4q9e0G!M91^@s6 diff --git a/testing/resources/embedder_tests/bug_1893_skia_linux.png b/testing/resources/embedder_tests/bug_1893_skia_linux.png index 52497d2ab6bb5cdbb18575f26da6723986c18973..fad3ff9c43aacd65086492feef30643d04eb491e 100644 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQbvS?whQ$*XCowQEHF>%?hE&{od&fE>#8HIp zL2N;xVWDe?%LE4zlSj&}%QkRyC>}A(@(|=$q0ywF((zGr@&b(&tsVVNuB^H>527MC z1&=IP+NQg0z*Ih%CcK0-n0?aeByF_`%Nz{%ge!% z`e%-?N}e>e;n{mrRDR$4tUG3v2D`td)xEqu^WD+xdH=s}NPiYkxu}5}z=e6`y7)ziETW zy1QNML2}XAzD3owW-yN zGaes9T_#xnUgz^>hvC#^CzejwtS;;kGXMUmRjU`KDlE|~(tL7rm;OaZr~fHCKB%;) zxURc3Wp~Wo2{%9Q-oJ70Qe~e0Uz?k$;boW^e}exqE}ak_xnvK24=7c7y85}Sb4q9e E0NZ6Os{jB1 literal 691 zcmeAS@N?(olHy`uVBq!ia0vp^Cm0wQbvS?whQ$*XCjlwO;vjb?hIQv;UNSH+<$Ag} zhE&{oduO-z)ItgNg8vQErY$bHxp+}e!9*r)l_mwI#oZw(39c;{E_^&?I4RG}!`au7 z*R|r|0#--wW~b;%iwVI3TU1q=SOw>(*H#|1jQMl&x#Yd+_kTRBtegHaT3mX`D+j88 zpq82p8!PE#UfKJbucjov3;ulB#QIWQ`p?bV=d3R~d$e@ISH_w9L##fUw(G>mSXj@J zd6KX(LTAe2A4+oNPbbX#y)op!@x{I^+opRxwtVtoc1P{yl}>Kq-%m_j*>P;9i{f^x zaK+m1Nh=c-FIGP}zA@M~ei_$a`PsMk>CSm?Z@%x@*|_a}r-WHqr~p(XJ>EM0J@x+X zw5*aC-(AX|B~`wKKTa!Dc9^xQ@OPfogmr7REmNm5UykgGS-bhG+jFiZ-)~*mmeph9 z$^I$(bCQX!o1y>f9Hf1)BRLd z+1To({M_cT?C_c&LK7E0I~;P8ul0KGpZnUai>;OR&TC5PyFYR2h7-%#(~j;FC|>|ut@ggig4?tod3}m6z2IVEN|D-**6rqmDWB^^>=jpV;Vf^iuC?d zVb8CA+q!+~S8pZ%F9H8*7nsd^VV+%A?)`C{RBwRYTkdB)f09-_Ogy@0>&a_p=WPG~ rrnq14m~iUfP0q!aa)?>SRHEW7*wl%_mg{an^LB{Ts5KPmcY literal 1563 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k2}mkgS)OEIV14B2;uumf=j{z&kC1GJ_K(F+ ztbVXAO*-5$YxXf0#dJY7$z4L+f1D<>IeH{I#BeC;iX0MfKG7=D^x#;p#{w3=?hnjL zQB#%%Pf+P<)mZU!XNOzM9I@i}F&AZ?_WhrI<8yRx`n~U8Z4V!wX?*<4&lmwK6poJtfz4WB_0 z|LKpPKPxYrOrJj8_4m)kEh1rYadB>LZhn5}mU>U;Ijo_tzddSgYip~gr{`~WYZ<=w z!yA8l1O^5=IXP)abL9R1_3`6JS65f|Ui<2AYZ4{W&&|1*`||w9mmb8>z`f)pcp}wJs$(Ogc&HukXdi3alkKew1+p}lSs#U9w_siQ? zeOa-1@#6)eW@cuuUccU7^D}8<#Jl_Z|9^OR_}aB=2X;qBMsCl)|E+2-(4WlA%)-LL zYuBy?27sujXmoV+Z}oZB80S73jT2*BHI)&FuU@$IrK|zIOR?@dZDQ*E?hm zi)!23?|&|^FG{vT5M&>NL`RD)Ndj5IlvYqJ-ck}xD`s#judfLh@{-*5rhYuV6 zyZyeh_+ z_;LLHy0>rNey!Tu_;vfXZC2LS@9*t>U9@waeZ8Hn?cdY#!rI!}WxH!@Yi*~TXQ}&N zH+7Co{{4M#-@M@|>h7KV{)p}ITlemj?Y^t4tGmBind7AAo}`B&7KPzDbNB`%E2EXD be^^%j?*4LLw&yLd&}Z;;^>bP0l+XkK*}<&x diff --git a/testing/resources/embedder_tests/bug_535730401_combobox_skia_linux.png b/testing/resources/embedder_tests/bug_535730401_combobox_skia_linux.png index 27952e9243c5d1f15b64387366c1df4a2d25357c..af631d63841747b241a8a6894cf442672ba8522d 100644 GIT binary patch literal 3521 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 Ct+7V{ literal 4767 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 diff --git a/testing/resources/embedder_tests/bug_535730401_skia_linux.png b/testing/resources/embedder_tests/bug_535730401_skia_linux.png index 7c0f98ef8af7d0b528d4bee9edffc157b8166642..18b891389563e100a40326147ffc0389db2dce21 100644 GIT binary patch literal 2651 zcmc&$XH=7E8pUC7C>A1J1;$W!0RcfH24Td6-c(?v1sPlrsd1!)P*w>GB25uNN-Q9X zA%RdsR{{Z)B1rF5ih)29NJ2>14?VMI=eWOif6O`G{qub9d*A1~&%NJy@7dd$9TYt( zDj*IB+9V?q8c(!}~vf_Q(Hdd#yE z?~Icm<}EkGC8Q*dBxSeb-C$|ppJz!@4=VMF%c_!c)RD6LK_8njND#OhsdcyegU*3c zn5EAhY0D2b;=#tOhvns0exZz;Qx?-9pAC9YQ(m_s8c|r5fNz81KR&#{Rtvy{!9V_) z0Q~^|@lVBF;eDX*VUTI2fGR-94-5>*pio~1@p|5mwLP#KH%CTBCVfEkPuXVzTrOXx z(-0x#gOL8@QWWF!q#cO<)RYv(-Kq*0JL5mRjzzDHkdR)Txo43tT&n|S(ruwRzAm{&h@iYpa$^MS|a0g>QMlSXGuBB+#t{(Xdwgg^-(@DpGfopFPAS2pmR_U*g=x${Z1KDgdQsh%~7_CT*zlH(8e}kJ^y>!{ zB9@+Cj6XEc-#@>w5HM2qvaF20f-7mv$_QqyO+4^0baZuvMlhGSYjxVHYBt%DV#|Yg zS1&^pef~>HQ#9jq7kZ0&Z)>zVC}#TYo#jujrlPs4dnX=Ivd%V$+P+OM{riW5QUS($0_QBH5dx@D4%Q%zDD@MTgAqO8%*I(f)F%-vr}sr9~x2!p{uGnXDj3_rUN zJN(Wx98kjsK3wk8bN%?(H2l7F>$4XxW=H)>HuFI<8M2;Kk-14)=M%j}L%lPJNQRSx z!|e?a#Zop?d2aZD>A=R6u(pPV6$U&%&cYCdwA9rT7EU^~LTUASYl3r!w4^JBtxb)A z;iTAjhlGUiwl@K_&@25#VrH_AX0{qm#R-1#hZQFaZE}lpmT%s^4O`3OUu7&u#{(x{l0`^^yuIDjYEXbM)qYGIDb2 zJjwfMvBEX}*hqQ@hp~uOgta^4T`IR}ycG7Od{dPsChHB3P`f$kDkdrlQ#awa0@HP^ z^5;y)9u6EQ>CP3=>2#)tpvzEq9yI+OV9ke9x10Qi2y<QuKw+%j~jDsc6sM2J({BB?6eT|qzke8aepgW1GvfmJZP43{0Y(|^Q5~=#SKvG zKEeI^f#d99qSuu|Yu~TNYihM^amcyo^ zGLa_E&dznAt4_sNk?Yg%0Din%%_-hUoS2NXj7;0L<-V6<(wgR~(2$i!#ffsD=v^KQ z=Y+3aF3kD$j?{Bu1HX=kD)P`!Ys&cuW)>s}K@s^fRAM)9L~Nqelic?-PuI(o>g|>0 zqWsDxM_OaifF^Pg7&3!S@6I()0-74s>oL5dZ4-Y;{*i-6S84({$zbIFjxs%L6;*rbM8 zK9BpUN6s)jc$=J*QCe1Zi#kl?a5zMB3Yk>xRvkFO0b9e+VdKbnVR(D$WF(`jAEDpd zfM(s3P%DHyMoi3*ZMB?{a5T-_aNI7eDcTV&*08{48l$5R_<-0ZTp?20a&s ztDArl#s5%f-pv=r`Pqi7^r_7a)0aJ(MxD+Ce{8?Mn-n;P!19_uTJaMW>*;==#P!6K zU=}u3?rF^~64SGZvH)0TP)fNB{%kZaelt3Hy}#P0m81JS-O@$qEiGtJok?_2lvZ+TJ?l=~=Cst&v5<&JDPQI^PWtJ>PTRdXs(eLV*DKC zehUtsPV~SZ1H!UM=uyK1R#+3^Dsw5!AhRhAL|@5nDQN-Cg9JHHp$}oQ=~3H_$J-QT z@bB45iT&(y?Z!3ZV3?aM2S3GzA24#OA_QV|+j)+cdJuwFa5!OjxDY(t*9>+wY=a5$ z7T+^ivxcfkOqk>!JoazXeRuHzMTq@^`Pt-moa}5m!la3OwW&Sk(C;Mjdp_7Jo&$pZ zwRk(>o2TJRUk?R}A5VOHBl-N|SGNPpfna}I{youugy6r#teqKlm;v$oOO5+FaA_2< MfZM_dCfDx%3-f=IU;qFB literal 3394 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 AG5`Po diff --git a/testing/resources/embedder_tests/bug_889099_flattened_skia.png b/testing/resources/embedder_tests/bug_889099_flattened_skia.png index 039d46cf20da91d5e8fa5ef7ca1ca2fd46bc5a74..349b9a6ce4211c79196f1639a7d8974ec9d2f7ea 100644 GIT binary patch delta 387 zcmV-}0et?`2FnJJBYy)DNklo3JS9On2SM@avL7H_6G! zfQjLfNhueTiTo+<*DV$&W=iK`@uy_480eR}!5L)vp*Y|BWx>5HKg*AF8F@UXcYU@; zpZa{>MYQY+1h8Pif&~i}0$8yA6Rf4lp`JBk&wg{#81D@0ihnb(k|YxYkJ|62hN?ec z_8Bc(?rUrhHJH-kK}* z*2{i3tE(G3l21iZH0EpHk}WgSyOVaYaNtrh0jsNf8GEi?D{*OTa&9EFKs%%czgB7x3!1W$k+I#!zrw)4!{~}n+&kx>i2$SFfTa%CitCNrd htCNrd4jBDg{Q!8Kq7%OJ)YAX}002ovPDHLkV1gj@$m#$9 delta 388 zcmV-~0ek+-2Ga(RBYyw^b5ch_0Itp)=>Px&4M{{nRCwC$*FQ+qVI0TtgCHS@!;7FH zqCv^RAdFuHVMS;|wb)QiH3&5|DMWM8(9k)#sOVf!BD6F$MbscjaL}JYog#=!L~il- zY3N+82x+X>d-}q&z4*fOJe6qMRS>{}1q&7|SO{Rj`cJUR$A5j*y%*m7=A=H_9!B=x zhm|B5Ke|}9X8P9tfR!;=Ns=#J@7vSTU~zmQc`{I(Yh>ek|InS$Bx&q`wbgu2d)Peu zJRhoGmust;J(0z{U)$*KA2%So%!yf%^CgVoWCgGrLx_16cI zT%3A%Bgw9h!&|e-BUl|ZyWS?rt)H89a$)*XvQb&PI+2XS>g+-9o3b@mdsQBJmPYN{ zYWGT}22(%3`TY>AUz$0#XWx~@Wa&&%yiA@B6vLmhKGJjc?oGGhUj%FWdBOV|!m|+q iA_0?60-YHDRzCpQFsCt(#OhlB0000XXIoupTwZBiUus@pYhPh(U}9}yV{T<< za%O0AXliw7Yj$mKdTwxgZ*hEZa(!`gesp$$b$5bxc!PI&gn4_0dVGg`eu;m9jDdrW zf`pHQg^-Afm5Ys-jED}Mz;NtD!0< z@#W|8=IHb2>VNg=>-OsG_v`KW?C$yR@%-@e{qghu^7Q}z|NjP*4UGT*0}M$-K~#9! z?bpdtQ&AL#(JOMJsDWru!6*VY*dj#5E-1DjMx!KA`S1I`hZCGc%d#9~AnO~Q>0WiJ z&OSvohBAi6F-HLl7A#n>V8Ma~3)UgQ+Fx%>Ots$qW`D@`^1nB!c`e3B}#_I5S?aRm7 z*5KB;JZSdb*WIiUtjBZ7UQrb7Zuvbq+u69742%BaTCxIb1nWgTNpiLQww~nD!@EmK zCO@KGx#TtchYcRq-(%U}{S9H0 zumV<-&;mCCLmQLr16q>~1UZuq1UZuq1UZuq1UeW0v>&JxQ)ifNahm`D002ovPDHLk FV1jW=fIa{K delta 655 zcmV;A0&xB12;T^hBYyw^b5ch_0Itp)=>Px$2vAH^MORs5SXyOTTxVNdXkA}wUSMlr zVr^k#ZenC_V`Xq-OsG_v`KW?C$yQ@cZ%e{_^zy|NsAh_)@(900RX{L_t(| z+U?h0Qxahmz+uXQ(lp7k)vN$XE7H5E6x_CDz9^_)(u$aSlbi*k+Sku92S2Zm5yUQ ziT9Q4bjr;dz}k2c(J2;hrtRBV#O!u+KB8ObETj=jum-R`j^_itNu!`jWe>KZRr+~cI*PTq zNS|k&Nmzd^rOiioM(g|eYnbdtY)&WDcAVBHp1xW18ve%y59{BtZ1DaKVUy7UJCmRS pQ3I@N8D+HXef1%?iRQ@paNd%MKQCP$}eKh#Z2(s0BD+97c!)G&vcp1R5YCKo}+|Pye;;R;a?Rhyb**~6u8Z&U+~32#5BKxly=Th{ zxXbcP0U|?WATmUT$UtO>43jMgEPvyFII?#?IyimH6w&ID-RS?((clZFh*poRZ(d$Q z<$d>5M9qDln)X~?UX?kbwIe&!KF)vXRNcMT`qx~4BfelIEIUI$YGrT~*K1S6AP2X2#I2T_yj1__b{H;qgI0~~Uo9|`!U!aP zsY8zZw57Ha2c;w=NDovGA5eorf0;NzJ1fPA${H&`>^+awv9#B)bA5lvUMr4@@RiOqU_FVTiAVa%bwzh zG4nngm!-&V&H30h&ct5_Wswc5KUH+1Bu3U|Utn>!)9Hr2&cubTvm*L=Z`)XZWLv(n zcwJEx*PR+U;*W<*;=s-n!-1X8F3*lt)!ts%T+__b@>^pkF5K09%C@27-)Uj@!KGKS z$o|$f8`q|D%63#gRo!9R&XSS4ws)Obcr#rSSw%5Ee@}-sld8w(ANeq{^7L;?P3~~I ze_a38neWD5#%JT}U2-pS`;XIqX2qJc`S#VD6>~O4&qxOz**GueRHvO+R?S_SUd=C` zkLB}4)&?WH**og8$foYC9hruU8XGIpX6%*^BHR0Vb4|S(ns$~&kIMs_Hq4Hu7Ixn( zk1Vo_U(LqV>724H6;WFpkKMS|vtejVt4Y^<5LxA#*gt4__K+f5Fsh5r*K=u`odWQ>auI!Esht?&&gJ@ju9PRSQO7^-wiLnbL@%q zYR-0#xobq$h9es>e#ZLTqO#-7w3*qwk}bF$9j`|GJZd^stm;4GXO{=Ywc>84TiAVN zSuV2Uk7ncSoU;7ES!C&d1JXk&vWm)d&3__`Ub~tji}=&nbjMhd63h;#MeW?ArnCLy z&$*TC{qAuxKcZ%4tXPo!Y@dAga;KusJtJB+@HV6AOMXar=P4D^O{n0clE;jbqJ|iO4bTL*eZ(;X;=Gt6jW%ILfc1~H% z@ZZ0ktz=iTm2ArH@@S51<(hbHNB3JRbCIo%*CwPRn{&SAd&h z#U}>Le(Uhqm+Di0WN8!CB~ypJRJAvKMnC++>64De@QG7ze*Y)icYXcn<{u5&)57jl zN@=HQlP5Q3<8;ok{CU4^U-!swc8)22wc(r7N7bckDj!&Qe&(zDdjINsjol~g>-}bm zZ1B{gx69+~g9QZ}&M$nRGTr*=J_QA_VZx|u**JbTZp6NA?AL+PCois8y|r^e!NFW) zJ>t-);YVV6>9llkcFFC=;)nM1+jMc>rD1)}h^%e?o$M1-)wa%^8iuvJze~yK*8gvv sF7YRf|HsIF-SMR978!^PkwJ_84KyWL(5`ee=>Px#07*qoM6N<$f^X9*8~^|S delta 1565 zcmV+&2IBeB8ps-uBSQcIb5ch_0Itp)=>Px%c~DGLMGOoK4Gj$y6%`j37Z?~A85tQH z8yg-T9w8wiA|fIqBO@dvBqk;%DJdx`Dk>{0E0J!i18r?>vl#)K0e=OriJbrd3VlgL zK~#9!?b!Q&)pZ@faY`yHQ{p0G$i)y5f?(7F957%*5(sDxhQTVJ0RjoaxP`!`T(Y=| zqG1Mw5O=0v%D4=Y`!?45FY5C>&K}BR{x%+uRnO<+!S{SW-^=+PzUQ^iIa|Acd#s&X zfXEOThzyY-G7uRe1Cy-S6bY){g8*hp2lnn!Z{$;N3V8_nFDKCy~AV^|G?Ei@*8CyiY{Ny^8F? z+}eTs$3(`xi0s&R;?h?>NGoqdWBd48ty@H^M|SI>@n=^&TD&+WObdEuL5v*mmU~2N zN0X2UD3fpmMg!&+Ad^7_)|21`43k|5Ta$1EeFNqeAd^7_)|21`43k|5Ta$1EeFNqe zAd^7_)|21`43k|53I{=}M)t23xRc2UB!ALj$9~aLWY6WlR#g)lx3*swho0Pb*SRfi zu9)1hq@bj}d31Z=&b!a~$Mq+^xTRZBZGK+fsW`WOMCq{Wak3zLmQCZwu8)nA#@@({ z|5h;ewY2qjakNVTm;yAb~#c*)f^UJe+RW)}O zHrF(>q@uBC^1|Icr)?iT;lma-A6j}Xi|p^+vvEy2rhI4hv(+89?dq?+~`3>ou z$SR5ngZFk^Go^aM;A5XfR+0Wq+m_p%t{*oaJ^zFF%Y;(?)X_+tbbUO7T>$x zuz1d<=pAXtBOB+%oa(gk+N!xr)2sRI3$c8@$l73J4SnNm7Fp@On$c;vsJ?!2S`=;h zG_rl~G}qMULesAD=yi2a(}vm6)WYV5ipV0n^6hL~osKErvN&oAE_ zK8>t$O&l1qJbOryEtsBnFn?V!ng-v>?Ov2VZeLw`a%dbHk&VxFoRhyjVtxLsfoHRG zKPrru>gHrKS*M7OFD;4}vY&=mKRoeddNmh&#@sa`Yr~O^nozbrH>vD=FD+&^&twbk zM5pT!zlv?07q1#n_RFh-;znVQ+7>onTb7IL!PY(`nxH!r8;`)%DVvbG#q$)0RSzC;3&jatg*kxbWC8q|?K76$3<#Q>rw10@|;?fZ>SM5vR(U1OQ z#+2hRa&l?IkAA*m_d~}wKQnA^3!76ZC7q{Fom!ub(=jIo&--JCvyc2?*SNyhFMM~# zn6v4e%KI1A&3t`--&cNE-*e*rzVD^ThL#q*UlA7{$jjSMxA6YTbm>X`^73NC#4$Ir zalA2p)c)+(fohVcudGehh$6`jw^t5w!@tyj@hxhj1bY9pG|G7uRegBJZ8a#8DPcv7g zlbQi{V)FeKe`fCNKF&S&E+z@Rb_oJluwcQ01q%TzSg>Hhf|0YJf5CzU3l=N{u-;y* zmLx6T?_zU$o=ksP1FO8cv;V&`<~i0!CTn1<%d;|{cEqD)HJP^J)FkOD!#dQEnQ<}N zSAO!{*43@=e0ipR^xh$kHSLGLbK@W9X5R1lzVpt=^2xfEIayf$S!^G3A+qnE?;btx z-tLJ*8|zx;X+-0he~xiSdm~LN_0Y!ZOkoa0?u$_? zd;3q;hUI<7yIt8OeON0ZX8js}RSj*d?wV&WzTIox+#hRKYeXR_WS7Evxw9I7>g}A; zvwK6auxL|$*v%*ZVRcuXDy*9ku*#o?RTK8dAG52f7Z#(X4fco z|E+lA$L6K52I|`_KY#rkD^4`Tt>I_gh825Kf48UZVTyHk;WzP1y`5FL<82Yk52rgT znRGe!G{dUgf|Anwbg~{CtNrtM9juDwKX^(Q@p$a*bZ5oXTz>c|Se4q@Ryx1hR>FF8 z;=N0;{=;KES2s2-hV^RA2TSLXrqa$D@$sR)&pRfMtX*`)WO;*!^~SNboQ5@6gOf}H kcOS3>3l=O`um)-W0w%9$rW2$+QUCw|07*qoM6N<$f(0N+i2wiq delta 649 zcmV;40(Sk%2ipgbBYyw^b5ch_0Itp)=>Px&l}SWFRCwC$)=y~HbsWd>Zwm`bv-(2J zev2)FhLFw8+zuv5v>>XBu~j;Zbx7|P1ktsNEvsKepdglDxDG}Mfk75whqXf?#FP&D z8%Sp8!pX+3?bTrkztslbqV4g#eLlwr@6Vqiy6y@DuwcQ01(DEtk<2%L{eQ8xmSxlG zvYeQ=*^?wW-c*)lxf@nvmGA$#Q_f-CXR;Q?8hf<6=R~FlIv?o2GH}DD@dm6TT^qOj zoT0%7Uw!+fzI(TRv$^uoGRNvXoFAL74nL9X8Tswz#>qN+XDtW1^KN-6)yjqGH819P z`|`#*yDG^;U!7cYbTYYrhSgM-W%>U8r;@4Sa*6O9UUDVUu1a8 zs=>+mll8`qB)6QYZcC~!B#(Ta^S3TKHECpRE@sDpRQ!wOs6fEuXcyvlj1If3oA#)QgtZ zyVm}cgFUboudk)G^`58aj^Rjo?pO<~MNPZZTu){y7wSbV$@<|-E53!bSRZUllEHWC zMJ*X!IhNPkzMGjk*!?`Lf7kO#k{sPoFPbZrbw`rCxAykCpF3@`{NQ2z=U97Bz*?%4 jP68d1NdsaSOSHcLh{18zU6S=A00000NkvXXu0mjf15Z}} diff --git a/testing/resources/embedder_tests/form_object_scaled_skia_linux.png b/testing/resources/embedder_tests/form_object_scaled_skia_linux.png index d491ee6455d89f62c41fd06c3833dca3a04a44cb..45e421b4681f214d1a09af8e24d55a589c27fc28 100644 GIT binary patch delta 406 zcmV;H0crl_1KI7lx zQ%)yD`%2~8FPv&g3;9+VZvVHike3ur{xX_nMzxP>AJvYmU3dBa|35i@SN#9~o&6R< z7+Ti%Clk_MocjO&LAmt*|M$xOCqw%Vpu&b0jsO3vQ~qDF;?~^s|EzwjHBkGv2p)r6 zg4(~aKl*QfMdSH@tCfE>J3epWd3}j%F39$21~0D25!C+QdBJz7e`(9VvcI{*{pbIG zlMRPx$pOGame_~{k{vD$IZ?&OG^hc7kZ!rA& zFT4w)eYx3>{|RNpY3JkT=jZVMpV;&N{}vmF_81_0hXF~pd&}zU>-#{oyUqLm|CBUI z+LOBxK^FsLZ#N=I`$mH={~J3Y+E<$X{2xG{8fhrDs}m(eUUs(n=ZsCH!S zy37CnfB(t3;{X5e?6(lY(6YWinUMD4)c^kv%BBDRzgPZ08QOOM6*jbJ{QqB_^8b>p zsqv=&XZ2&Pf!e=C=(yw()c%eA(SQ3Z8qfb*t^BLG{{Joh*O$2Ff^47W^6!fdLGAyY z7krocm$v*X`_ z?mGYf|1QGX&#E-_|9`4oQ}G{cyZNTe(qQdjK-)_QYyT%|e(wK&HM70{|7orJe_iMu zRC~YE-;e5qwf~Rc|NH-cGUt!~|1a5@n(q1!)&3<=#lAeAfOY_NZT%YO`I@)@0000< L2SrXqu0mjfP9pf! diff --git a/testing/resources/embedder_tests/form_object_skia_linux.png b/testing/resources/embedder_tests/form_object_skia_linux.png index 7cfc2d043c08ecbe732d59eefb75e0651eb8c3dc..0984a3098dc3716626e79d4a6b4a0849054675a8 100644 GIT binary patch delta 10 RcmdnNzM6f4@RvKIzsEeK1W9hNaCB5h_=>hy%fNl6J4a-!OEBir&KTMNURN<-=^f@-P* zD;xYu8+}Wfe2QDV3){T%+dcC-Jac>8vie*zCb*Y!SM|Ja~yk$a2$w6{Z0zP5f6I`>rweS#RjMSGLHnM9tlZ57LHXf;xHJF%^K~!pC{+>LQ}FK8Y0FJE)8_2ErNYTVTkvGRbI|FZt0!a_DuBR#rk@_Y z9XHmR$=|xUL(lZ}$E#+IK6y`tHpRV}S$$q%{^{0rozrLBJg59*&HHDC8TQR{ro5l0 z)or+Yy0(Xx=F%*mT(=mW^a)Y6kBStY@qfB8@#2&qt@H_}0*{0$it&Bsn0fD~x_(YWqw_Kkx7S%G#B8m9vlby(<2E{ngufb=@0xo#kT!f=~AEqWqSD fT}Ozh*SpUjw5_m+BRmI~$QV3b{an^LB{Ts5f8*x@ literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(3Pv7>k44ofy`glX(f`ybACMakZ(~ z;#9KEt#Fll!ODQ_g+W>K!_sHRCr*k_nw*e0DKT+kQo@Af`2OUC2`TY?sd0Uo(Vd0i zO{F3AWg&GHK{eHZm397Q4SuDKz9mgQ#Vy{2t=}Ld9jD!zc6&8!52;!lRy9AWY(-XmHj6(>rWQ8U(76jn3(@EGW}y<{LjGf|Ns9Q52l;I5J>fOaSW-r_4bClzf+(9 zTY!it%kGGPjo;gD>|S)^`2YXqF?$wd3yIrU+|Qc!J;kVe(#e`~4fVVDNPHb6Mw<&;$Uv7XE$! diff --git a/testing/resources/embedder_tests/freetext_annotation_without_da_skia_linux.png b/testing/resources/embedder_tests/freetext_annotation_without_da_skia_linux.png index e58455b6fe0d09b9f328e3c2718cf51a48d2e34d..653d5b8c1d3ebf0d5531413cee6c5f86a9f18eb8 100644 GIT binary patch literal 659 zcmcJN+e?!H9EKlVg{)5}Mvzv^idf*qLWo#uvaikDiY05rw52sADoe?QN>+q9-8wFV zqO8F#M22=y!W;!&SaU*UbixelqQY#g!_oqqt*`%}n;zcZ``o@4KX;L7L$W+W4kQ~2 zb!N$-zn3JF`f_t=m!ywHn=E?Cb3p-VFc0QKIxK`mund;N3RnrNARF>Q3nCQ2M%WBn zpcuA+4a#6AltTsVfqhT~4yc8CXn-Sd9Gbuh&CmiaaKmXh181QX&cj8x0$%Vz2l(M8 zbVCo^f*}}&5qJrs@Cx3-2bh2`MBp1lVG^d{7tBChN<5yj_PMkqp~9fkTIxq5BZH>( zT4DBMUrSR);wLEqmr2Tii&YG+5I%oYF3S_CrLs4tZbWCN){Le&E4Ec}Boc9#6 zM2TpY=jXFit}$cSclBYXz0+%*QF;8=Y~l-fo})VbU3uU}WmL1P_j{5i+<$bz>)}jQ zd)r{t{^0X_d8^szPkTD$3Kq`sR~6WVU`(sb$-ZDVwhQKUC;C2}bPnW-dvo3ll#aP} z3-_NKP%a&p-BvrMgqo7Ocb04)3M-4%2QA)`{;kz@k=4O9`)gArJU{v>HJ2KX{R6SU Y;e?6q-iF0J?l$SWFz8LX>*9{aKc92PtN;K2 literal 672 zcmcJN-AmH}6owyXAIqT?1mUcUG71N^thF00YD~8=adRzZB<9#y3`)u6GD^bCOxMRK zR+O?5g3xR>D0FpG(Ne-vR51Eb&_WbOs975`*U$f;n;yshXOFbL9oDKI07Yb6w1H~Hn77na6&n_zzx-K7HXgt>fj>OLjzofMrZ;LT!E`_ z9d5vFXaPU8!b50-ClG|E&;{M_4*FpNA}|9#VIF=%6k-sEKd=Z1VG;@LgU}bD0lQ9p zz+C+)@=;?@6|GreT<3GFm&ksNz8sY_)hr~=_k<G~hyVGZB*pe*z zzYIpaefNd}-l%Q=5{t`c{Z93pqR{-n@d@kwLxzefvE42Ac_V`Z<9bo7Sf2JiH~iWv z-DC+*_P5n7tIVF2x*i2jwaBy;%H~K`&$+$h4n?hbdhO}@;(a=s=52f~wxAZJ=Xkn* zczi<&Rr|9sYv=Iha(&S4&+n~jO>d5``c@g;F3WI!&CCgv#AYT(q#a6I<%nZtlEBop i7q@O^iT?rZ=kFP%rmoJhu@l3>ccIHGR0mXL7ybgJtFf>E diff --git a/testing/resources/embedder_tests/goodbye_world_scaled_10_skia_linux.png b/testing/resources/embedder_tests/goodbye_world_scaled_10_skia_linux.png index e97e4eb78316465fb91993ecc0adc3e819ce85a7..8355c5f7b68f8e3d4e92d0e1bc08d56cd97500a2 100644 GIT binary patch delta 10 RcmX?;us>mf@j*ah diff --git a/testing/resources/embedder_tests/hello_world_added_paths_skia_linux.png b/testing/resources/embedder_tests/hello_world_added_paths_skia_linux.png index 4deffb1ef79c07e45b71857f62b93fb7597e1c67..14827f105d08350b8d27beac94da40c18a0f1619 100644 GIT binary patch delta 1559 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 diff --git a/testing/resources/embedder_tests/hello_world_forced_dark_skia_linux.png b/testing/resources/embedder_tests/hello_world_forced_dark_skia_linux.png index 345272560db8cf3e18a646926b73e19d85e169b4..8423fc5fbdf2b01497f1d851cb0166e00f13e3a9 100644 GIT binary patch delta 1298 zcmV+t1?~E*3Zx2yy6M|(g)YbGgZ<}A&Hh@z%B z$pC*OC^HM?hd{PcN68cut)?wq3|qD^L`67kIUQsQfjNJY=MQ8i2qBw}E)Y0@gFC+c zamPK_)|_qUz&@{kZqGf>^I`8D&kg`0A|fIpA|fIpA|fIpB7Y(xA|fIpA|fIpA|fIp zA|fIpBBDOQA*#5sy>|b^f4^dpDA1nx?>`~Y)MIFy$zCB@rmx?a9$jV(c|0MhZFcI2 zmPi0_{weG6gluTGQ^?iQ9tVM?t%l;s0HUuO^#_ImPU(#;xhqA1_ION<@xseET?hdA z=g@C+jj?i#dVi~*1OX8e5BSL|wxPp0DTa_lQ;(tbdi!)}Bw0Ne-Ig_KbZ*OVEH{5J zY;yT;4oGQ_@P4~S6lm)TCQd55-G7zI3m9ZbLR!mP-cfDw>dmzu0U4DCfRzo7wxOKM z#fyg}nxGE7f5$!{{<2g(*x5J`@MzxvT>*f35{TdT0e{F81= ze1d}`B!3vXd;mCIsF5T9&XVjQs{t$(1=Rgr-!{nXL%hV!6+#LfQmy-ri}oGNc;d<3m{PxXmtQwB>|4NKc3Y* z2vcRYq9}^ePhBdH-Sq{w?2fF2Z3x-FT0+#JWq()f6cQ>Q0sz7!7(4C_1Ux&|;$k6y zP??14eE{-Afwt8h2$UJXr)3%60j}){|6JO&R~L@CS2K1)9qJBIhwNv&AH9k{r`~qw|GULZ}J zEPq39-ZCk0@4UGH>X0qOHngMNZYA>z?i%ZI=K#Qz(zcd@7XZ9l(NVug0}R;H)RGe> z-Z+vU`-k!DivVz@&JjSr)SAw_`+R^jakT8XbzTQ>#q7~z$QEK7vSY|2>VI>?gKt!z zFLLwCt8;tcosd0!GGvYM{5bx{Ktx1DM1Mp?L_|bHL_|bHkLZ(*`zw&wr4IlAeB0$8 z-4^$dTdY@H(gRgXdQVAq3IJW0_2`;E(jOLLy~0Hgl+AqtLI&%BqJZ8Pq7)iRy{sXc z{H9xrEvLsCnq~p`s(tpNs^)x6j5+y&Z+aZuwJr5};D<52C`3d=!tmMV0ozlpA%EL) zU1v0TSkA}o$B+^X-r{jD!2QTp=*BCvVz}sXAc6&)p%X zUWbbwy-Ih;=Y`&bT&*E#xvn#tG=J6$X59!Gek&20djal8wseQ2=ehQ>kkk&ta^!T? zzv@}ga$)>8U6rfb8m4IuH&-o0>_q^8!#O7udIO8Ao3-w%%vDdn)7CI;*eOGnDFr8A z>kHqNBg&qTFa5k3{KJQch=_=Yh=_=Yh=_=Yh=_=Y=zr~R34Swd-@Z3L01E&B07*qo IM6N<$f`b@VhyVZp delta 1284 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 literal 1426 zcmb`HZ9EeQ0LDjSC2x7DyV7A^&b)_ls$n)ZS&PwP-ojPhMmAIwBC~a|F>Z*n(@@c9 z$R$=HEo;prZuOg&&N%W`ibhd=x{rOi56}Pq{ds=BhvtVxX{ha10{{RTK4>KFs|DY( z^(z2W$G4ter9{S|JOSKi1~UMF3dRQs4?O#Fek8+B|EK|I$%MWgsOPP$3RHzsUmhK@ z*HMo4Ob+}hkDY$sCu5499kw?vpTz$UOkf=ttRtz{cQeq5+`fa+n zfq-WMz^BcC!!AjGym2_Zi2n!bYTc*HN%k^y^NTQ@j#;e)j2 zwl%)P(pJgTwL)cKsN(p@2yHkWxnsWUAXvp~bXU-jxe;#Q6_#?*iPuFk>0WT~r+cYF z5a-_5H(blWFCD7PE+czrG|aX1n_D^tL^NYfl3%~;PWGjBw*RFA)3pWNc-oPI@Kx(i zhN^RD`b%=>K3{zWh<12%BG>%tM}ml?YEGOe4OJ@dwz^<_wdOo6iZuwqi(K>^+DZcL z&jk{>cjYc5F)IfR4Rb+Fvd?Svc-U4@tzLy6ZKESfBBPiQR7$md^`>=8e%E8G3>DMt zW8NQsIoMy3pExE?VsSs2nx*odn=M0Pj#$MP<)G#DxdQmTPIV{gmXeMSb_P1^E=IVJ zf_b#pRZMDXzV#XjM5e4WnWDIr$$(8my zkmq+7=k^(q7!#v&cDDsvpc$-k>-(6)_+(K5eeBOVPiEsv^r{=Og!6am!d|V7^+>ER zD=}!?O;F8c&bdwJ!`y3ImtUcxY0f<3uz~K_I@wVClw#i#xDHZ{kQCXRbnBfTDv#Xj z?+=?wiq%~+Y3f`&;dY{p@^Ala2odZX41(?a{S52jDo7H0ad~TmW_?GwD>r5rV@DXa zy1Y!a1 zum@AKqM~XL5VM84IUvk*Mq~EOoMgUfrFL0qsCa}t4X8C^zFQy5I7^>&njg3v@4`R8 zLzY$$YVxi3Bc1B;?ODCGHsTgYeZxuHterq6&;LNHvb)4nXRSaRXDTilC)G$(*EH=W z6P{s&9D-pD?@=@(uarRD*M;gcvU9gWIG@DbXL^rKTta!hY1KlTQ1Jafm}W9>!#S(e zwIV8qLdq{``us5KMK1@*@*52eV}U3ZoZqfnI0wH7afiwWA*0u9?9F8>zJ&KPqNS6Y q(Gx%gQW{>6Wb^%^|J#DG37xcy$fMs_??z01J6j(wERySaJm(8rzjKfP diff --git a/testing/resources/embedder_tests/hello_world_no_smoothtext_skia_linux.png b/testing/resources/embedder_tests/hello_world_no_smoothtext_skia_linux.png index eb9a900bddf1c12a89d6a34a2fa666751e7fa74d..e4bb9078e8b667a4d23af18e59525878a4e41558 100644 GIT binary patch delta 10 RcmaFGbeCy@%0@#=MgSNT1DpT= delta 21 dcmcc1^onVM3KwH>kh>GZx^prwH!9jN0svEs2WbER diff --git a/testing/resources/embedder_tests/hello_world_removed_skia_linux.png b/testing/resources/embedder_tests/hello_world_removed_skia_linux.png index a58639db86a7355502606bf49468dea846b22690..f0804e07d5d9b095021de98c6e90e9c15c17f8b0 100644 GIT binary patch delta 469 zcmV;`0V@851%m~UBWVIkNklnWFcLPXr;8cs`xA-Sn30O5SQXYvk`<=L#s45#3}{B<9Ks}OS`!_1P+a84#_(kw29v@7WwH>hm)5 z+qBExpuJBU@*Jo{tT87~LF)HS1hL$VdFk%|+cjW7-ZaJ69MMF5v_*ba$$4)yH-8kX z>k;?v_ozzr)M^n0X+JjKjyzYKRs-VwB2u!MsK=aVV+9AFcQ#5z=BmXV){oYc1-(aJ z{V^eA?zTs&Rm&7_B?A-hh6ej((=9UlED5Rjszc0lk0c?leUXc}0eRaLUv+3kV5M;J zNB*#AH%F^C2?_Y)CW8!Q*e0aenmxCDQj_D^?X*4`$$GG^y|BAxWbCn?xGKLCUqoc; zp}jFSp62@fQ6-KlY;Ea5@h;zooBgmXMV=`BHQrj0p(q*hUqh||;{yp^f((TN00000 LNkvXXu0mjfEM45z delta 478 zcmV<40U`c_1%(BWBYyw^b5ch_0Itp)=>Px%KS@MERCwC$*1bzxVHC%4{{g29sftTm zw+^vdCmGb7F znl9=+lqAi$5<8yg9q-tQF++Mb<(!WAh9$XY?c0ll%)20VB5g<&U-JNRVMuiw&V!ux zgj#>w5UcBBM?70TX{<|1`cjje?hSaY?c&I*Ju|9v?}v~fwe30xQsejgU9<9k(pbL@ z85mLKNh(`keXYN5f0T@+O0Ei`oGen zSlQnA@sCPru0igEWJXo{O=&~w&o~egzx^W(^HTY`9e6iB8VN_VRv~?E%t5M`ls23- zM{_sZ!5qXKavJ1jj-0f-HyzlWcLg^+?fX_|&^x18 zWj0cEt>$AX-WBkjZx;tIcRcO;N41^9h2K@b{17JlS#_SQC=;vflR*M17^ort0rJQn UoKr?>wg3PC07*qoM6N<$g3oQ+-T(jq diff --git a/testing/resources/embedder_tests/hello_world_scaled_10_skia_linux.png b/testing/resources/embedder_tests/hello_world_scaled_10_skia_linux.png index 9ffdd40e48bce29e5a64f9e892a92a8060dd4623..a58da9f23aeae352b47f1d85e5c0dcd4025cb727 100644 GIT binary patch delta 10 Rcmexk@ZMm8@={z1VjJ; delta 22 ecmaEF@W)_+GB*Qbage(c!@6@aFE=XsNdN#~a|jXu diff --git a/testing/resources/embedder_tests/hello_world_scaled_1_skia_linux.png b/testing/resources/embedder_tests/hello_world_scaled_1_skia_linux.png index 28cb606885a3611c277b210289dca20e8e0a2d59..682c003d00b7f001eed6ea92a419ff78c97dd87a 100644 GIT binary patch delta 544 zcmV+*0^j}71h@o{BYy$^Nkl}_3J#( z?|II1zUMjL=Xdyl0W|uFT8zgv3k&cr;dfzWPJX43#p65;|;pHHLAhjQri`#VD>%qNFRKwp*$FRT#v*@K1+76gITuEl%M61hseJB|hR{V!w!y zWa2=ONUvJdp$|*2I0($i8G*Vez5zA3iBmZZm>$nx5&i`>2=&3IDfkVc z3hO4|QH;DpTuQ~y;C;+|=}c)44mZM2^Eev!^u~J*Vjh}tcajGFbrj;Owp9AT{|cJp imp5~&i5dJy0^b3S@q-7~4Eoss00005P delta 569 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 literal 1426 zcmb`HZ9EeQ0LDjSC2x7DyV7A^&b)_ls$n)ZS&PwP-ojPhMmAIwBC~a|F>Z*n(@@c9 z$R$=HEo;prZuOg&&N%W`ibhd=x{rOi56}Pq{ds=BhvtVxX{ha10{{RTK4>KFs|DY( z^(z2W$G4ter9{S|JOSKi1~UMF3dRQs4?O#Fek8+B|EK|I$%MWgsOPP$3RHzsUmhK@ z*HMo4Ob+}hkDY$sCu5499kw?vpTz$UOkf=ttRtz{cQeq5+`fa+n zfq-WMz^BcC!!AjGym2_Zi2n!bYTc*HN%k^y^NTQ@j#;e)j2 zwl%)P(pJgTwL)cKsN(p@2yHkWxnsWUAXvp~bXU-jxe;#Q6_#?*iPuFk>0WT~r+cYF z5a-_5H(blWFCD7PE+czrG|aX1n_D^tL^NYfl3%~;PWGjBw*RFA)3pWNc-oPI@Kx(i zhN^RD`b%=>K3{zWh<12%BG>%tM}ml?YEGOe4OJ@dwz^<_wdOo6iZuwqi(K>^+DZcL z&jk{>cjYc5F)IfR4Rb+Fvd?Svc-U4@tzLy6ZKESfBBPiQR7$md^`>=8e%E8G3>DMt zW8NQsIoMy3pExE?VsSs2nx*odn=M0Pj#$MP<)G#DxdQmTPIV{gmXeMSb_P1^E=IVJ zf_b#pRZMDXzV#XjM5e4WnWDIr$$(8my zkmq+7=k^(q7!#v&cDDsvpc$-k>-(6)_+(K5eeBOVPiEsv^r{=Og!6am!d|V7^+>ER zD=}!?O;F8c&bdwJ!`y3ImtUcxY0f<3uz~K_I@wVClw#i#xDHZ{kQCXRbnBfTDv#Xj z?+=?wiq%~+Y3f`&;dY{p@^Ala2odZX41(?a{S52jDo7H0ad~TmW_?GwD>r5rV@DXa zy1Y!a1 zum@AKqM~XL5VM84IUvk*Mq~EOoMgUfrFL0qsCa}t4X8C^zFQy5I7^>&njg3v@4`R8 zLzY$$YVxi3Bc1B;?ODCGHsTgYeZxuHterq6&;LNHvb)4nXRSaRXDTilC)G$(*EH=W z6P{s&9D-pD?@=@(uarRD*M;gcvU9gWIG@DbXL^rKTta!hY1KlTQ1Jafm}W9>!#S(e zwIV8qLdq{``us5KMK1@*@*52eV}U3ZoZqfnI0wH7afiwWA*0u9?9F8>zJ&KPqNS6Y q(Gx%gQW{>6Wb^%^|J#DG37xcy$fMs_??z01J6j(wERySaJm(8rzjKfP diff --git a/testing/resources/embedder_tests/hello_world_split_streams_removed_hello_world_skia_linux.png b/testing/resources/embedder_tests/hello_world_split_streams_removed_hello_world_skia_linux.png index 08a4c859642cca00055bdca871c6819ef2104077..bdf9f5b655386b65a10a72e4a5ecb6a88aa96830 100644 GIT binary patch delta 1449 zcmV;a1y=gN47v=EBYy?~NklMaB7(SAGrKTvNjv*jRuz&*cSpJ=} z3%lq{Gg_^i&Uc2n=iIaRe0zU;&wVg+8NDKf0RjjhfB*srAd%T0k*pfvl1n2(pc3imG``)Qf?v zu`&>(uYaeNQ~u_PzyiVREwh_mPSg@-V;R0xKt`v#%KR?Suwb!W=wNDH=_>QspdWgJ zaL;`K(FJ|(Xc$N# z+ofMwVADucZMKGdLipPE>=eB=lQ*IT#FPW_+0k0_jYRuRln)iFN$h{PesJ_SBJU(; zqPN2IL6IgE+Nq@rN^v#}q?l#!YPN|tb_st-0B@-IJUqf~w{+Xh50|!F(wkk#A@r`k{?dK!Nitoh^|xrwPACLrcD z{G!H=6D{?PeVd!iQl3tlKg%bZ4)u+VA$?E>L?2|hJNsf5k)6M5s$^Ot6`M!jE}YO^ zNtu!jrKfw1AX+BdUi5_r|NcJBw&JYtaTB=qatF z8WYcbqz}?TbU|;6%nbIdbuh$1<`jNJG*A1>Ekl0ijW4}S?Psfq9?$M-8Ii-vXnbgz zi)_dhvC&W`HD9)_ay4<7St=lEZBDI;IJ5gnsyhYgAi5v}LY}iUd9Hb~!;4;U`A;CV zH^Q81pXkY*{Zc|U$Oc`-|09vHB!4_Fq<*1`%q_O;UuJKUZx&U5J0kbp#(|9WE2zJ_ zFz4y+idHHLdXDfo4dfw*_#QF}zdOf<=U)Fwzt|_`6|k~e%B z-`w$%^X3`!Ab{#uR9l~^86QtRm;b2dkod8xG7gC@H3}qIysMZfQ=H9-AR5gWi(JbW zPI?ISDZJRTs>q`0mu`#hw0{q(v3r>2S)6q#zdup-DDo-POs&9!nsa2qBO{$7xA=1I z64F4jd3)`A(cc-O4z;k~M0Eed?p5uhB6qAyT)mP``Vj4VvjZ~xum)nR%kRViXB(B1 zw2%*i%Npu_aK6%1MUGb*b&v<+#hZ(V%NzYVt_jC_<(BkJCY6|4D}Op5abb1FgfuR7 zF|qg0RlArbkut>6?{Zt5t=n#jRHS>eiE~(da+e8Jz3uEA4{Wuun5j-1s2S8YxP^lG zy=RY`)s&ho68EaFPx)`bk7VRCwC$+6z!rRU8KJBX49a6cr5# z4Ra75jHqEK1im26OaxJoK!*{HQj<(Tb1^hV#mNv6Uzvk~p@|meBTYiAL6KBad?0B& zlx1Wg73Hz}@0?xOi%!jG)4J(=XPA4=J$ui$`@4J2-OJ2n^aGp}29cmmk-!FjJm(N~ znwPb?eNe$a58TbFY4WIl|HkW#+XTfJ>kATM9PwSw7FVa`EMR2Us4xI-NJd1jLjBa@mnO%Os+GCW<>&aU?!}xHLFyJdyJ% zd!l#!rJ!JwD(%$L1tr_-2U5b)_;v&1LTJH|?{B=Z)ycF=xRU5W_zSYYELKSq z{8C>wb2~2%8fK^B+h)0giS6_X0a0ml>P*DS9$-|{CP)X-1?ds;gr%YP@`pQ|=qZ=~ z1X6d&->&YVp6u{v60+88Xc7J&0R#|0009ILKmY**5I_Kv5C#!{5I_I{iKN|#+?53^Nv&MWdt9pif;x+Yx#eoM-$`)PNYD<}2){OO0 z)B91OeeT}yi=D22JytQ=yOdW4JW6-Zj15v2bWa#k!XdRm(Q*!X=b}L%@vV=+W=*2A zi?&nJyn{37ybIYXNogzo)LpOV52mK}^@*#fbre%TNA{Si#bFi&$SFX<(OU8 z>q}CKskNkk6%x73ppg5~p|R0ZkEtUD=8@vffS8Nw$kFo;QP^8~iL#7L+0p#2Nw@pj z*x2sh93C64N^Q9$zurVXRYaMgvB9+k-IvrCy8B-*_X>&c@Dq*v;eY$fUc8X#u;x*6 zx;^4qzC~HLiJyDT%Arj;&oZPkXz9X;THG`O0tg_H)ESY$5EwjW`3pa_XIg`Z{8<11 N002ovPDHLkV1g**&gcLD diff --git a/testing/resources/embedder_tests/hello_world_with_changed_text_skia_linux.png b/testing/resources/embedder_tests/hello_world_with_changed_text_skia_linux.png index f98460bcb4d43c00d59cc0a9c630fba38366916a..2150c9e9a0c471afcce9ec39853facec9dbe1b29 100644 GIT binary patch delta 1583 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 W`|KixbpTiOh`hAY<5EfESN{d$5Q^de diff --git a/testing/resources/embedder_tests/save_new_text_skia_linux.png b/testing/resources/embedder_tests/save_new_text_skia_linux.png index fec8aa3a33425f98b32f3b549c115be5bcca6c42..924fe264edf0b431d712fd069f227b8e8118770b 100644 GIT binary patch delta 2327 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 delta 2325 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%0Aqa&v2<(`*00?52O%a+$7v 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 M07*qoM6N<$g1(7|#sB~S diff --git a/testing/resources/embedder_tests/stamp_with_color_scheme_skia_linux.png b/testing/resources/embedder_tests/stamp_with_color_scheme_skia_linux.png index e6ab1f6e137fb5f237f91448039a84f1c4b527c0..6b70c3cd888e5073ce209cb38af79819485972ce 100644 GIT binary patch literal 52709 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 literal 52290 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 AEC2ui diff --git a/testing/resources/embedder_tests/text_form_no_highlight_skia_linux.png b/testing/resources/embedder_tests/text_form_no_highlight_skia_linux.png index 5e9c43a6c4fbb7a9115f5ea45b59b211680f2bde..94ed1ced92b6a4280e83acff6259e97090eefc53 100644 GIT binary patch delta 399 zcmV;A0dW3}2K)t(BVhu=Nkl`TwN8HRfl_PLFiN>N zAVhoNKah)(!yYUp-|N=a#>HHe8?n%Z^>Da6`ZDi~@40sOa&5z@x$T29eU7#N=EwTh&-KGAt2Y`S)^~5# zVtKZ8{XpIudXdHE=gq+rOVhjh8*8!rHFIQce#@gy<{DN+M1M?99nWmXN^vZ+IGK59 zCf`*08>{g+=@&C-+B)zO62{Th~b+|Rd1OO-S2tX7_Ny@vJS ta`iPVKX_Pz1(S0Ef|I-gDj3$k-ggcEyuq(r%N_s#002ovPDHLkV1mIv&;0-Z delta 433 zcmV;i0Z#t>1&s!fBYyw^b5ch_0Itp)=>Px%$4Nv%RCwC$*0D>}VHm*i>mmZnqTVIB zrD$lWt~*i(lO(txYEmjFDQu`epryZ{MFr`HlY$U}&@Dl2Hq=ssGz39JIM^KsMWCV5 zEjHhf|0p_k-R8>{l8elDHZpp zwB9!CkBErHVoE99g_W=L>i0?diFMRw{Tb{1xxW7A(HgBBzp^p9W1yMCdQ|NldKZ&p zC+|(&zIy3E39R;h-@U{%tAExbvD-0u5!6tej4?m?y=4G&ANXh zBDy|g*CMi;5oe#o>YmQVYV7^~>-6RPL_5~(#fYuK*X%m1?K`VFAFGx1xtWMN<7+!x zIjqKkk1;bCu=1~A^~8KMYo{t#H==g9a*2^K7qfC6Nbs{%Qbs{#)g b|9U?FVN%0tnkzXA00000NkvXXu0mjfO>5ci diff --git a/testing/resources/embedder_tests/text_form_skia_linux.png b/testing/resources/embedder_tests/text_form_skia_linux.png index ca89ce3b2425147e8657e616b12730b720a1e0d8..55b65c2dd42fda1165deff946b10b19afa58cf6d 100644 GIT binary patch delta 692 zcmV;l0!#hV2)+oABYy!(P)t-s000020s;pI2M7oV2?+@c3kwVk3=Itp4h{|v4-XL$ z5fTy-6B82|85tTH8XFrMA0HnfAt56pBPJ#$CnqN@EiEoCE-x=HFfcGNF)=bSGB!3g zH#avrIyyZ)Jw84@KR-V}KtMx7LqtSGMMXtMMn*?RM@mXcO@B>IQc_Y@R#sP6S6EnB zT3T9LTU%UQTwY#YUteEgVPR%wW@l$-c6N4nczAt%eSm;~f`WpEhK7oYii?YjjEszp zjg63ykdl&;larI2oSdJZpQ56oq@<*!rKPH>s;jH3u&}VRv$MOqyS%)-!NI}C#>U6T z$H~db%F4>i%K^)iJ^>zo=;-L{>+9|9?eFjJ@bK{Q@$vHV^78cm^Yioc^z`-h_4)bv z`uh6({QUj>{r>*`|NsBbM&!%@00OT`L_t(|+U?fKcMDJyz~O61q*Y^$MOBD-thq|1 zEkd;js$%F664U+vw-)qB9Sa*{zTfWM<#+CR??vjT3k0xW!GZ;o1_FYU3IZ>G{kvG@ zh=_=V6~n!mnK=~^5f@-}w&}t5lfExlTW!{lv7QbUcg^IxGd;!Qt(_6G9awkzi-S+{ z#_*0yW9KVtj!kdwo$PX~-B;h%HomXzUtGFUf4#bMv*wCZ&C7f8X5Ztiu7A|%Ju*MB zt-G=2iXSrvre`+XZD%fHMMT7Z==kBxRxDNzWmb=7?wic#rS8V6M?}Q!tQ}Z4++Mj^ zBWE*n?QHc_X7ya=(7k+F=x(e=&!?}a`O5W`SmTw($m zg;lRUe8XxK?l&(ECaliau(0J;zBpJYooHpb^swVKto0Ym&tUn%!xAi$g98=;&6An~ aq!rKX2Nhsd7A>0q0000Px$P*6-%MF0Q*0RaI50s;dA0|f;I2L}fV z3JMDg3k(bl4Gj$r4h|0w4-pX&5)u*<6B8I17#SHE8yg!SARr+jAtNIrCnqN?EG#W8 zEiNuDFE1}JFfcJOF)}hTG&D3dH8nOiHa9mnJ3Bi(JUl%;J%2wxKR`f0LPA1CMMXwN zMoCFYOG`^kOiWTzQd3h?RaI41R#sP6S6W(HTU%RPTwGpWUSD5dVPRonVq#`yW@l$- zb8~ZeczA|}hKq}fjEszpjg63ykdl&;larH`m6e;Do1C1SpP!$iqN1dvq^GB+s;a81 ztE;fEu(PwXw12d;ySux*yu84`z`?=6#>U3S$H&Xd%gxQr(b3V=)YRA4*V)+9?7?d|aJ@bU5S^78WX^#Anq^!4@i_V)Jp`1twx z`TqX?|NsAs*LdIn00OZ|L_t(|+U?d!QxicLfZ>P>;xRH1cTEHYF)p~GxS}$$N5u_y zOi)1qPN7syEDv5>^SpGlC*74lBK4@-nDhMEy=nDD_`-+_b16$tUV^{$5=0q_4GcB#!zYB+2x@PN9sAO znR55Qi?}s>;QH+=XLb)h>Mu^VI96#oo^`HPPehE&z1y6htofa_nCOYoFJ2R>8NjOZLGOX2ea-+b)aK- zrFpV$T+Eg&uhR1w)}@G}_hO;FwXtejKY!c3KYp_rYy4!yYT-kA0oMARRi284($d6O z#MP0-jg1^uZO5A!>knA@*RZ^QD(aO(rE|+s+4VFF_Zn8q-Idp{{K3PM@dFhG)-UVh jZwQl+100j11BMkZJ(%!zef~*300000NkvXXu0mjf)~Idi diff --git a/testing/resources/embedder_tests/text_in_page_marked_non_primes_skia_linux.png b/testing/resources/embedder_tests/text_in_page_marked_non_primes_skia_linux.png index bea4e2bc2d0ae12b0e321cf2b1d3ef29b4283205..ece8b7f57342bba2c5c51e1756dda986a0035d23 100644 GIT binary patch delta 8154 zcmV<0A0^WG(rL~e< zgmP^zx!)Pa%$S*7%&~x|h zY*p0~jV6Y2a)0t1?1xkc7M?<3s8lv21Hsz1oX%xm-_f;(JuHj``@ejVLb;#-%{zj% zQxy~lb8;5)@&u3ysZ>#E=_2f$n=^j@u5@B+1A>J@u>K9%Y|ij-)`t&bJQWC*o8|96 zmYzP3=K;ZTgA4|{SZrpq4Sjv;6DP)@!ieVt!P<#BJAYLP39~UV?9--JNrM6b>c5J^oHA3HV^A1@#u8jX&L38PqS zMX(N?3V#X+hJdhj_UrLuo<_61ULCF05fj6Ab!Iad27iB!m)A6GF){PAvt|VA5J?~~ zK`PX0-H^Y4q>PM3vg~j;&!3<3_MWCtrb)I=oS1dXryy8|PArzm*O$}Oq=vFcWI215 z3nba?P7cRZP#}e;`ucPT7HZo9?+;N5g45Nj{D1fFWse^H)RPUt3_==$h1!W`W=xRs z$lM3pg$um2G%>Eh7PRmi-( zr?pxKg7q&+ueViIiO!uH2BcsM3L5zMaeu)rN1mQG6ch-zzK8?ZtY15ug+eR1uIT7P zIvDkz1Ph{6e*WCCWBnvjVPPZix29%s2Zu779qH-3@$sMfTZV@~R&!5j;yEYCsD>il z4mDWo#N+8xQ`uW1a(Q9F6c@*dh?p7~(az2qArD$C+cs)kuBp2l7pOV7V3|zzy1GSh z@f1q0RJv8yTvsP6D%xRu5(+KV)ykZlrRHY!x~Jym%m~&$FTjXOoevBgAb%Sm04#Xu zfzR#k*185CKYS?q`c(zhKnR3pv-9%h`F(S89QpbB_;}6x_XhZ42-cP~HKk2U;{Zt{ zQXwIOB_#r-(sJ`A(`ekuFmoQy2r+Eyi~3boD%SPn1O?5WJnI8wk9TYuBEe@nzq#3 zpw~MfR@K$1($d5yPyQG|N~de~{1mBFj^oD_EiFV+rc(7JTMG+z1nbXd%@P_q1W2W% zu*b*MJ3bDu7#z$D3L1y<{rg-%DlLt7>C)86lgwYoz-*|s`GwE7(0}RbeKKT}PB#Nd zsi{Pig5PrO8WFend>ewbiL_eVg9lSI+OFITxz;V&&K?pn;qO0Yw>!yR9jG&I`u2PG zgh@$4napanI!8tf`)UedPmhI+QuX!35Bd1f;O9qV!^}+G{Jb5(+C-h5vfWHoU@*Xd zGx&Uy(ddA}<;z4gI2-Xf|Hal##O_-BNETp3v7*MaQ`A)>Y@86YB zo|@VuqqVkbT3QG%_2PvDkOGedUjFoH?p}2fe*bQ!P!vN$KY!+S8;#DA5<^CY&c{dI z+-zP+*7m?a1&JDhwL=XID4##ye6g$O=qYb+hK~>7*#RlABgc-71qP10ssg`LTbnjE zcA=m^N)EjuClA6yHhXV|9LB^DF6zVyg+yZiIVxLWKb5-LN!8Uwq)5OE!P=qNY)ErG zLZNBXCWe?8c7H&?cy>0Q-1GG5{HA$uB_24UqUOmASXwIo&m;3;zvq7}hhqx~QBo*G z;=6K1y|xRXua5xB&rdNsyPEz^o>bnyuSKx7s+N}30WhPZ>f~gILqto&;GpvFeIhvh zi3ua0Ph^>f26aM$ATx7s`Waup)ha_0PoIRBE{(d{w^CBrn`X2%jZ$`qUQkf0H#fEp$8uSj0!RY4J}{ss-`?M^ zlS=nyBB5UI{O=@aNw&Uy`(gD)N3Eo7hwb)lja2$~W9oqdtFlrQ9K71A1=P8<>YWXI%I#gN@vd!Luddj zKR;qQzlsWCElJk^z~5N@c^1nwG^7s?=Lvv!~4dp^wtg2F;Im0b1 zlzZR@*4CQ(`z`R@*z7;$H7XT;j@;W@{_&$>i``QQ)+T1Fpn!-X_wKO(ET|zu8G;s% zxAAD>`g$2;K)KvXPNQJ4^csyVDrzbqV1N9VY`Z!zW~F*>I(3S>Zd`+BmH-J0Qw0Vp zZ{5-q6#QxY^w5wsFiW6kRr#wXJ!3ln8adBaPVwmqTs=U)pgZOCI_9ae)en;GGJELqCnuGOPG{I)PMWV zo>l%~e3eLKkBwC?F7C||l?S$g^wldaw-m_h=`MZn&L5o89=}rRo z?{jrJ`_EQP{r;N& z;PXx3tMc=O<>itM2l}O_izg@da)0R`p zMkj*hA*H5HuZ&k7dh&#`($3_7GQ_QQNiZX0e$$m2ghGqUqyu5#tH50?E`P2j8=K8Z zrAq(a59#W%Jbb9NScv9+nauH@=OYG)0$Zm}DItz*$}0PtBf>9}|Xs)B8X-G^mdr<*Xat4%?YC+|10yf&yt}d6G zH9v3q+4ef+ax0f>np@Xc%I8~ZYE+LNiGqS=j~}0LdkZ9sWraWmrmC#WC>Gnp!wE;_>q`vKqtOh( z!3vK}xk0ctkj3KY=#W7TQ7GKFLRVKO+i;>ixt%&iwAU{zSOBcw^+_8H4p+<8&SbX} zvuIeXA5o{b*Af}2a(`9*va@yY8iBy>a_Cg50d^u-`;NBHpGE)qVu%EcD_7Y0`NGoD z#fAoXceiR{LMITIv|2ma$Sx3Az^z9{@|v498?^#hzkS>JG$EDBdHc2owy-c2>AqJc z4k^f1_4n_IZW(w=qjAE6Ko>C|*8`bCa8lC6%nZyvK&YxG&=|qC=>$BwL5$$J-i}wFU7(24E^hrq?oz6)%&Lt#h zfH|OW-QeRx3RZKoz-;#PiD+$=Mno{yWk9>#37HXUi>~S+pHEE4$;sJ+Q3+qZn7}ht zRjtp_5U~OSm4D=bDlq1*IX?gsgtw8Af8ZX7o&bx<1eZ{A>J+`Pk?+Yqb_hrj5hJeQ zqdJ|fqC$A)%&^PL19lMAv|3wa%-sH&=7njWlztl?R)re zb$ohy`hWVi1E>I!%~vFOQ&a!aJ$e4;k$+HKL&JP__UPry?Xj_4<>fQW#Mp3Aem+yJ z{_Bm!Po8i9sldQ~8jUZL?S0!cWVDbFrOSFlY6}lnlJwNnY(Tk8=J+*H9(J%a8q0$R z1Ej&Ks^ZG!Kb^SZ;^}~ZhLRGF$@CZh7pJFn*MF{!lNG>yqV8@B7%bPr`FZ=%qjIwG zlf^n9Hz)tQU?n7gt*HUF3$kt`);K&$iLEd2=NY-CYLRMd zGm}9pG*k)oKGI_$SQ|?wgL+L(NC@3%+#n#;*7D%lixam{pnLqYpb-PLbPwM zM1NkM-Zkm3sK}6?uSc+cSKGHkrpw4+xXk++TWULbk`7??^=(i?LSOw^w3i>KL)|0)?U|FaPK7ME7@7VQ=qZL_{l(r3YFjb6Rt7`r zfmVqB+^qTwZILPIypDD!AJqHUl6WV?3Y9?H-Yz$kMGUS9)F`! zS(`4QhB~}pSu74ZeF3V3O-&2a)2g3q;8v^EQCLXWuNybImWfq2rlHJc6TL1p+SKdU z6L`T8tZj?MQpUw~`TN(e*e?PmfRD_H27`@G=L2D|KRJ1zynJTECJYpUwXt$?2>W&N zBz<;PEfngtS}R}#d%*s$wf5QBqkk7Jv>pcIggW*l_7Z`LH1!P)^S~2XuY_u&>t$J449|>}Kph0I)_)3&yq{kk z5SE`m0aRVR+PSuE45)&gCr&g%Me?tXl|UUdumGd7GEPiP2LKcq*|s+KK^d4M;~9^q zQK>L)Az0fKczKaXzivQ8diu!9py%(0stX9ga=&CUqd>4aP;Pcs?d@FyV1e1k%ZXs^ zN|~7qS9cK99D%CX*e<-52!GZt!<8v8u#wLvrXDaDGN1~!i3vGgO9X4T;&4<634KsK zynMNx9QuqG62WqthK81+qY1FUX1Vs@6-BVz(+1JfB8ZFYuBn-;s^XTGa`1{GSZZq)ojf!gX{PGZ}gA5iar*mI7V#UYDd##aJyxYbRhr_{UvqM5ca({Ai5Uj&4e}Dh> z_Vz8lSfkOLIdkTB&o(zV$E^s#Lj45R$jC@oSlIF7$7wX$GBNdD5FH)u=jRs@5y9i} zj7Fm?yk%!+|L%ZKpFTyfP(Ohc8X8(sQleI?gM))P98P(8Ie@ja^rK?i+uIA7?#~BA zuuwmNWwBV+TCTdfI)9l=mXMGD5ex8|o0~(hP&q^?C#gwN z>2%J{%DcPgXJ&qk7iF`hwY5`TUbOJ=O1zv1)>cUx92684F=(_Qt=62C)s>gmcjrzc zVD$0hi0frWqt)A+=Hv6;V!;`O2-ZfD%MDFUGZ2%=hd@$c;fPqQ1-6EVh2&0$!vVp` z*Y|^7|6@VXGk<5wfi^Bzfmigfg9Xt@BGE!>Te}lX(v>SUfXMgnTzD7|P(-B;DwRfu z!>QAmN%9yB(e>-K@S33^q3ezJ?lrmIg*q%?0YfU4k?a(+SnLpoZrrHz_y3rb)C82Q zdokobKqM!pcbQlwo(^T$A|fg|99d>&CzL;Y7=H1h8-EI&ojljO-o70qpK^U7UfKf= z*4UW%+O=AUF&8gZEiLKDt6pEv1`bL~$9{diOs0pY;^OL;i8cN#m6a2ZAGbm1x_!G5 zvLrm!-ac1X$EHv|kVhj$r*q(`l$2KTVMazLUfP2U7BCbNQkI|Jr_q@F{0bogk^7m< zMc^PkeShPzlz>rSVDa+G8f*Ri3s3;Ol9HP3b_YOq?py^Nr?;2COx(kLK`2y{b;Fg4 z;b#&}h=^*n39s&f1xqN@!1XRDAm;r+$bs_WA~Devs(4V2j{dUYyGRSw)0Fm@$sDlX>kEev|ot8!{tPKP} z8FCi+)X9^jetsW*z26C75f=8@$LIa8_G`nuNn!*>ejRz9yyGUy(_kqS23KTiZJmX3 zVc}}~6B)onq77E$22c_c={x>Vi^cZxW&7>hU-ronj^zzE>>*MYD`K_yKyLt1e!C*wN+$^Y|0YEI)61XcU zeEKy0-x((=hQYz5Os2%`A38ZH2CyO{OZPk>ip5fiL`J24MzGv0K3@e93-AKApa2ia z{Sd(J-D@Jf{O%Hsb6{Y;vXa4K{d6O-_yM?k<8AD@fy z@tJ0`1;P3^6d(UJF0RUGw8~_<@bF?_Yh+}>_3ZQK-(kFik-szh%sHid~Qv`vby?y5F*+Rew zGT@pVr1SG5A{lH62{k;Pe5Hd@{kOlNUT=8#Fz@KmXkXu`!on}Mm797&LWH0Nz#&-s zPV@7Md-rO+y>oqh@?15(u`%J5D}NP06$GS<7fWCx_s`Bs0VY5So*f+(kUOc=b{~=eXwZD{-(f|NK9D+PZ+NKK^ik&Nhumq8;v2haO z*6-eKG7-^YV1Rq{=yPD}?SI=gGLkJWs&3vaRjapmD;}-ZU^Z_l{M6O8Q7Dmdap|+O z{M6L^p&=%MwU=Tr1mKVWqpq%5a*sr!Nl$MAyvoXk*=)(%w>`iXM6c~0d2&)182A#{ z%F1eVIGjx8LTc*Q?Y5)#_D&`yzH4vaJgb6vhs|QKL`OgH_rENW$bS&5Jrj-A3$?k& zkLkyczxDTjqfqGARJhDww#LUrVA9uC0DmWuNLgCi+ulC4wh;^bdq@bxyl07t6%QYN z*>t2lmn#|?nqIdPsA4c?HvIyNi_)B&qGe*GXI@Va140)(wApM3)*h&*XO7P&Mz4SS z#)7c)^5u_VTdAqvV1EzL1`%shAlPj2sZ)7me2R}RU;BEG#V{;?tB8ava`P}6RnpzaDP|uHz}!7rP6QZYqYhE z`uQb#dBv~W6bj82e@H<=IiD{oFK;|`>L!2%1q5r4)z`;^5ET|y1U0^`_sIZE5R-&L z;>OZ*bJAze>eJF{{Qa|6nl1P#Db=@cf7*IWX-!S9(P)NEB2i9H3kC+*O-(~LZsf16 zb#9iCmr6=%0e`Q+z-uJ*MMX8>>vcLkg0%+%K8lJ4yuEX`H3kNdN=T?kOREJ#2K0cP zdh_Nx6mHyDZ9C;~7Ww>b+#+Se_NV91x7R;2HpYJW@*_Acl}hvY@oO)y2(a@qnG(Tr zr?!&IK+(~kA|gsEDi{FP;Nbig5B}syE!nsLFv(YPG(os5vX^GyGj#R6qt4iDW$9;tmdV`t+?kcQTfi z4*o5rJbwz-^z;&ilAn-JL!lkFrIP4W!_x0I7h07c^SOix>2=vc6p&_SUU8 zzP^dDfng5_NLDI$K8B1&s~j9W6m6s)1?$b5ZZJ$nqgAUl)zwYV=~M1nZ2%-Ht$*!hGUv+5zW4R9c5^_5LWN+tS^4>0 zkOU!aK`oE$mbrAPjPyghRDJy@mD(O2{uW|YPEHe4yTD*wyH?cQz1!P10a&kJ6MdA$ z#Vv7hufxMLW@d!D|H1}?v9R#V>(^y#w}Zr-N5Sgom;snVLqB9@w#sC>>}+BnUU~V5 zJAY~e))g~kxN_wqumx4ZuC8f!O|<85h|w<)u@VyAef`?wmSaLqGdw)8r3L(e4JwS0 zk@t@tjqdLsL$G$}fq*K2slT6SJJ9LOP=5H(ovnpNqa{AR9N2pIuEQ+{WU=N`Q;Vfi zRcGh;+qd;%vDD58DnERcfpN~V}*rXknf--7!^hPdtX%|QAR{$ z`uit!cTd2UnOWhkBOmNRfB)nx9lPBT82FOxmT71h14jkc$}=CW*W)5K2Nx{Jo_>B= zQBm)uQVk#l<)EOP*w|vZT<7-B8h;v^j*EK@?ur~Ula=)uS9LqEV1d4T8TR&mcJ%1; z(9rzW*2$8RUU-<9>Hgj~vh4~CmTTn9t5;u;n*$5hGSQPL9~qes3CS%l?_VaCN$N;T zt8x3MS+%lW3ZEd48+BYh-p`l>_Qz3%o23f7Pt5;vGoj`Hq$i0@95j-;p z)~+-%GE-LeU9UIUY<4Jgc8-^nv<3w|)M^cQauBSYYiMZt&Yib)b$v}uLoqQg=jVxq z6n#voXKMF10zx5#EMkh2=) zat#@`ldm6G0)=3c2_PUL3c*655G)jeg*t@#KUQjj59PA*(*OVf07*qoM6N<$f;@QM A?f?J) delta 8181 zcmVPy9`$&j38l4?TSVpBTynpTVa$w~*~RRBzi)o;fB%ut(DCBp1&70h=LEspj(@tl)o0F3@OUODGnqPH zU#5@GkL~SSF=ByWZAZPm8USc;Pz&YM)LAHJWboN+Lsysj`0=sBhewP?2a zJe>Xhy#!AMg5_Za1dL{6%;9-Jusk56(IJsoI2>bNpMU1~@iC|{;yFREwxiBYbz2ZJmpK6G(MMqB}83@*P^!fAR8kk@U3L3j`fen8{L&uQ}1Zz8*oi&{~Gaekw z>gZ5IS*f&vZ6}|~%$z%PXk;75)M_0D19mbVc#kEMSs^&3rp~U}Po)yQI@>@bElqOt z=yXDYkbit=GC9Y`O%jO>!8&j%EF>5L!q(WYN00bg?bdpAbUJ5DjKJNQ&14z_0=Pat zQ?SLv%+1VL5Uc|vq0kJeP^a@i{sNLRGZ)CR)9E^Ye%9A_ib9zp**boF#v`ACU>!KI z+2%usxJ^wOD2v6`vuAlglEdNRa?OQ>GI*-5Pk)bKp|&jW{t%@gIK{>a-o2AQeE3sO zHUu*WX$Tf-JDQ$0L&_s_A8Z#c@YB;J5U#Sb7eYgMR;v@iLTyt@rTzJHDbx+!c)@n~ zFyz4lHzXCo^1Q587bL#wYE^NuqM<Qi_pFgX3JOVNf$CRJHh+zGDGMgPWH4?epIz6qQ zpWmI>aOu)qLW1!0Y2IqWmLZ!C59fDx>kzDePZEjQ$EPPGWDx#7dNj2w-+@Mx4-FZX zzl^Q1QInA&2@PF=%-45Hr*k4$|B?&_dw+Gc_}sZ6Knk|t;DHYx<~?%csVQS&p=k4q zIDpOiwX<0yvVrT0jy|A+QU6J>AW9V!%pN`3Pa+i-HVl7jY8JL}D2v6Jk-;Au`>DTW zXh`eh!%a=Sqzg{58*S9Azae~26xm>Q8n9&OthFx2qx_<@! z+Ru;q^{Z_4PN~!aV70faclcGMQX8LdL9qS}RaJ?BDu4gp!b1M&s79?O2EDYl%3$Zf zfNC2D3=SSEDq4wlR;yDcvsP3{0W3OQiFMwCl?s(gE0d}D{8{qs+050eV_>u5;>G~1 zd-t|BR-Hx@XJ-qJ9vua?!ot{4SbsfInZq$69|yNqxI|2ucR})koJbD)Y-(C$vo}@4 z4-1?4b>us2At5YsZZzsZgSAF{z9B7*vpFJ{=I71v@!W`r$>Cw$%!~>0pw+r%qsHTz zySs6Ln*9rw+3cvRTL2eNq4dgRn{~}~b@JlkZN?{&$ol!SDmQnrxmmO3sejp73xf5} z3oxQm=YoO;$OZ@i3m$smbGy5B?!m_o9*DnwRYNrp0-?p?x_o(V&zu}*L4hG5LHq8V z5xy9LwJA+b>eAD>KoW^mNXTGmsZgb|-nhXsnYJ^`oX)j+Z} zKkq=W{(RP~p`i>wDm9feHm2G3ae&1WCs@J3V^F?#j|WJlr}HmentwcblJ)Btn02)} zzX$|YI$g6zhK$nb79c4tjfhh4TdrOu;+8;QN3b@KPG`S=f09Pqk((jcx+UA$Lqf&_ z0!AGU7ul-=b;b?fo|Gg?P8P}KHk-{gJZ#)kQwV!{tYnm`uP1)UhYv=7eg<&7WU2y_34aEhDG-=VCMOgwUnZI=ghFBg+>wzD9Ld6h?bQ~@Szhy3`F_-RdIz{@p^MC>e|& zbGuC@S81s+GgI&9r)X}rEGKJ6P>_;D4Z+%`1_o5mo^8C?Rdn>EuP@WjkMQh(6xflY zM@NH##@tnb->I!l7Z*2QSSTZhUXhar;UR~!J3|g*Vh9&?{J2sob^IKaZLpt8UFoFi z>LOAk;DumqQ-2%|q`4lE$h=__Lre@OFmNmtqJh&VWoKaD8WCkoNQ~c+V z1+d@yKbFh2hlHpo6e96mxuRL!h0xbWfaUM6oS9ike?%mTNSesQ#%gO+lkr7Qw z3dA9zC1P+;_4hszoc{Q@NgyDyOhbbvF;SS6wLATcuYX<{ATm`~n@CfYlk+2w8;wx& zCDI>|2e0Yuw4OPml1iNj)@JqS(bUI}qDz-X-0fSbshkZn+Nwq=2ShI@XfzueTc>lW zyj%$+fmy}m~`@1o9Ux8Is zB|dRtrGHn)-@i92YkGEev+YT8xh*wymO^2Y%lW-|BTh=<{kcQBv{d144ux1n?rd-0 z{izdR*e_mGFXukR^z;wP)oN#Vw-qubwqtEg4Gq%xc-Hab1BHciYBezk-Q{w%x65;L zc^w_{KU<}2#s-Zg1vAm zghB@ypU$0Ale0N=I_hV|6q+U`R>DR_g$SY-WX3ypCR$r%zkAEKZxDN!wYBoT zK8<@hzvN^dc`KB4wS3xkubwO|<6JKJYHb39+@SzUD+NoqR z3xAC^r_3gsxxPJMMVlP{J`2;bAP`Tz8i=0r@Tg`!p~9o`YJwrFmAGY3c=dIY!wy~ zQ6wpe4PZeH5y}v>`26)p8`sy%ApAqlSb!8c{yjVUC&MI>SWldoxqDZ5|NhFlYG$*OPS-qrx__R z->>>zMu4D2q5O0wfqVCOdcEUkE2eq(PQL3u4OlsUUQPO^r%(ShB-*xnOE&LYumB)B zeGzgZBsK6@?rP&7hC&DgX7E)71%IN73hBB7{W3Bn6BE0+bc|H$Xl=C^3@+H7JkgVE z)zz8z;Q8O@T{lwWKf~lX2JrKUR$dci>oIb4z4_Ec| z5nlk3;H67sW0jJ$@FtTB!Sa&Q(x#TjD>EKH<}SB0IiU=3YfTc&%$(bBrGEyI$m%xf zKp6Nca90ZpE6K)gcTuUbzxPABx~vZ#=&V+vxnC}K{^$9K0iwXxsZ%P5WYN(YmCA`= zc|&n=tbzi*&E^Cb&tRybVhEho)&11$`REa0*f+cnbVGyY$Pw=ylT5 zb!3Ya>8r>xgF(d0u`ye5vB^Db0m1Ty%x1^s%cJfN>AQE?63N=jUw=}v0AM92^X}iD zjf>-+KhF*f{4v))Dr)k-rlZ+4jimyCwWdb>@S!+3c;?u#X^*!+ve`BWRA8#g%S{rA zBRrgNREG``1N3M#g?!{Lk&?RTE9Y9S0`V0qCL5tIz_bC&(B){ ztl#xX8;wqP%hvYfaDNc9XxQu@QKz@p8X2i}SN(Ew^za&?(BXFIRH_knB3OHlwojkL z|M_Bw1k5W}I0Xfwva*GS21R$bdVE|j6q$yW7u?}%<0cuK2v!Nz0~>2G4f9)A;~UR-n{Si2yX%f(=* zQc@}*4FvR1Emk&SbSiCSO|C|oo6_<(}d+$^+MynP~CTV)Xu%rzO%;c!7_gxaFJdMFSO z6LNBMcVSe*mwzv2@J!X!YjZS2te_wjIiL!RxqHqJzy#rKc=#W<2ckE?VzIy_)SNm+ zZ)_BJvyUADQbfeCd-$kcZ?CKrojEh)_VR!oL^Ykx9vL}VR3!0kt-|&A@rr*63{jnU{@`WNJ-h&3=Ejf!dmyniAhT6=rFHzb@!n`>*6i$vy^ zFL_6f^tq9Oh}GGtsHzfgZxO&9N+fb#x}>hGG*wobNqVB9)N7I~SoPbtSEdBsxubpY z!T=d?bo8IOU#s^#7R0Kiruop&CctZWSmvD%RVb{%!2{%!3UU>i^z1*C$4`e`(QT)z8l(~!|ZLR4<+4XG_WTt(7TQ?m}` za=G)@M0wD`(rT^u?+=g$tGb$}Q2cb_N=l{z1AiMzOSxwAU;JO3n$lmrI!0Ci_lUZ? ztzfX+59j6_M~*1S#!ohTpWK}M?}C+>2)3pM*fJXJzf^pj;o+_DEJU)@)B&CDFP_kw zH^(=>z@K;Io~lKvt<6FPtv)cZ(}g>H6bB%lWCoRR9nl3XD?p-?uB|H z_dFmLk@&bjTtf=_s??m@^Q(pRb*s zR%d53-TRA+IY3o>eD}KV`uv%9;>5R(4uA2|0TWae|E)HK-K-T#B!*|tMuLJG0WWfo zT5UOcv;n|kvz5R3-*p05hY#0n{x(VbKu}LiOw_su@gZ27(&{|;^5qy%_29wa?_T`n z%PhR$(xtX#lWSu#WnO5N*mb#F@E^5*evY?0p~YeYg;ERLP^lBMv+Il$0Q&{uYJb^& zNfin+c>jci-kh9KDwVzA5^AV}3zpUDq|@i2O4!siKQ*QPxdv{t*_=g1g#EgHy=#eB zbz=(391hXzLZeN-dNqz048hv6*lbmNd{;m~{j&WcU;_BaoM<%K>2v`Q2K!S|1}ZA1 z*KNW;Az14xH;{FkT3jXOy4Mf-DJ6 zA2McQVjr+&u{c6Qo5I6emxyt23uGlgAkYDAkTmi7Ay`{hPmkozo!-)5UPuJXV`4BCqoWD1z-GDk;1xx%Jktiz(jttH@2;tt zt*+*km2vTkB3K@i&E~ACnu&^P^ZxP>sQnBUDVJ+cH)16uB>1e7M1Qi=#u2B}$>DH9 zLPBzLa}lhAu7H4m_V)HozF4c(o;h>ochACcl9G~c-n@xmp?(5ucz8G}D(dp(%dcL& zS|X<23u9tpA|oSV51-GsTCG48g+hVX6c-o&?to98JVCHfKYggyV`F0# z6&10uu?oeH2D#qeUVq4Re?B0Bh589B2uR?xAU<7NR##V-TrN*cO!W8nkB*L>ot;In zP}_`HXV0FktE*e{0st;KIk~W~aEVw{Y#=Bo=+BiB1PiqmEGCl~5fO3a$`v33>A9Q2Sp977D>aAy_B` z3xz_kevwqF@9N^0l#D!i(((HB04^MYU~O40muqH5(cL{aJ^iD3n!}OR)=v8P(89y3 z@NyzpnYZScu3V`BM81FL!Nb77Vk&h|r7}64F1_ADlE-9_IX*Y4v0h7uh#_xd`M1i0!r4r7;+yVl7E}qyF@G#PlqyW5fN2ft~@KN z6Uy)34?Tb04Ta85zWZHo-VBmYxjzvv?LG%@ zKzU(-m}m-BJSay;e_8ikq=jm0BMehy3lPAmk{ont3zZ1YBEbNn?-@9M! z*SdL=#0ZT18uGk($4!*C!BQ%X?#R^IIs@gRqLub1GJuK2>#WEPpxnJn-}Z-Et@al$ z+JA4|`m#q(@m?D#wNK3Z@#CcsnZPZPHYhKzkKCV^*9#AUHg^nj3%t}0KQu0`%Eu?K zuaCd$=eMq|?Z%BKMxzPA^01(S1^}_yi{P%H@bTl=e`lPi7@jy$#$ri5{-F~S5&$bQ zvTWBAqC_H-O664QCj`sG5(v}~u>db%3x5jmklYUeEGemp^zu7PG_HYxxvDBAoBh*` z#8Oh~fh{_Ha@S9>T&{|Vc`!Q4L9je5h)F3aEsr0!dptNP6o#0Xio=IrQ78p~5tZ7r z3TP$l3=Mrxb|6A7_P*C~xm*nm9f5&Y{QNE^BxG4ERs`$cP(s4j`1op*$tIWU!+*m| zfUV)-dH1u=o_&WsA3qMYwQ)h-9!OCf4xziscSU&ENip z27~dzgZv{$q7NO4Dk}P7U%sgqB!5H*S^yk^wdXW9r%Xz!_4Up3^UHVF_(n%XSFTh7 zRS=LaUMz);+&?oT1DF6Qcy?q&NbaOk+xdK%7ryG?AS)swX?9lV-oxR{Vk+E=0)W6v z6%=%Gxr?2hGh{dO(9k@fbM@*ch+cNP1F~UeX3Nsb(3+C-=ZhhdxjUpwOMiR({4yIG zN4@iftE-#bWsyhTZYd6JY3c(=(MqOPq`g$xYo*e#s={Rfvo$s*29v(J z0{ABWm5!?x1WzQG=#4IXID_>_=PvHJCp0neX*6BAQpG;Tb)1^~KnAuBogU1ny*n>Y29l^t|CBRBW+?ChqN zdt|YuW@qOi73SrY0$32V%FF8!tlbo3D2PlHO1?;>c25|DoPTJs*f;TBCqyHi&SWxK zZ{Pk1Y~|#9TOwL7_291HZ*p>#T5Z_O*Jx`S@%O*$*MBIN^5F*O@Af}Y*MLeYDzdTz-ek?T)$qhy4JZ-MqVr}tp&V-g07O#7Z=xnuh;7h z2-YqL_$V$O@b%5x(ij*(DlxG#J-rqT8PEfE>h_gA z$F*eR0>C7f>mVUQ9t;aB6bd~v>rkQ4e*WBb`}Uh{*~j7I$FChd8dF>Q{o}_5Oobj3 z@DUkVMmCo#6dNQ0u<+!dzvAM-`T0%#b3>E@!`|FHe&Ysw%2ROePzO}03_BS-sL>dT zi<`5vKYzjBg#{&KK(ScP=PzvIP^VAdynQ=!adH3OQp&4fO-(IQCGVlYt+oIG>EXk#et&+MB_%yj>ErPh6$(A<1h$~OGoNR< zawXSnw$|46vRJd_<=^}I*gH9(QmIC;JgkC(E=Yn9x1g3scFSD4R8IP#9jd;5gi37> z4}Sx(DmS+Ys$F2Pu3jzf?%wHbn*gj=uZTX%l9HDA_*dcKnbXsvoqu7Y(Nt9Q<<+b5 z)qmT5V$Q2zb#zPvOrfFgv$9&{a(zw?F%Yk!V%QV40o$?}GG4jz0oZ~nVOQ6brzYBS zxy0xfh**h4AVMfT_QqXgkpB zEl_^&z>}?oCX+QGp#s=?`?kX)2V}G7(tpxQWHNPU=h&M!^%9B4d^d~5J#ixL<;xO3 zzl*nSWlALb>Sl}Ht`)YnPPwau-Q7GWmzNKD_9H4Q2Ow@;yH?_nqka6?CYNj2Yymj; zyLaE-zhC63?>RCudF)s$g%Vj`-@gA=G1-N7tir->(qO^%@L}V&{X3n`ij1TsCx2J1 zX+!7pWlpC{An?pM0&wdC1CvlO3=K_(YHUG4ji=57mHH_u>G_>I+558neRmp2$Hv5; zJ~2l}x9@@*8%K+Zx**>{O)x5o_V>Q3RH}-I$O;HZ?(QCkEi0?iQ%Bz4gZ}=>Svn4f zGbrc<*)7x1Fba+etd(~@+F-y%Y=8DISdcya{j;N@-pOQIKnlvi!MSm9B?^V!R zwV|P508=4?C1 z1x}~4y?r!3zTiNu8-rl|6#-0q{sMMI)HzBhU22ElLY|AT00000NkvXXu0mjfwNu|) diff --git a/testing/resources/embedder_tests/text_in_page_marked_skia_linux.png b/testing/resources/embedder_tests/text_in_page_marked_skia_linux.png index d3050d24605462d32935ebd4185d9766e1a17a24..a8ada6fa13eef3ebd46f6db916348a75bcf6d0d8 100644 GIT binary patch literal 13791 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

    ?i7uM^{RRgG7F_R|rPWr8PM8LUe4M<$UsYC; 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 delta 1883 zcmV-h2c-Dh7}*$*BYyw^b5ch_0Itp)=>Px>6G=otRCwC$*a?hO^&PLv9c#0ZdU4#bU9Ac%k*$VzoyatyM(97R4hJt+f&DVn~Zs3rGbuXsvB6)N)u+ zP`3zjvx?m8vcJBW-JNpONTW>@KA&Xg&3o@Z{|PhS{NH1efCc}v#7BUU{(_O)V3P|2 zB$Leni<58yDU$>X*ME%vN%NOK?#zd09kRdhq{Eu?yy8zd_K(VWu4y*+zrW+}PE8-i z7p4!lj4DeS<){8sy%pJ!6xrVfAG%-unMT%l<;T3^hc(`h7|?oMM89ce$?EK}>aEDW zsFCd}>d^kO@@V+0?k%3Xs<7|2^w74#hUdqeZaoIS7bX3>oqu*~WUdU$y} zQ`q~yW+j=I=3eu|u@N8C-CP;e(th2$&Wd=rW9I>D;@w`IN1s(3Zw>6x^Tmh>r}Voc z8`(uQy3eZ|xA^osI<1WGy8L%y>VJ?Z`dRE6yEWZUBOB3g=iavS%L-nKNj0IHQ9Gz#xlBPS~IKDK-RIX$VR#%N%R_BSBc1GqMtNdh4EVy9C zRWZL^i0nwZTwXOX@|VT)>Fv-J_f$pp*g5HnR%7qPK7X&2XZJIaO^!JKk>&Xj>np$Y z|GcK-i*aFbWn^z3SCKA9PiJ;!d@TwVNAxaUbzHjF?fD0XN6f2^tZLk{^wg48`$hJ0 zo4EDP#lw9SBDfYJSH>QoC%kt zH(%9}RgGKLJR<%3Ph@4sz1x3roU-nW*;cY6CbBE8i@5aA$cl$n4_n@R(f*OW-Xvl} za!_PzTF(1M?6;EjoHf1Mo_KUnd^ugox)rZJwtpgX@_}?En{&WQ)^pY&k;Sk_(u?o6 ze_ih*ksUFST`)ObJNd=~BYV1Etj}K=3x>vZi=wRk!gN0u+3rTK#=SKUiYx~8e6lLC ziqoEq<&8^!J}gSl>>cNgizT&-qs#PI*LmyW{LK}ksw1l!R~1?M4%MdgIyYi^uYMu2 zBY!5cSK9WtdQP)>2Sm2MRfm|qZaFBjM;q*}{<&i5 zSG#wgADeo19QIm^JKySh+Jz&grT@F^(qVeU&275f)4D3Ms&Q43W!|y*g6yd`le;5U zC%0wd%Kkn!xq2G~FN^Hx@Y04@)aIaL6(iT)^yw#_yzo;`A+jUHl)^4O4*KzZZrh7@ zefo(n*d{VQ|B?KJk=s-Pd<2tF0Wgu7Y;?l?Bd&~?Sy*r2oMdfmxwvtIK7WiD_~UcyX2v~NH>vl{SbuV6 ze!;o#MAV)+qF%xH7+-`)+JmtL4r6GMCHINyfU|1RU*=mEPW{Bpcbtlb3J3 zIKL=f|I)-AFP@xiigSjp+x?3=tK#goKU$C-zARnIN*ms=b<4M!?~1&_XSYvHmc`{& zD_L=qWqV$0@mMCZePv}kyPj2%n}2|#{l-73_fYo6zr4=<5!>^M;*R6XBgQ40RwQqy zCpwRhp&hD*XCj+Ye|N-t$*jn`FZa9SB^R$vIjDk z%XgExheTGoIei#5IuluW-+uv_vT_q}R7WTU+?55-2OINUp+yor$ zH~ux-6m85#w)X5}Pn%| VUXyuF!cYJJ002ovPDHLkV1j@<;OYPX diff --git a/testing/resources/embedder_tests/unfocused_text_form_with_abc_skia_linux.png b/testing/resources/embedder_tests/unfocused_text_form_with_abc_skia_linux.png index 72565b756669601cdd3d9a6c5edf102ce9f8b171..048a59a4e0a55c4a98d7763af6be7a98ef773e18 100644 GIT binary patch delta 1216 zcmXBUYgE#A7zc1eJL*t8MpyKYH{i zfj}S5Qc@C! z!?}@iGZ{$DOUo!oPfyPRa&Bj5v$L~v@8keCi*s{x^L{JI2MX>M6cliQ!h1z`?w0_i zRd;!hO7B(kc)arR^80*2MMVXl&wo%^{|JDdR99C+HKH1UxK`LC5D0|zlDa=y>Vbw< zkys`ci<>>Z(emQmfS(jb?p)U8~jVbh?d=4bx3> z13f+cTra}mp!ngr{-M}F#*Wr8oA0&~h=;fK!O|M(Wf$<<8f|XXRThTja5(3NsDsgE z_@D6m&YAaGl%4-L_>D$;W49qHAe#9UzoTnKyk_q#a_MQh+T&%Qh%+`2(78jfTigYh z4O`0=dLv`DCxl&damRJG_+}K2*oil;GM<}4oxbGvlnmK!-sm=6JmbXWBcG9(&&GB^ zJ?VRV5UKn?(u?aCLqj&U$C+3){n;w?l&BKNrNNdYS|herHLEY;vJQxx-9A?>>hc$k z%(NxVrSM#zFykX4t$cK-_DU=9x5I;MWV;^}ABCo>&l@Q+eX5phD@x7AiW|lVF%gjs zGACZDOsN0x(`qS{K7j4yNUOY1P?v3v8oN#n8l=pn=rmtOM0Fj_LUK`B{_%=HOk1O< z-m`h+t!Az8dsD@9CLFW+Wnvf&eJV#!hwRxzo_{Nt>dlkpjb~-iW)XaLN8;tu^jv8H zpG3c!lCg&(ptmJ&_W9c3MgPrk3uptHax{Qj9QgkT7Ot5mgSpO*MYnJJ7r(b4wmhz` zs-!OJL+(PvtCD(;Y}Su6Yk$w}4GmK)E35pKnD!aCQmUdoetKhDLm%Pceu)bABAX@B z_(ri$2IsJtU5}=IKkK^RgS=9{H&o*GE@Yx1x_3Y&SdK(L-`9-v?^i$Q=Ds{BSU$xH ziep&xD?K_~_b0?Ak~+dEYJr4utC`2JtfPdXYp+`;t$GGd_Vy@WNi{gKwtrST3(4o9 zEYt{=hxhPWw&B)ob_TU;hqCmFl``&_KZABE0K6$Z MFXC}R%@KO?zXddajQ{`u delta 1237 zcmV;`1SPx%B~VOMMF0Q*0RaI50s;dA0|f;I2L}fV z3JMDg3k(bl4Gj$r4h|0w4-pX&5)u*<6B8I17#SHE8yg!SARr+jAtNIrCnqN?EG#W8 zEiNuDFE1}JFfcJOF)}hTG&D3dH8nOiHa9mnJ3Bi(JUl%;J%2wxKR`f0LPA1CMMXwN zMoCFYOG`^kOiWTzQd3h?RaI41R#sP6S65kNT3T9KTxVNbTU=aRUS3{aU~6ArUtnTw zVPRonVq#)sZ)9e1WoL3`W@ct+b7yB~XK8e3YISLAc4};QZg6{VaeQ)ge{*wlbasJt zcY=0!gLip^cz<|!czT6;e20L7je&!Xg@=-chK7oamy3&wi;b9!jEszqnT?H&jgOj; zkdTm)osyE0l9Zp5larN|m6n*Jo12@QoSdDXs-B>$pP!$hqpqT&qNAm-q@<*$r>Cl_ zs;jH3tggAOuez?VyRWglu&}VPv%a#lzq7Nmv$epqw12d@yT-e_yS%)-y}!!7z{|hE z%)r3F!NI}8#LvaY(#FQd$H&LV$<)is%gxQr&ClA-(A&?^+|kj|($wG6)!@|B)YjPJ z*VotB+U42V+1uOO+ui8g-s#=l-QeQw;o;%o z>hg((4?C$yP?d|RF`tI=i@A3Tb@bK{R{qgbf@$>%j^78WZ|Mc|q_4W1k z_V)Pr`1$$y{{H^||NjfX@jCzj1B^*TK~#9!?bg?KR7C*5;eZseECdT`LN5_TL6I&2 zc0=d{q}g2sLn1M z{T3RBmApCl-mo^k8*;Fgm-gs?Bz!sgt(jks`|!0vzxOTvxxleXmW2bIA5;$vVgBx` z?Q?h5=~wH+lAht)#G#NbzS7ubOxW~BVPl={6hCy|yrX~1n)@LsTFiyaFatNz75 z|9<=9-OpQMEqX762Ss<&pTK%_W|b}t7fbFeSs22E`L|wZ%)zREFf4A%3LfCX8TpamTmo_T)(%kw7}B(5J&00000NkvXXu0mjfuL*z> diff --git a/testing/resources/pixel/bug_1072440_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1072440_expected_skia.pdf.0.png index 0077178d0c1e3871887194496f058ac5fb3199a4..ed4fd40359118e851957c63ec7fce9588ec12246 100644 GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5k8A#4*i(3PvyaRkfT*D(%;uCWcl5%tMD)S1e z^9yTA${H)H+p22X>l=I8JEzQ^yJF$ub<0+4Ua@NH%GKMB9J_e@Rb>NKow78JH zctgt0Wvxpbr~%S=Ps%egGQQ;gbZ4u|$z0Pi-ktgWx}NLWYwu4u{rb+Nlpiw3&sl$J zR#5-~TZe0*pUdKE^g^#f~$lZxy-8q?;3=9mh6IJC!>l(W28++P2r_7$aV%~z)3m30jymZ6F z0O|VIZ-2ab_w()hUmrjJ`}E~M5V&jl&jf1w@9E+gQgQ3;4Nty94m>Oe5_z)^@wM^% zuUAW|V4Cg|Qv300X~xN-s(uwt7V<$5Tx-gO34h!j92{OX-4R>8>3Zd*Fy5VKwzC#x zO)GWo`|jNMCT{k&PknzBESnn|dZdIdnhMs+Z@hPWbJ7Wu+RrUXlUS(e$+kL kkkM+g10$D&QPc_cvnSnS4EL$_0zJgw>FVdQ&MBb@0RGu)hX4Qo diff --git a/testing/resources/pixel/bug_113910_expected_skia.pdf.0.png b/testing/resources/pixel/bug_113910_expected_skia.pdf.0.png index 6e382c970e757dc79179354e6daea61c3cf4e555..c3d41bc001e2e35ab8f3a303f121517418ca357c 100644 GIT binary patch delta 627 zcmbQj*2XqLrT$fbPl#)HWJ*L-YIJNyOk8Gcd{$gSc6?$^LQ-yWYC%d`VQP9&MpkKd zZbg1!O<{3eQAvGqX+ud_V`+I)Sw(YYbz5zHS6xGQLsM^Kb6-HDPHe>PhnM)QdTDxS~#-+jokw=>J+Wus z$-Vne?LT(2ArcVFCl@cRD4HxD1bd;Ijn)90U_z4-j%)z{Z=f4q73^X>az?>_u~|MAa;J_zeadI!C*5nFC{rX?x5g)k^HnDPx=|pTu05V=b-=Mc_ za*)f~3wI~h_e@?mZQtKF%>9$KBi?WP)b6W!&F#N$X3oxAJO6IE8rHXh=lg+QA0*Nu zwjb@7dh=D~uH1c{5m6@({u0s7PSTA%wVL^Sq3tK0)p}uxd&D-*{xWB2&T_`pd||nD zuQYFm@a^iVpWV&4TJG8*AJazye?d;8|c_dz8fs=37` t?_m-Ufciaa3RH4(J(IFD$iTmq>mOVUbvHb^J(2+kJYD@<);T3K0RZ)OQ%(Q? delta 600 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 S;`!gN3W7qqAnI-X(*6b9sV;K> diff --git a/testing/resources/pixel/bug_1388_2_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1388_2_expected_skia.pdf.0.png index 29b9e3c388a03b973fd08c22602086c118402f8f..40c79629e33448324b6f121b1079c7af35dc4b19 100644 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^CqS43NHBC5e{^DCV9fP&aSW-r_4evU?UqED10TQh zzSK2(Ib(`z*iL%~&zn3;Uh6jNh&9JvEZuxix7^wn&%AW9yHS5Z_&2RYZ z+ZWIMF)u9lN#Vb(0cp?HO;g@8F|G2&o``pBr}7Que#ce)TKuHhU(o5Dw)Eontwk|& zqk8x+tue7vzh-sX`QEO#_C0)?O2rPPhUK@1-Q!5y|3yeL#Wa>9QS&U{zS9-&%YI0B jdtI+96QClPU_V#?N@DfC_XiI#f+E1v)z4*}Q$iB}S%`#U literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^CqS43NHBC5e{=#;jKx9jP7LeL$-D%zGdx`!Ln>~) zy=t%BnkaGLVfd>l2P+JW5{)WrnIv_SCLB~(_-U*$Q%9|PiC<8d=gcWWMONJ+MQZmQ zWJS8}n4L59w%zsaVxkCBlv(bfj_Wq3Z`+RQljThEFxyt&n zt2geCi_hblI%Bub`z_z1Rwv8zre-~;(L8Ey6tTvvEy}RoS8&take`8S)^frvHobn& zdzY7PykI|DA?4Ytg?mHf@43x8-Fo|pLi%aJrQ4!nBQ3jTNOPgg&ebxsLQ0O=QxCjbBd diff --git a/testing/resources/pixel/bug_432208037_expected_skia.pdf.0.png b/testing/resources/pixel/bug_432208037_expected_skia.pdf.0.png index a044b9d51451eb8c0cbf3f51f88161bc5f12f293..c85acb0bccdc69400f760ee2d14121d5af086159 100644 GIT binary patch literal 1184 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 delta 3159 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 KR=fQ4+y4MUl3@S< diff --git a/testing/resources/pixel/bug_524043_1_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_1_expected_skia.pdf.0.png index 7e8ec39695ff17f84b6504085ffaccd36ae5edb4..c019b803d790f23e4234b099b1a00a877a95d50a 100644 GIT binary patch literal 1547 zcmb`H=|2+;0LP^qbL0q*M$AO6ma9Ci96Q`skE~oHYK}H}5OVcAG-Weljvh?H+()?{ zi5{sQMufFzv~nMdW|&*Eo_hDZdY(7Wi{JP62Yf%DFX4iVt+WJCLP$tR+TIT7_U&ok zC;kmWsU~Z1At4dEJrd@Ai?z&(zu=Bi6 zJY8ixizirw6h({S5jdgb?EMr9fgb}3YXi=#f#%kZYZ5~~e z<_pmt$3{%%0_iE|bY8uYS1xQa$2F-dy8g_wyG~8hRDi7H>q3pF7pGDlz17eT!RF6) z^owHF3t^;k@|HDbc*S%XUAkxz3s6h-GId~{dO#gRy=U_RCK5puoGfJ%9>LgFL{ zH3pn)n^`4>Ps9YGk=vDr?Ob<^=j4DaW0gh|O^PQ?pTMEjP=6Mq%y-iK%dMg7zR7Jz zmzrZ{__#*-ybFN~!q9bRdL)YHU__Z0Pp~q8iGo(!?3Y-mUKkeah-k9T3MwoRHj}~ zsB`xe&O2^{Mubn3I@bw(Er!W9kjL|~KyztvvEa$qfk~0CTJB;x%9Dscmx4V+01!Sq^iDn)$V2(1W#S zG@{O$?qHIr%=z91Bg#c}+`-I9#5FbS>XxK9=vN`(e+At}<7m;vx*tY3+~((CfIMCS zJXdy%zs{>#z>~kw->57r@?b}(f~+-u%J#U8GDkEZpFQ?@BO`i^`*1X5MKa=^0&BLs zAQ&|7VO<3o^%ofe#FTXjLwT6$jVp<-3!x2uXYr zMGC~SEGU-qf99O28ubzd2sj3d++&i_u$i4o@v~48!e#f!vgCZ`%Bup6o7jBE@OB|)@hxe{&3{;9k1};xmPKj8_+vX85T1@eY;-+iB0b@CX@>3L zmYBL!cdEHc7pIolLb#msjNEtb!y)7enTBph&Ht3~4^?)xA1ujgaFjX`Tl&57_SP=Q J2KbfazX2NR#x(!{ literal 1549 zcmb`H`8yK~0LPcJXj-mvJvQ@t-E$O;gdtm#tGRL?t+&^;m*h;YHLbOn93?d}%pAFo zxym(!NMVk>h9q9+pytk=Xrnle!jnbfBSwO*xOnIMPx+)000n$v~>K@te-jl z1AtWhO~j8n7Vc<`08|XgF9QIAy(mj_OceVscC@{dlf3YTvHvylb#)~>og2}7_my51 zfm6v;ls3KTPXLjK!k$&PN=l{TPh*?zpJW$YkbzTVjZ*!8cO+fyq@0_lLf`m1xOGWI ztxuWk%?LM=SQBFzycedk%%!9FrIu~@z~WJ2ikPD^;y5G)^uOcC8(CCu((08Z`_j*b zVai^ey-eJmD<%Zl+%jg;TOtP6x%_hm&A8!c&4uxfd%}7!TC4u_x;bl}S+X*@?}{u< zkdM|wk_j0rULBB+omh-asn@!xU!Js6M%|qZ4NCKbcA~pdjGe$kWzQF;u=*U-WKy2N#;Nz(rT8X1zLdbyur<&L~3T`PQ)NymN~|IsC|Qb zrzao>+=E0d@h6w_0a+0rhDfd(;p=Pub1jpdqcvq$k&n6|l6&t6+bJ=vktefkKX7Ci z-Cub+UF(T1BBPoV##{}bp>=S#TvcNcJjI@{6`M@(V6HUU;pG)^XJmW}MpZq#mc6n! zk_TtLW)J7pmP>f1icc?za6N5w^J+^Gun-t0AgLrh>{eZVwRQbmrd|3tRA9uB~ksa)W7jGdhOe(@$$B@sf{p%%4GjN$3s9yDgPdfM~<#Ow@y? zyk2LbQ^E=tu+nZ@F#|UPiX+Em?rEg?n&m5pU53saemrd=4w6+nr768(r(;rAUDSGR ztL%gxgUPbZwuTF6ftm(`>BvW!Xu~H=sVpIhLbxN0y?_>)EJBc=fudnJ`vD7E+wp!4 zN}2rbGwP&Bzy*7)&%%ud)2NO;2N2cwVdjbIxTjUUu)7x{>&y^cL=Pwbe%vC(Ktct% zlIn8h0S0Ije5SB|+yN7tr%!`DV`J9o-ERYY{t6<(;;7*k}puDw32VGI3X+aGSjMK(JkOYmcKP*EuJ)x^ zjp{3SDueF?+BvGzUHtYQ&BfrU#=;>M*$JJ;YpgMbDs<&ieQ(tMJ#um7@e({+>2ApL zJ?FS~RduS+3^z%|IrE^K_#6YQXpxap_MQ>LaVlz6<&6#xx+?E2OY@4G%=FGEaeyIK zIXg}fFLSp(mDV>AA{_hzt?>S>eDo2p+Ub7tN!|-~!TYrag@m3s=LKlx#DwxOxBBfT zgbUE(MgH_T4X`OWIB~(Xtho?D(gNv^`FN#8b`|r%=hVPA?;j)dh_cMvrH^0n*Q{iK zXoBLkaI7G&k2WGO;x;yrCRY zW|$SjGmN`r6!f)hN;v5iU!d+?PYg>-iZT{_ub*4e%~kZ+t_$2L=++(P7PM`LXyt_M zPVNu1#aj@fteRZpswyqaO26}mY|_&IiyjMS78T211cs}-998`EJj%+}vI60g^be}3 B#>@Z! diff --git a/testing/resources/pixel/bug_524043_2_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_2_expected_skia.pdf.0.png index 3b453177f86ac0506d5768231c0f336ac2a38835..d2c589ef955df5e87167862af34a84a68efee645 100644 GIT binary patch delta 523 zcmV+m0`&c@1*rv)BYy&LNklv@qRvhdgUZ%(dw>`Xfbl0W9z_#|4^ zUGM)S_ZwX9hzvDWb)==T-3TULxG(CQJzn|TQlZ$`sUfF8MtA)h z4oLIcT%bSY9-j|IQl6)?dwa~IfA#Y~w_LU$X|G)GS$L_#z7uvuf7_P}i{f=oN3JNP z>P?7*`X;vO8JTPmdALK*i21q8kZ0B54>qJwAxF2&i=!aN^=?5Pw`#~#v&e&>h79g5 zLgefDnxqY}D)MKWVvd50_@;Bo0wnI5%7-IqeYDPrkx1>lT7-;!%WivZU52+h=L!`! z-hbTiPU@z!jv4mQI{!elZ2NO#edcCOW3VZ(Y^#>7%2^l4eCjbBd N002ovPDHLkV1lit{RRL4 delta 510 zcmVPx%XGugsRCwC$)=x+jaTLIDPhHxR2_J#m77^+YK}BSc8g-CVq~q#}hfolf z1qEHD)^Jmw^BYGOp^Kiz<@-DQ<_+`S;luAe=9eN#vQmHm0g=N>k>DY^i=+XN@ApvSiPy@gWgz=cU%0;n z9o^MgVfk>U{f1xO*Jz%o*xIX{YhjmH<&4;6rCh7hqixT%0iz<6Tej|eJ!5;mU=_&t z1DVT_oJFa4wUPcuZ>^1gOFPo0sn*gOq{Dzj?c(bbV^D^km=&RnpMxTH>zqhef!FI( zkh-DC>uN@R=mRlYq9C7(6Oh@|rezaySRt*s`__UyR=WZDp06NNc_N=m738BU0g-TP z+PVobDx@cK)>4qMEB}rlk<{NhB&u4g#b~Xb1Y}a=W>60UkIafyujAjc zJY8ixizirw6h({S5jdgb?EMr9fgb}3YXi=#f#%kZYZ5~~e z<_pmt$3{%%0_iE|bY8uYS1xQa$2F-dy8g_wyG~8hRDi7H>q3pF7pGDlz17eT!RF6) z^owHF3t^;k@|HDbc*S%XUAkxz3s6h-GId~{dO#gRy=U_RCK5puoGfJ%9>LgFL{ zH3pn)n^`4>Ps9YGk=vDr?Ob<^=j4DaW0gh|O^PQ?pTMEjP=6Mq%y-iK%dMg7zR7Jz zmzrZ{__#*-ybFN~!q9bRdL)YHU__Z0Pp~q8iGo(!?3Y-mUKkeah-k9T3MwoRHj}~ zsB`xe&O2^{Mubn3I@bw(Er!W9kjL|~KyztvvEa$qfk~0CTJB;x%9Dscmx4V+01!Sq^iDn)$V2(1W#S zG@{O$?qHIr%=z91Bg#c}+`-I9#5FbS>XxK9=vN`(e+At}<7m;vx*tY3+~((CfIMCS zJXdy%zs{>#z>~kw->57r@?b}(f~+-u%J#U8GDkEZpFQ?@BO`i^`*1X5MKa=^0&BLs zAQ&|7VO<3o^%ofe#FTXjLwT6$jVp<-3!x2uXYr zMGC~SEGU-qf99O28ubzd2sj3d++&i_u$i4o@v~48!e#f!vgCZ`%Bup6o7jBE@OB|)@hxe{&3{;9k1};xmPKj8_+vX85T1@eY;-+iB0b@CX@>3L zmYBL!cdEHc7pIolLb#msjNEtb!y)7enTBph&Ht3~4^?)xA1ujgaFjX`Tl&57_SP=Q J2KbfazX2NR#x(!{ literal 1549 zcmb`H`8yK~0LPcJXj-mvJvQ@t-E$O;gdtm#tGRL?t+&^;m*h;YHLbOn93?d}%pAFo zxym(!NMVk>h9q9+pytk=Xrnle!jnbfBSwO*xOnIMPx+)000n$v~>K@te-jl z1AtWhO~j8n7Vc<`08|XgF9QIAy(mj_OceVscC@{dlf3YTvHvylb#)~>og2}7_my51 zfm6v;ls3KTPXLjK!k$&PN=l{TPh*?zpJW$YkbzTVjZ*!8cO+fyq@0_lLf`m1xOGWI ztxuWk%?LM=SQBFzycedk%%!9FrIu~@z~WJ2ikPD^;y5G)^uOcC8(CCu((08Z`_j*b zVai^ey-eJmD<%Zl+%jg;TOtP6x%_hm&A8!c&4uxfd%}7!TC4u_x;bl}S+X*@?}{u< zkdM|wk_j0rULBB+omh-asn@!xU!Js6M%|qZ4NCKbcA~pdjGe$kWzQF;u=*U-WKy2N#;Nz(rT8X1zLdbyur<&L~3T`PQ)NymN~|IsC|Qb zrzao>+=E0d@h6w_0a+0rhDfd(;p=Pub1jpdqcvq$k&n6|l6&t6+bJ=vktefkKX7Ci z-Cub+UF(T1BBPoV##{}bp>=S#TvcNcJjI@{6`M@(V6HUU;pG)^XJmW}MpZq#mc6n! zk_TtLW)J7pmP>f1icc?za6N5w^J+^Gun-t0AgLrh>{eZVwRQbmrd|3tRA9uB~ksa)W7jGdhOe(@$$B@sf{p%%4GjN$3s9yDgPdfM~<#Ow@y? zyk2LbQ^E=tu+nZ@F#|UPiX+Em?rEg?n&m5pU53saemrd=4w6+nr768(r(;rAUDSGR ztL%gxgUPbZwuTF6ftm(`>BvW!Xu~H=sVpIhLbxN0y?_>)EJBc=fudnJ`vD7E+wp!4 zN}2rbGwP&Bzy*7)&%%ud)2NO;2N2cwVdjbIxTjUUu)7x{>&y^cL=Pwbe%vC(Ktct% zlIn8h0S0Ije5SB|+yN7tr%!`DV`J9o-ERYY{t6<(;;7*k}puDw32VGI3X+aGSjMK(JkOYmcKP*EuJ)x^ zjp{3SDueF?+BvGzUHtYQ&BfrU#=;>M*$JJ;YpgMbDs<&ieQ(tMJ#um7@e({+>2ApL zJ?FS~RduS+3^z%|IrE^K_#6YQXpxap_MQ>LaVlz6<&6#xx+?E2OY@4G%=FGEaeyIK zIXg}fFLSp(mDV>AA{_hzt?>S>eDo2p+Ub7tN!|-~!TYrag@m3s=LKlx#DwxOxBBfT zgbUE(MgH_T4X`OWIB~(Xtho?D(gNv^`FN#8b`|r%=hVPA?;j)dh_cMvrH^0n*Q{iK zXoBLkaI7G&k2WGO;x;yrCRY zW|$SjGmN`r6!f)hN;v5iU!d+?PYg>-iZT{_ub*4e%~kZ+t_$2L=++(P7PM`LXyt_M zPVNu1#aj@fteRZpswyqaO26}mY|_&IiyjMS78T211cs}-998`EJj%+}vI60g^be}3 B#>@Z! diff --git a/testing/resources/pixel/bug_524043_4_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_4_expected_skia.pdf.0.png index 7e8ec39695ff17f84b6504085ffaccd36ae5edb4..c019b803d790f23e4234b099b1a00a877a95d50a 100644 GIT binary patch literal 1547 zcmb`H=|2+;0LP^qbL0q*M$AO6ma9Ci96Q`skE~oHYK}H}5OVcAG-Weljvh?H+()?{ zi5{sQMufFzv~nMdW|&*Eo_hDZdY(7Wi{JP62Yf%DFX4iVt+WJCLP$tR+TIT7_U&ok zC;kmWsU~Z1At4dEJrd@Ai?z&(zu=Bi6 zJY8ixizirw6h({S5jdgb?EMr9fgb}3YXi=#f#%kZYZ5~~e z<_pmt$3{%%0_iE|bY8uYS1xQa$2F-dy8g_wyG~8hRDi7H>q3pF7pGDlz17eT!RF6) z^owHF3t^;k@|HDbc*S%XUAkxz3s6h-GId~{dO#gRy=U_RCK5puoGfJ%9>LgFL{ zH3pn)n^`4>Ps9YGk=vDr?Ob<^=j4DaW0gh|O^PQ?pTMEjP=6Mq%y-iK%dMg7zR7Jz zmzrZ{__#*-ybFN~!q9bRdL)YHU__Z0Pp~q8iGo(!?3Y-mUKkeah-k9T3MwoRHj}~ zsB`xe&O2^{Mubn3I@bw(Er!W9kjL|~KyztvvEa$qfk~0CTJB;x%9Dscmx4V+01!Sq^iDn)$V2(1W#S zG@{O$?qHIr%=z91Bg#c}+`-I9#5FbS>XxK9=vN`(e+At}<7m;vx*tY3+~((CfIMCS zJXdy%zs{>#z>~kw->57r@?b}(f~+-u%J#U8GDkEZpFQ?@BO`i^`*1X5MKa=^0&BLs zAQ&|7VO<3o^%ofe#FTXjLwT6$jVp<-3!x2uXYr zMGC~SEGU-qf99O28ubzd2sj3d++&i_u$i4o@v~48!e#f!vgCZ`%Bup6o7jBE@OB|)@hxe{&3{;9k1};xmPKj8_+vX85T1@eY;-+iB0b@CX@>3L zmYBL!cdEHc7pIolLb#msjNEtb!y)7enTBph&Ht3~4^?)xA1ujgaFjX`Tl&57_SP=Q J2KbfazX2NR#x(!{ literal 1549 zcmb`H`8yK~0LPcJXj-mvJvQ@t-E$O;gdtm#tGRL?t+&^;m*h;YHLbOn93?d}%pAFo zxym(!NMVk>h9q9+pytk=Xrnle!jnbfBSwO*xOnIMPx+)000n$v~>K@te-jl z1AtWhO~j8n7Vc<`08|XgF9QIAy(mj_OceVscC@{dlf3YTvHvylb#)~>og2}7_my51 zfm6v;ls3KTPXLjK!k$&PN=l{TPh*?zpJW$YkbzTVjZ*!8cO+fyq@0_lLf`m1xOGWI ztxuWk%?LM=SQBFzycedk%%!9FrIu~@z~WJ2ikPD^;y5G)^uOcC8(CCu((08Z`_j*b zVai^ey-eJmD<%Zl+%jg;TOtP6x%_hm&A8!c&4uxfd%}7!TC4u_x;bl}S+X*@?}{u< zkdM|wk_j0rULBB+omh-asn@!xU!Js6M%|qZ4NCKbcA~pdjGe$kWzQF;u=*U-WKy2N#;Nz(rT8X1zLdbyur<&L~3T`PQ)NymN~|IsC|Qb zrzao>+=E0d@h6w_0a+0rhDfd(;p=Pub1jpdqcvq$k&n6|l6&t6+bJ=vktefkKX7Ci z-Cub+UF(T1BBPoV##{}bp>=S#TvcNcJjI@{6`M@(V6HUU;pG)^XJmW}MpZq#mc6n! zk_TtLW)J7pmP>f1icc?za6N5w^J+^Gun-t0AgLrh>{eZVwRQbmrd|3tRA9uB~ksa)W7jGdhOe(@$$B@sf{p%%4GjN$3s9yDgPdfM~<#Ow@y? zyk2LbQ^E=tu+nZ@F#|UPiX+Em?rEg?n&m5pU53saemrd=4w6+nr768(r(;rAUDSGR ztL%gxgUPbZwuTF6ftm(`>BvW!Xu~H=sVpIhLbxN0y?_>)EJBc=fudnJ`vD7E+wp!4 zN}2rbGwP&Bzy*7)&%%ud)2NO;2N2cwVdjbIxTjUUu)7x{>&y^cL=Pwbe%vC(Ktct% zlIn8h0S0Ije5SB|+yN7tr%!`DV`J9o-ERYY{t6<(;;7*k}puDw32VGI3X+aGSjMK(JkOYmcKP*EuJ)x^ zjp{3SDueF?+BvGzUHtYQ&BfrU#=;>M*$JJ;YpgMbDs<&ieQ(tMJ#um7@e({+>2ApL zJ?FS~RduS+3^z%|IrE^K_#6YQXpxap_MQ>LaVlz6<&6#xx+?E2OY@4G%=FGEaeyIK zIXg}fFLSp(mDV>AA{_hzt?>S>eDo2p+Ub7tN!|-~!TYrag@m3s=LKlx#DwxOxBBfT zgbUE(MgH_T4X`OWIB~(Xtho?D(gNv^`FN#8b`|r%=hVPA?;j)dh_cMvrH^0n*Q{iK zXoBLkaI7G&k2WGO;x;yrCRY zW|$SjGmN`r6!f)hN;v5iU!d+?PYg>-iZT{_ub*4e%~kZ+t_$2L=++(P7PM`LXyt_M zPVNu1#aj@fteRZpswyqaO26}mY|_&IiyjMS78T211cs}-998`EJj%+}vI60g^be}3 B#>@Z! diff --git a/testing/resources/pixel/bug_524043_5_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_5_expected_skia.pdf.0.png index 7e8ec39695ff17f84b6504085ffaccd36ae5edb4..c019b803d790f23e4234b099b1a00a877a95d50a 100644 GIT binary patch literal 1547 zcmb`H=|2+;0LP^qbL0q*M$AO6ma9Ci96Q`skE~oHYK}H}5OVcAG-Weljvh?H+()?{ zi5{sQMufFzv~nMdW|&*Eo_hDZdY(7Wi{JP62Yf%DFX4iVt+WJCLP$tR+TIT7_U&ok zC;kmWsU~Z1At4dEJrd@Ai?z&(zu=Bi6 zJY8ixizirw6h({S5jdgb?EMr9fgb}3YXi=#f#%kZYZ5~~e z<_pmt$3{%%0_iE|bY8uYS1xQa$2F-dy8g_wyG~8hRDi7H>q3pF7pGDlz17eT!RF6) z^owHF3t^;k@|HDbc*S%XUAkxz3s6h-GId~{dO#gRy=U_RCK5puoGfJ%9>LgFL{ zH3pn)n^`4>Ps9YGk=vDr?Ob<^=j4DaW0gh|O^PQ?pTMEjP=6Mq%y-iK%dMg7zR7Jz zmzrZ{__#*-ybFN~!q9bRdL)YHU__Z0Pp~q8iGo(!?3Y-mUKkeah-k9T3MwoRHj}~ zsB`xe&O2^{Mubn3I@bw(Er!W9kjL|~KyztvvEa$qfk~0CTJB;x%9Dscmx4V+01!Sq^iDn)$V2(1W#S zG@{O$?qHIr%=z91Bg#c}+`-I9#5FbS>XxK9=vN`(e+At}<7m;vx*tY3+~((CfIMCS zJXdy%zs{>#z>~kw->57r@?b}(f~+-u%J#U8GDkEZpFQ?@BO`i^`*1X5MKa=^0&BLs zAQ&|7VO<3o^%ofe#FTXjLwT6$jVp<-3!x2uXYr zMGC~SEGU-qf99O28ubzd2sj3d++&i_u$i4o@v~48!e#f!vgCZ`%Bup6o7jBE@OB|)@hxe{&3{;9k1};xmPKj8_+vX85T1@eY;-+iB0b@CX@>3L zmYBL!cdEHc7pIolLb#msjNEtb!y)7enTBph&Ht3~4^?)xA1ujgaFjX`Tl&57_SP=Q J2KbfazX2NR#x(!{ literal 1549 zcmb`H`8yK~0LPcJXj-mvJvQ@t-E$O;gdtm#tGRL?t+&^;m*h;YHLbOn93?d}%pAFo zxym(!NMVk>h9q9+pytk=Xrnle!jnbfBSwO*xOnIMPx+)000n$v~>K@te-jl z1AtWhO~j8n7Vc<`08|XgF9QIAy(mj_OceVscC@{dlf3YTvHvylb#)~>og2}7_my51 zfm6v;ls3KTPXLjK!k$&PN=l{TPh*?zpJW$YkbzTVjZ*!8cO+fyq@0_lLf`m1xOGWI ztxuWk%?LM=SQBFzycedk%%!9FrIu~@z~WJ2ikPD^;y5G)^uOcC8(CCu((08Z`_j*b zVai^ey-eJmD<%Zl+%jg;TOtP6x%_hm&A8!c&4uxfd%}7!TC4u_x;bl}S+X*@?}{u< zkdM|wk_j0rULBB+omh-asn@!xU!Js6M%|qZ4NCKbcA~pdjGe$kWzQF;u=*U-WKy2N#;Nz(rT8X1zLdbyur<&L~3T`PQ)NymN~|IsC|Qb zrzao>+=E0d@h6w_0a+0rhDfd(;p=Pub1jpdqcvq$k&n6|l6&t6+bJ=vktefkKX7Ci z-Cub+UF(T1BBPoV##{}bp>=S#TvcNcJjI@{6`M@(V6HUU;pG)^XJmW}MpZq#mc6n! zk_TtLW)J7pmP>f1icc?za6N5w^J+^Gun-t0AgLrh>{eZVwRQbmrd|3tRA9uB~ksa)W7jGdhOe(@$$B@sf{p%%4GjN$3s9yDgPdfM~<#Ow@y? zyk2LbQ^E=tu+nZ@F#|UPiX+Em?rEg?n&m5pU53saemrd=4w6+nr768(r(;rAUDSGR ztL%gxgUPbZwuTF6ftm(`>BvW!Xu~H=sVpIhLbxN0y?_>)EJBc=fudnJ`vD7E+wp!4 zN}2rbGwP&Bzy*7)&%%ud)2NO;2N2cwVdjbIxTjUUu)7x{>&y^cL=Pwbe%vC(Ktct% zlIn8h0S0Ije5SB|+yN7tr%!`DV`J9o-ERYY{t6<(;;7*k}puDw32VGI3X+aGSjMK(JkOYmcKP*EuJ)x^ zjp{3SDueF?+BvGzUHtYQ&BfrU#=;>M*$JJ;YpgMbDs<&ieQ(tMJ#um7@e({+>2ApL zJ?FS~RduS+3^z%|IrE^K_#6YQXpxap_MQ>LaVlz6<&6#xx+?E2OY@4G%=FGEaeyIK zIXg}fFLSp(mDV>AA{_hzt?>S>eDo2p+Ub7tN!|-~!TYrag@m3s=LKlx#DwxOxBBfT zgbUE(MgH_T4X`OWIB~(Xtho?D(gNv^`FN#8b`|r%=hVPA?;j)dh_cMvrH^0n*Q{iK zXoBLkaI7G&k2WGO;x;yrCRY zW|$SjGmN`r6!f)hN;v5iU!d+?PYg>-iZT{_ub*4e%~kZ+t_$2L=++(P7PM`LXyt_M zPVNu1#aj@fteRZpswyqaO26}mY|_&IiyjMS78T211cs}-998`EJj%+}vI60g^be}3 B#>@Z! diff --git a/testing/resources/pixel/bug_524043_7_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_7_expected_skia.pdf.0.png index 3b453177f86ac0506d5768231c0f336ac2a38835..d2c589ef955df5e87167862af34a84a68efee645 100644 GIT binary patch delta 523 zcmV+m0`&c@1*rv)BYy&LNklv@qRvhdgUZ%(dw>`Xfbl0W9z_#|4^ zUGM)S_ZwX9hzvDWb)==T-3TULxG(CQJzn|TQlZ$`sUfF8MtA)h z4oLIcT%bSY9-j|IQl6)?dwa~IfA#Y~w_LU$X|G)GS$L_#z7uvuf7_P}i{f=oN3JNP z>P?7*`X;vO8JTPmdALK*i21q8kZ0B54>qJwAxF2&i=!aN^=?5Pw`#~#v&e&>h79g5 zLgefDnxqY}D)MKWVvd50_@;Bo0wnI5%7-IqeYDPrkx1>lT7-;!%WivZU52+h=L!`! z-hbTiPU@z!jv4mQI{!elZ2NO#edcCOW3VZ(Y^#>7%2^l4eCjbBd N002ovPDHLkV1lit{RRL4 delta 510 zcmVPx%XGugsRCwC$)=x+jaTLIDPhHxR2_J#m77^+YK}BSc8g-CVq~q#}hfolf z1qEHD)^Jmw^BYGOp^Kiz<@-DQ<_+`S;luAe=9eN#vQmHm0g=N>k>DY^i=+XN@ApvSiPy@gWgz=cU%0;n z9o^MgVfk>U{f1xO*Jz%o*xIX{YhjmH<&4;6rCh7hqixT%0iz<6Tej|eJ!5;mU=_&t z1DVT_oJFa4wUPcuZ>^1gOFPo0sn*gOq{Dzj?c(bbV^D^km=&RnpMxTH>zqhef!FI( zkh-DC>uN@R=mRlYq9C7(6Oh@|rezaySRt*s`__UyR=WZDp06NNc_N=m738BU0g-TP z+PVobDx@cK)>4qMEB}rlk<{NhB&u4g#b~Xb1Y}a=W>60UkIafyujAjctt`tp{1HU-MupZ>Vr?t9)HieW+be#79|^WF1(zTdsz?w&KEg3ItP0Fkd51POEk9g(dYe+hKZ z33LLTKqt@%^sIK7UG}ftfjocL9gyU>7n;s>l0O-3F||XIBv0g$*O@hGRu^2{T9c|J z?+yzRy)EC)+X5GDlZ_s_WzpDWN59DJexQH0!~YF>-Ceuq_@*|V)Sbqd2937Yg#1;l ziL3#~m4>%e`n)%6j9G&k+E`H*f4J#|u?h4gQ)7}&&uC1d2T#p-GKHS&`iXOkrVdFO zn$~2k;kLV<4KJ1J*te-!&|cx4`9QCIBwP%&M=KhQ|Oi9=;@5$SQ&q{jQoU)D_*V;(0 zc}7xvN*;7;dVO5FzU*@qAbOP~&8tlAyeIW}=kR$0a$J3BUXr9&OqVs--85@*Ns(EV zM(-=zs(qdx(&&0IctoB^&g-pnJ!Y?V7JZkohS{n2bn7-ZOVW1Je`6gvuCWXnSqg zfBlAN)_~(m@vS#{%ja$zu?Jth&Kq8QbaQF=Z2FPyW%IZ)ZO|31G?Cobr_V_XJP#&6 zUT3bsbuw;qYg>hP=89jW^ic-7jxD~zU$dure%?>-z$G-*Zrpd61}H!dU2>`$2pPF9+9{Z1POEk l9g(dY9SL*-9ds&){sy4}tED&>4DJ8`002ovPDHLkV1hN>JG}q^ delta 1130 zcmZ3@xrTFsay~)y^-$`o62zfqkI0XE0(3(k2$Pa z%XZGba{2Mf6Rq6Qxhm1;j+%+(TwP@Ea@hCy+8B{9i&SD~D_*o$Qp)+;d{2bcQQvDz z@1d}r;)hCB=$aLAZ!e1b`}NU^@0Pp2tLcR4zx&R8=%dZN=QjPE^6%o6y>{{ZXPWHD zA~M;Jg`GwHf}=W=BUsBnf6M1@I-V0xOkMbVTJEe}uU>rC_Y0c-GvNQ0!zxbe z_r3l*>(ifIil%y=v6q*0@-1Jr=E={_8H~rL>TMC3K5cD|T|RHto}Cq?E1uLZ)u{UW z=<}q1QBltqrq7SMWzjA7{@2dp*<$_PQv7+_t_5s;ICBr%&c52&pGsw~E?FB#{)-{YIiQJedXJ6P(>U9GpLCT-DuKI2RBy>%d) z&7R3l_lv1tZo8xWV#AktmDzlI?LW*}QhzttGIXL^qF5jxxTi8CYUcOfO_}1lXG%c2%*yp3pSXJ_Cy|LBRT^p*?+E2FZbD5N< z{jtn0XO>E4{HdF#*`Dl>GU=UkCC4wS`CjvJ8=2awdX03S;MQo&eA)%QH%In%x@u}qb%h^}F_dyzUd{$tQ$JDevZm)#&I@Z_E`9r~PSy6;iktS< zQr&hb-#mgQOLph+vmzS*zzyJA5mPc93P(p<5%zvji| z)nR{@tt<#zbp6YVFZoOASNgB7EKY0p?7X*EXTPJctY78PQ+tyQnftV3Z31deXDxs0 zU;Sa~?5cY#{pgMA-!!MfqLFxO^@CeZ5$GY1e^T&$|?dumQF0D-5gpUXO@geCxBC_jb( diff --git a/testing/resources/pixel/bug_543018_1_expected_skia.pdf.0.png b/testing/resources/pixel/bug_543018_1_expected_skia.pdf.0.png index 7e8ec39695ff17f84b6504085ffaccd36ae5edb4..c019b803d790f23e4234b099b1a00a877a95d50a 100644 GIT binary patch literal 1547 zcmb`H=|2+;0LP^qbL0q*M$AO6ma9Ci96Q`skE~oHYK}H}5OVcAG-Weljvh?H+()?{ zi5{sQMufFzv~nMdW|&*Eo_hDZdY(7Wi{JP62Yf%DFX4iVt+WJCLP$tR+TIT7_U&ok zC;kmWsU~Z1At4dEJrd@Ai?z&(zu=Bi6 zJY8ixizirw6h({S5jdgb?EMr9fgb}3YXi=#f#%kZYZ5~~e z<_pmt$3{%%0_iE|bY8uYS1xQa$2F-dy8g_wyG~8hRDi7H>q3pF7pGDlz17eT!RF6) z^owHF3t^;k@|HDbc*S%XUAkxz3s6h-GId~{dO#gRy=U_RCK5puoGfJ%9>LgFL{ zH3pn)n^`4>Ps9YGk=vDr?Ob<^=j4DaW0gh|O^PQ?pTMEjP=6Mq%y-iK%dMg7zR7Jz zmzrZ{__#*-ybFN~!q9bRdL)YHU__Z0Pp~q8iGo(!?3Y-mUKkeah-k9T3MwoRHj}~ zsB`xe&O2^{Mubn3I@bw(Er!W9kjL|~KyztvvEa$qfk~0CTJB;x%9Dscmx4V+01!Sq^iDn)$V2(1W#S zG@{O$?qHIr%=z91Bg#c}+`-I9#5FbS>XxK9=vN`(e+At}<7m;vx*tY3+~((CfIMCS zJXdy%zs{>#z>~kw->57r@?b}(f~+-u%J#U8GDkEZpFQ?@BO`i^`*1X5MKa=^0&BLs zAQ&|7VO<3o^%ofe#FTXjLwT6$jVp<-3!x2uXYr zMGC~SEGU-qf99O28ubzd2sj3d++&i_u$i4o@v~48!e#f!vgCZ`%Bup6o7jBE@OB|)@hxe{&3{;9k1};xmPKj8_+vX85T1@eY;-+iB0b@CX@>3L zmYBL!cdEHc7pIolLb#msjNEtb!y)7enTBph&Ht3~4^?)xA1ujgaFjX`Tl&57_SP=Q J2KbfazX2NR#x(!{ literal 1549 zcmb`H`8yK~0LPcJXj-mvJvQ@t-E$O;gdtm#tGRL?t+&^;m*h;YHLbOn93?d}%pAFo zxym(!NMVk>h9q9+pytk=Xrnle!jnbfBSwO*xOnIMPx+)000n$v~>K@te-jl z1AtWhO~j8n7Vc<`08|XgF9QIAy(mj_OceVscC@{dlf3YTvHvylb#)~>og2}7_my51 zfm6v;ls3KTPXLjK!k$&PN=l{TPh*?zpJW$YkbzTVjZ*!8cO+fyq@0_lLf`m1xOGWI ztxuWk%?LM=SQBFzycedk%%!9FrIu~@z~WJ2ikPD^;y5G)^uOcC8(CCu((08Z`_j*b zVai^ey-eJmD<%Zl+%jg;TOtP6x%_hm&A8!c&4uxfd%}7!TC4u_x;bl}S+X*@?}{u< zkdM|wk_j0rULBB+omh-asn@!xU!Js6M%|qZ4NCKbcA~pdjGe$kWzQF;u=*U-WKy2N#;Nz(rT8X1zLdbyur<&L~3T`PQ)NymN~|IsC|Qb zrzao>+=E0d@h6w_0a+0rhDfd(;p=Pub1jpdqcvq$k&n6|l6&t6+bJ=vktefkKX7Ci z-Cub+UF(T1BBPoV##{}bp>=S#TvcNcJjI@{6`M@(V6HUU;pG)^XJmW}MpZq#mc6n! zk_TtLW)J7pmP>f1icc?za6N5w^J+^Gun-t0AgLrh>{eZVwRQbmrd|3tRA9uB~ksa)W7jGdhOe(@$$B@sf{p%%4GjN$3s9yDgPdfM~<#Ow@y? zyk2LbQ^E=tu+nZ@F#|UPiX+Em?rEg?n&m5pU53saemrd=4w6+nr768(r(;rAUDSGR ztL%gxgUPbZwuTF6ftm(`>BvW!Xu~H=sVpIhLbxN0y?_>)EJBc=fudnJ`vD7E+wp!4 zN}2rbGwP&Bzy*7)&%%ud)2NO;2N2cwVdjbIxTjUUu)7x{>&y^cL=Pwbe%vC(Ktct% zlIn8h0S0Ije5SB|+yN7tr%!`DV`J9o-ERYY{t6<(;;7*k}puDw32VGI3X+aGSjMK(JkOYmcKP*EuJ)x^ zjp{3SDueF?+BvGzUHtYQ&BfrU#=;>M*$JJ;YpgMbDs<&ieQ(tMJ#um7@e({+>2ApL zJ?FS~RduS+3^z%|IrE^K_#6YQXpxap_MQ>LaVlz6<&6#xx+?E2OY@4G%=FGEaeyIK zIXg}fFLSp(mDV>AA{_hzt?>S>eDo2p+Ub7tN!|-~!TYrag@m3s=LKlx#DwxOxBBfT zgbUE(MgH_T4X`OWIB~(Xtho?D(gNv^`FN#8b`|r%=hVPA?;j)dh_cMvrH^0n*Q{iK zXoBLkaI7G&k2WGO;x;yrCRY zW|$SjGmN`r6!f)hN;v5iU!d+?PYg>-iZT{_ub*4e%~kZ+t_$2L=++(P7PM`LXyt_M zPVNu1#aj@fteRZpswyqaO26}mY|_&IiyjMS78T211cs}-998`EJj%+}vI60g^be}3 B#>@Z! diff --git a/testing/resources/pixel/bug_543018_2_expected_skia.pdf.0.png b/testing/resources/pixel/bug_543018_2_expected_skia.pdf.0.png index 7e8ec39695ff17f84b6504085ffaccd36ae5edb4..c019b803d790f23e4234b099b1a00a877a95d50a 100644 GIT binary patch literal 1547 zcmb`H=|2+;0LP^qbL0q*M$AO6ma9Ci96Q`skE~oHYK}H}5OVcAG-Weljvh?H+()?{ zi5{sQMufFzv~nMdW|&*Eo_hDZdY(7Wi{JP62Yf%DFX4iVt+WJCLP$tR+TIT7_U&ok zC;kmWsU~Z1At4dEJrd@Ai?z&(zu=Bi6 zJY8ixizirw6h({S5jdgb?EMr9fgb}3YXi=#f#%kZYZ5~~e z<_pmt$3{%%0_iE|bY8uYS1xQa$2F-dy8g_wyG~8hRDi7H>q3pF7pGDlz17eT!RF6) z^owHF3t^;k@|HDbc*S%XUAkxz3s6h-GId~{dO#gRy=U_RCK5puoGfJ%9>LgFL{ zH3pn)n^`4>Ps9YGk=vDr?Ob<^=j4DaW0gh|O^PQ?pTMEjP=6Mq%y-iK%dMg7zR7Jz zmzrZ{__#*-ybFN~!q9bRdL)YHU__Z0Pp~q8iGo(!?3Y-mUKkeah-k9T3MwoRHj}~ zsB`xe&O2^{Mubn3I@bw(Er!W9kjL|~KyztvvEa$qfk~0CTJB;x%9Dscmx4V+01!Sq^iDn)$V2(1W#S zG@{O$?qHIr%=z91Bg#c}+`-I9#5FbS>XxK9=vN`(e+At}<7m;vx*tY3+~((CfIMCS zJXdy%zs{>#z>~kw->57r@?b}(f~+-u%J#U8GDkEZpFQ?@BO`i^`*1X5MKa=^0&BLs zAQ&|7VO<3o^%ofe#FTXjLwT6$jVp<-3!x2uXYr zMGC~SEGU-qf99O28ubzd2sj3d++&i_u$i4o@v~48!e#f!vgCZ`%Bup6o7jBE@OB|)@hxe{&3{;9k1};xmPKj8_+vX85T1@eY;-+iB0b@CX@>3L zmYBL!cdEHc7pIolLb#msjNEtb!y)7enTBph&Ht3~4^?)xA1ujgaFjX`Tl&57_SP=Q J2KbfazX2NR#x(!{ literal 1549 zcmb`H`8yK~0LPcJXj-mvJvQ@t-E$O;gdtm#tGRL?t+&^;m*h;YHLbOn93?d}%pAFo zxym(!NMVk>h9q9+pytk=Xrnle!jnbfBSwO*xOnIMPx+)000n$v~>K@te-jl z1AtWhO~j8n7Vc<`08|XgF9QIAy(mj_OceVscC@{dlf3YTvHvylb#)~>og2}7_my51 zfm6v;ls3KTPXLjK!k$&PN=l{TPh*?zpJW$YkbzTVjZ*!8cO+fyq@0_lLf`m1xOGWI ztxuWk%?LM=SQBFzycedk%%!9FrIu~@z~WJ2ikPD^;y5G)^uOcC8(CCu((08Z`_j*b zVai^ey-eJmD<%Zl+%jg;TOtP6x%_hm&A8!c&4uxfd%}7!TC4u_x;bl}S+X*@?}{u< zkdM|wk_j0rULBB+omh-asn@!xU!Js6M%|qZ4NCKbcA~pdjGe$kWzQF;u=*U-WKy2N#;Nz(rT8X1zLdbyur<&L~3T`PQ)NymN~|IsC|Qb zrzao>+=E0d@h6w_0a+0rhDfd(;p=Pub1jpdqcvq$k&n6|l6&t6+bJ=vktefkKX7Ci z-Cub+UF(T1BBPoV##{}bp>=S#TvcNcJjI@{6`M@(V6HUU;pG)^XJmW}MpZq#mc6n! zk_TtLW)J7pmP>f1icc?za6N5w^J+^Gun-t0AgLrh>{eZVwRQbmrd|3tRA9uB~ksa)W7jGdhOe(@$$B@sf{p%%4GjN$3s9yDgPdfM~<#Ow@y? zyk2LbQ^E=tu+nZ@F#|UPiX+Em?rEg?n&m5pU53saemrd=4w6+nr768(r(;rAUDSGR ztL%gxgUPbZwuTF6ftm(`>BvW!Xu~H=sVpIhLbxN0y?_>)EJBc=fudnJ`vD7E+wp!4 zN}2rbGwP&Bzy*7)&%%ud)2NO;2N2cwVdjbIxTjUUu)7x{>&y^cL=Pwbe%vC(Ktct% zlIn8h0S0Ije5SB|+yN7tr%!`DV`J9o-ERYY{t6<(;;7*k}puDw32VGI3X+aGSjMK(JkOYmcKP*EuJ)x^ zjp{3SDueF?+BvGzUHtYQ&BfrU#=;>M*$JJ;YpgMbDs<&ieQ(tMJ#um7@e({+>2ApL zJ?FS~RduS+3^z%|IrE^K_#6YQXpxap_MQ>LaVlz6<&6#xx+?E2OY@4G%=FGEaeyIK zIXg}fFLSp(mDV>AA{_hzt?>S>eDo2p+Ub7tN!|-~!TYrag@m3s=LKlx#DwxOxBBfT zgbUE(MgH_T4X`OWIB~(Xtho?D(gNv^`FN#8b`|r%=hVPA?;j)dh_cMvrH^0n*Q{iK zXoBLkaI7G&k2WGO;x;yrCRY zW|$SjGmN`r6!f)hN;v5iU!d+?PYg>-iZT{_ub*4e%~kZ+t_$2L=++(P7PM`LXyt_M zPVNu1#aj@fteRZpswyqaO26}mY|_&IiyjMS78T211cs}-998`EJj%+}vI60g^be}3 B#>@Z! diff --git a/testing/resources/pixel/bug_551258_1_expected_skia.pdf.0.png b/testing/resources/pixel/bug_551258_1_expected_skia.pdf.0.png index 7e8ec39695ff17f84b6504085ffaccd36ae5edb4..c019b803d790f23e4234b099b1a00a877a95d50a 100644 GIT binary patch literal 1547 zcmb`H=|2+;0LP^qbL0q*M$AO6ma9Ci96Q`skE~oHYK}H}5OVcAG-Weljvh?H+()?{ zi5{sQMufFzv~nMdW|&*Eo_hDZdY(7Wi{JP62Yf%DFX4iVt+WJCLP$tR+TIT7_U&ok zC;kmWsU~Z1At4dEJrd@Ai?z&(zu=Bi6 zJY8ixizirw6h({S5jdgb?EMr9fgb}3YXi=#f#%kZYZ5~~e z<_pmt$3{%%0_iE|bY8uYS1xQa$2F-dy8g_wyG~8hRDi7H>q3pF7pGDlz17eT!RF6) z^owHF3t^;k@|HDbc*S%XUAkxz3s6h-GId~{dO#gRy=U_RCK5puoGfJ%9>LgFL{ zH3pn)n^`4>Ps9YGk=vDr?Ob<^=j4DaW0gh|O^PQ?pTMEjP=6Mq%y-iK%dMg7zR7Jz zmzrZ{__#*-ybFN~!q9bRdL)YHU__Z0Pp~q8iGo(!?3Y-mUKkeah-k9T3MwoRHj}~ zsB`xe&O2^{Mubn3I@bw(Er!W9kjL|~KyztvvEa$qfk~0CTJB;x%9Dscmx4V+01!Sq^iDn)$V2(1W#S zG@{O$?qHIr%=z91Bg#c}+`-I9#5FbS>XxK9=vN`(e+At}<7m;vx*tY3+~((CfIMCS zJXdy%zs{>#z>~kw->57r@?b}(f~+-u%J#U8GDkEZpFQ?@BO`i^`*1X5MKa=^0&BLs zAQ&|7VO<3o^%ofe#FTXjLwT6$jVp<-3!x2uXYr zMGC~SEGU-qf99O28ubzd2sj3d++&i_u$i4o@v~48!e#f!vgCZ`%Bup6o7jBE@OB|)@hxe{&3{;9k1};xmPKj8_+vX85T1@eY;-+iB0b@CX@>3L zmYBL!cdEHc7pIolLb#msjNEtb!y)7enTBph&Ht3~4^?)xA1ujgaFjX`Tl&57_SP=Q J2KbfazX2NR#x(!{ literal 1549 zcmb`H`8yK~0LPcJXj-mvJvQ@t-E$O;gdtm#tGRL?t+&^;m*h;YHLbOn93?d}%pAFo zxym(!NMVk>h9q9+pytk=Xrnle!jnbfBSwO*xOnIMPx+)000n$v~>K@te-jl z1AtWhO~j8n7Vc<`08|XgF9QIAy(mj_OceVscC@{dlf3YTvHvylb#)~>og2}7_my51 zfm6v;ls3KTPXLjK!k$&PN=l{TPh*?zpJW$YkbzTVjZ*!8cO+fyq@0_lLf`m1xOGWI ztxuWk%?LM=SQBFzycedk%%!9FrIu~@z~WJ2ikPD^;y5G)^uOcC8(CCu((08Z`_j*b zVai^ey-eJmD<%Zl+%jg;TOtP6x%_hm&A8!c&4uxfd%}7!TC4u_x;bl}S+X*@?}{u< zkdM|wk_j0rULBB+omh-asn@!xU!Js6M%|qZ4NCKbcA~pdjGe$kWzQF;u=*U-WKy2N#;Nz(rT8X1zLdbyur<&L~3T`PQ)NymN~|IsC|Qb zrzao>+=E0d@h6w_0a+0rhDfd(;p=Pub1jpdqcvq$k&n6|l6&t6+bJ=vktefkKX7Ci z-Cub+UF(T1BBPoV##{}bp>=S#TvcNcJjI@{6`M@(V6HUU;pG)^XJmW}MpZq#mc6n! zk_TtLW)J7pmP>f1icc?za6N5w^J+^Gun-t0AgLrh>{eZVwRQbmrd|3tRA9uB~ksa)W7jGdhOe(@$$B@sf{p%%4GjN$3s9yDgPdfM~<#Ow@y? zyk2LbQ^E=tu+nZ@F#|UPiX+Em?rEg?n&m5pU53saemrd=4w6+nr768(r(;rAUDSGR ztL%gxgUPbZwuTF6ftm(`>BvW!Xu~H=sVpIhLbxN0y?_>)EJBc=fudnJ`vD7E+wp!4 zN}2rbGwP&Bzy*7)&%%ud)2NO;2N2cwVdjbIxTjUUu)7x{>&y^cL=Pwbe%vC(Ktct% zlIn8h0S0Ije5SB|+yN7tr%!`DV`J9o-ERYY{t6<(;;7*k}puDw32VGI3X+aGSjMK(JkOYmcKP*EuJ)x^ zjp{3SDueF?+BvGzUHtYQ&BfrU#=;>M*$JJ;YpgMbDs<&ieQ(tMJ#um7@e({+>2ApL zJ?FS~RduS+3^z%|IrE^K_#6YQXpxap_MQ>LaVlz6<&6#xx+?E2OY@4G%=FGEaeyIK zIXg}fFLSp(mDV>AA{_hzt?>S>eDo2p+Ub7tN!|-~!TYrag@m3s=LKlx#DwxOxBBfT zgbUE(MgH_T4X`OWIB~(Xtho?D(gNv^`FN#8b`|r%=hVPA?;j)dh_cMvrH^0n*Q{iK zXoBLkaI7G&k2WGO;x;yrCRY zW|$SjGmN`r6!f)hN;v5iU!d+?PYg>-iZT{_ub*4e%~kZ+t_$2L=++(P7PM`LXyt_M zPVNu1#aj@fteRZpswyqaO26}mY|_&IiyjMS78T211cs}-998`EJj%+}vI60g^be}3 B#>@Z! diff --git a/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png b/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png index 51f80f6c36dd3cbf3bddb61f9bb56b6caa32916b..f7b1eb913cab176dbd65b51e21a47b5793592065 100644 GIT binary patch delta 346 zcmbQrJb`(FN_|CuPl#)HWJ*L-YHWN~YI;$AVNFe4XI(>gQ%iqy>xA~sDLs8Nd;4eg zO_<$3an7VE^CwSTFm?K(S#y@pp1Wf1{8jT7tX{ly!?G2dSFPE;dhL#N8+M;Pf9vAq zd$;a9zyI*fgGX;4KmG9R#pjo=zrA|%{mr|d??3+e`1#+bFaLp{{bYR;3j+hgWltB! zkcwMxZ*J#1l)&Sfc)7a$f)n?X5C8H{2yhyvJN#N)Y~DYAohpA{xwDW{3x}YRONW3W z8pESm;SWOWt714q-1Pa1z8>~UyYAc)6nyULvPL*=t))lgFUuD}Je^+%Y%>M5rFQ@T delta 353 zcmbQhJe7HZN_};JPl#)HWJ*L-YE(>mYI;$AVNF#{dre(uT|;+MOMh$oq@KQ+eG_K) zPn*t~q@mep%_tlO~r?D<<4FW+MZ*J|{;WhQP_i=WZTofA~**$JyR;uf7;g;mmY(ne1(=lw{u15xH=JmNEMV%d~ZQ{b!1|Kaiby zP{3*i^96nBORUEjdQP>KG#nI72r^s3>+}8lnV1k)N2%yv-rr0auGxqm_;jng!=gf< p6=rjd_T+d*smTS59OCg`*v=eMo;9^Bs}AT922WQ%mvv4FO#m8Pu|fa< diff --git a/testing/resources/pixel/bug_733528_expected_skia.pdf.0.png b/testing/resources/pixel/bug_733528_expected_skia.pdf.0.png index faefe104639de7ec2a8bd7722db2e55a1ee09f0c..737f0e8c70b79206ca07774144214f879159b998 100644 GIT binary patch delta 824 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 delta 1007 zcmVPx)ZAnByRCwC$++S!_1suTfy+nuwp)R7d zS-0{}INeode-ulLAg{HxhhTxG4jldQK`1PY{-A+1yGr&4R!X!A3a!Rov>u{Adr-3W zQX5507FpSXDDB_cuXCph4Ij2S@f`bn;KJRxdpPX(<(xBqaDU4JMpv0X0h&TnXbLoi zrqC3eVNEqXl3M!|l*y)^zv|(%T2ro|Y&NwjwWs#YMGDfCrZlA~O`W2qUj8r@r_x$> zjDn^z-Bd$!I+`l{`}X(8G^MH0Y3j?PcHgBbO=(I~DQ#-o>crYkO=)V>n(D}xm5qJf zbxKpCc<<}TCx1z4N>iixJk{~0=P6BjM%R?4H1)q}>gLU>2WcwfO}*Nlj;8Ep&YY%F zN>kZw>bUDeY7{h;<)#WLJg-(wWwxo7>V_Lr+0?}i^-~p;$)@6!=6ed!lAnI*4V}k- zus3&Fo2qPX?o?1Vn=0LAIw$@R{g2Q7&+)#~eD5R6O@F;V?qI~k5O=;>R z#@D}bYDGm&R}|}NXDv7o&s1Ey^`U8Pn$pzCkFU5gg(rokG^MH3?vT-xrZjcT_)fG# zKH`&{rZhEz@tt^wtSL>6e0)cD$X`s1Xq*?ZWPeB3!s@y2MQpfY{`#b;_4zrgev6t- ziz;gRG^ME_jc;&=JgFz>NZ8xZqt;ehCaToF}>T@w61-r z>3@a$_ntK~(Y9e(#GYI%o|ODhh`Qz&cxg&gLm1!S4!Qf9`&zqdm+$I1r@!>Uv&nU; zEf*`F9QZX&X=)hb8{8qs^y-6AIrC8DTjD^~&!3L}vA;eSZ_oNQ9^I%ZO$}#!gFEC{ zF(qR0g5*B9Fh8RuV%_99PgNxU{#91q+83)SO=Wz1n$nb}G^Hs`oyzg0^!pOXZj-(P z8IxuNVv{)p7nAS=1(VkU7L#iP7LyPKdz0@2FOx3>1(PELEtBvB1(VkU7L#iP7LyPK d7#N&7{{Ygwtb{-W4@dw2002ovPDHLkV1kYA1@`~| diff --git a/testing/resources/pixel/bug_736695_3_expected_skia.pdf.0.png b/testing/resources/pixel/bug_736695_3_expected_skia.pdf.0.png index 4ebd784bb5002c1a359de3877ea96bab5a07b0a0..1ff390e85420c2e4b76081fda779fb27717357f4 100644 GIT binary patch delta 894 zcmV-^1A+X;3grrrBYy#XP)t-s00000GjRbkaRM}Q1U7R8H**I#bOl|*TlMr)W!ZJA0+N=!^lP=9lsRCb?MccEB$qFP#7 zTzsTof2L$)WMqS=XJ=<G0<3@#pLE z>Fx9G@%8fb`1AGn^!EAn_xbks`uF(y`1ttv`TP0${D1!b{{R2~ujN6}000A{Nklv`=qrF|F zAWdmXQ-7M$)Lb)zCrG)>c! zW11@dKGikwdT3+veRK2h)(}GHqmadw+e?pJt$%w{)z&C#8gx&UV@KaHo{Wajzjy89 z&p)4pEUxSdZ3Fe6ebv^cL9?#}O`SclY*E*EGQFXBq@(vj%c0Q)SzOuKkftW8ckNSU zXll*Sr!T{8$*YG`x8`+BemMT-OyioeqnBs)g^)b+-KVLNHMRX*`iG{<(UgBPnyOt> z`6Hw$O=(I~n$pyqxUp$}UhP?@ph7k^bMta;jVY*@O`$0?1(Qt!8I$A#kCWsB7L$Af z8W_A7Zqm( U9WR*-xc~qF07*qoM6N<$g72u;1^@s6 delta 847 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 literal 1426 zcmb`HZ9EeQ0LDjSC2x7DyV7A^&b)_ls$n)ZS&PwP-ojPhMmAIwBC~a|F>Z*n(@@c9 z$R$=HEo;prZuOg&&N%W`ibhd=x{rOi56}Pq{ds=BhvtVxX{ha10{{RTK4>KFs|DY( z^(z2W$G4ter9{S|JOSKi1~UMF3dRQs4?O#Fek8+B|EK|I$%MWgsOPP$3RHzsUmhK@ z*HMo4Ob+}hkDY$sCu5499kw?vpTz$UOkf=ttRtz{cQeq5+`fa+n zfq-WMz^BcC!!AjGym2_Zi2n!bYTc*HN%k^y^NTQ@j#;e)j2 zwl%)P(pJgTwL)cKsN(p@2yHkWxnsWUAXvp~bXU-jxe;#Q6_#?*iPuFk>0WT~r+cYF z5a-_5H(blWFCD7PE+czrG|aX1n_D^tL^NYfl3%~;PWGjBw*RFA)3pWNc-oPI@Kx(i zhN^RD`b%=>K3{zWh<12%BG>%tM}ml?YEGOe4OJ@dwz^<_wdOo6iZuwqi(K>^+DZcL z&jk{>cjYc5F)IfR4Rb+Fvd?Svc-U4@tzLy6ZKESfBBPiQR7$md^`>=8e%E8G3>DMt zW8NQsIoMy3pExE?VsSs2nx*odn=M0Pj#$MP<)G#DxdQmTPIV{gmXeMSb_P1^E=IVJ zf_b#pRZMDXzV#XjM5e4WnWDIr$$(8my zkmq+7=k^(q7!#v&cDDsvpc$-k>-(6)_+(K5eeBOVPiEsv^r{=Og!6am!d|V7^+>ER zD=}!?O;F8c&bdwJ!`y3ImtUcxY0f<3uz~K_I@wVClw#i#xDHZ{kQCXRbnBfTDv#Xj z?+=?wiq%~+Y3f`&;dY{p@^Ala2odZX41(?a{S52jDo7H0ad~TmW_?GwD>r5rV@DXa zy1Y!a1 zum@AKqM~XL5VM84IUvk*Mq~EOoMgUfrFL0qsCa}t4X8C^zFQy5I7^>&njg3v@4`R8 zLzY$$YVxi3Bc1B;?ODCGHsTgYeZxuHterq6&;LNHvb)4nXRSaRXDTilC)G$(*EH=W z6P{s&9D-pD?@=@(uarRD*M;gcvU9gWIG@DbXL^rKTta!hY1KlTQ1Jafm}W9>!#S(e zwIV8qLdq{``us5KMK1@*@*52eV}U3ZoZqfnI0wH7afiwWA*0u9?9F8>zJ&KPqNS6Y q(Gx%gQW{>6Wb^%^|J#DG37xcy$fMs_??z01J6j(wERySaJm(8rzjKfP diff --git a/testing/resources/pixel/bug_909762_expected_skia_linux.pdf.0.png b/testing/resources/pixel/bug_909762_expected_skia_linux.pdf.0.png index abac6e4facf0d2c3a3eea81b0739ab00636bec22..c945d5d72ae99a52562dd58375483becaf0645a3 100644 GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^CqS43NHBC5e{^DCU~=|!aSW-r_4b;fM`)k~!-MS{ zVfqW_ykg~>nh@aF>XO<$F(fQut=QSCj|5n@F71wp))iakozm>=JR$HxfFQrKVtZVR zN2Kri@Fx=rs%&a_r@yYfCfszqyzTH$ef$6CkMI0`XEK+mQIG;X!Rh8dUT4LgORFzF zuWojHeR!5j_PQ6AtzX)Ghhc+52t||61o-#mW6o{IBXCxwhwOWR2vhk9{v+ zl`q+!@@odiOY7h{VSBxEz9fd%-So(0=5}X| zC0r-xZtMHj^459!;-A4Yf6OxPZ#M|*`+hEj|L2}}C;xodm~!IHtdED5ZsVGJPPRs1 z*RA7=e|kIKTQm1Z(F=XQW2tkZZom4TqCF>S@!6N(zIVSqbNPqg;g$Xi_t)9Y+ApFK z6FGn9y)8TPYCg*Ud&9gw`$<>Puid-FI0yp|UgtVy&x(IFgTe~DWM4f DH!b|h literal 654 zcmeAS@N?(olHy`uVBq!ia0vp^CqS43NHBC5e{=#;jKx9jP7LeL$-HD>VDj*EaSW-r z_4b;-he)Et@sEt0V*I+hVsn^TeP0AHPhJD9vK=?Vca0z|qWI?2UMEL~{RqQj{r^>>ejY}~Q(v!YE;f6u#@{^O%fjl{FL*8?Z& zuyY6~I5aRYGO^H|F^8|{MT+X)9P|15;q33vXV0|#e@#@rizVpiOBn_3(v7=kS1N3d zt3AD{_QKRHX?kz6Ud){6zbm$!sruV>Gu!X4XQe!xAV0Bm@2>RrlvA6f`fswA`mWwx z=s7pP_m9`hjD+*~)3<#+vVQ&AIif{|GJNf~R5Ohf-%gQ;8!cjjos8)zwaUuyDyG)7J}l^~HGK1)RQriJ^z1W|B~&nq(u&R>_k)D(aJlnCF=t~Hs4dF?5u z%}no1Nx$^?S!L4B8BkBT)t+NklX%8P7qbu>gS)EQ}BT4q{NuiNFU*>b? zhu!as=&rpzrV$gKjDjOOtyhx%+0^cREFVWMGD?VSHTzoX$6&Aa+U|*rQX*>|z0CJ} zPoK@J&en&>C?m40y3kzACdal8e+KRGosol1Qopq)g+`MN1F8bd1e5Rs$CH2r9FtoD zppn2Ok**U0nE;WHRgtbYk*+t9t{;;K1Iv>x0}cWcAd^u9W|M#fHPx*97#k$RCwC$)UhjsaU93-+gPMLxBD-2 zb?Pn|tc-HomBC<;;yNAKq?Gmk0e^v{gr0IGi%lt|o=sQkIc3q;KVW=*lh^A{`1I~m z3rMVH0+SvCV}JY0c@}ZAy=hOJn;i>R08q}s?{I=d_1?`yq{_*~x` zWN|UIe``-FjchWB=Hux}yhiUZ$}D2mlTmSG53Bw8d^ET77VRsMktDL^QMB?X4(j8@ zYmt#8vc^-i^1Fzo=dB}=ktDL=!l2n7c6;5QqTM;3xd^|UJ{#MUN+Xkj14@(r17HGX z0+SvCt&{!(Hj^p>$&*e34+2bplhFbqlTHGqlTHE~lY9eDll}vV0+|Vu5CgdwjQ{Kx XOBFV@ZPIQr00000NkvXXu0mjf;M|$A diff --git a/testing/resources/pixel/font_size_expected_skia.pdf.0.png b/testing/resources/pixel/font_size_expected_skia.pdf.0.png index 8f33bc6d27d7577298682c989d84af737a363e5b..5013cb08c864800b01f4a5ea0c178721a4a2a196 100644 GIT binary patch delta 3059 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 delta 3057 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 diff --git a/testing/resources/pixel/form_textfield_focused_rtl_expected_skia.pdf.0.png b/testing/resources/pixel/form_textfield_focused_rtl_expected_skia.pdf.0.png index 64d4cec8ed64f058f925a0396e6b611f4ba03b11..e11763c59e3d2a03f3c0418caf50c1134fe80dea 100644 GIT binary patch delta 374 zcmV-+0g3+81IGi9Bw&t7L_t(|+U?dqOBGNU$MJ`vA;~FFN5REEL+?Nl2N6L>TO`sz zhd|H^4ndczZJ92Dg1rG3?Hz;;*X0h1Luy^Pid+Q^m$;UA`8M3Cx_bxx9ypu>=eK;| zd3a86M^=-c0UVK^27mTH-Vw;BVIhe@hE8jjZ@@lK`YUh(K)C|Ial(-PhKOh?)6-bu z**0{x{qg?eNkmMt`5+=5(-!e)Bh}JcyMzzxkU3|)xmd}T|H<6Gg16K*pWmbk$pX8p zumoQR+h3g22~BZ02V?-s)2a5zEO4|83)hS=-gQ$KlFtDz0b(wag**oimm#-B$FG~d zvAU4L3@`+6mTYPDR$*_A%KRjwOI&p<)`RT52D$+Xn~6eNo2szAm5qaU-zNs3I1KRR zA&ktk(g(nM@*6myf+~*G5D)?;;}VXoxuTKG)V7FQqgzMWuIxsf(qZfvw|#-IRWH!IP9yKYJ<7 zJk1sI99Vb*qp;F;<<5GQ&;wSBKp#N)VXias7+4;ISAV}LaPMlRDrCM0+y&Uo7E%Dd zjltk7O@AsaT~#5U9|7$E5WH;-ml`O%;B^ZCFPZ-U^zEOIi2Cdo;=xhbbF=?b$fu&;cp*ZB2oWMg sh!7z{gp-*86(2;15FtW@2>E{@hi~S7j|}Frg#Z8m07*qoM6N<$f_S&N9{>OV diff --git a/testing/resources/pixel/form_textfield_selected_ltr_expected_skia.pdf.0.png b/testing/resources/pixel/form_textfield_selected_ltr_expected_skia.pdf.0.png index a89936b88c51aa92bb3913f3eae7e464c822500e..c6f9db80eaeeaa6143335f499c533cc77f1b2f96 100644 GIT binary patch delta 713 zcmV;)0yh1Q2BZd%B!6E}OjJbxGjRbkaRM}Q12u95H**L%bqP9l3OjZSJ9i8`cMd*y z4?lSkKzb5EdlW-_7e##-Mt&SgfF4VMA4`HJQHCf}hbmNvD^-atSBfrIiZEG=FyOT6?2gdrYHTe574{q+oxhWP_+@ zg{o=rJl&Qm(tHheF z$D6OmoUh2AvdNL)6@Rb4(zV0Zw#3%C$Jn~Z*t^Ktyvf?W%iF-r+``V?#LwQw(cj0? z;KgT(AnkD+U3&Q=G5Hh*52sY-|61u?ce3?;pgt-=id_4xGm`Stht_V@bt`1<(y`~3X<{zv})|NsADucQ@+T0>{^{7g>(iSML}D8{TcNa z$+~r#oRP*=S<6!Gk?SrY?pt}gr6D^%lqmVD4TdBQpGBY6WPeRd6&Dr3_p7*q;}k1gowYEk15c)B<6Fn_ zJBrV3`FqmJ4>JvhM}8YffE-DH9!r5AOM)RygCtLdCQ*hcQ->;4h$~fzE?0^%T8uPYjx}A5JY$kS zWt2l`mPKlpMr)WyYnVxGnM-e)QgohJd7@c*qFZ~TUw@`xe?6vTgQ#hTt80j?Z;P*R zjIVQ#v2~ELc$2hzmbQkTyNI8>i=w`drNEM>!j!4Qm8!&+tHhV9#hb6koUh1{?-hTs zz|*q9)V0Ibw#3%C$Jn~Z*t^Ktyvf?V%G$om+rZ4+!p_~p&)vk&-o?=0#?jx%)8NU| z;mXwE%hlq|*W=FDgT(AnkD+U3&Q=F{8e)ZFLS-|5)j>D%J#;pgt-=A>7>J8NYQK}o{7m?m0E9GuYdC)+k?`$-SXl%j?-%}#D7w(ftakY)S2-- z7vw?KN2M9t{ZTO&G7?c)^iWo=O7rtd_o;vH+r)|&x-M;<`c;{784M{;rX$Ta6JvqU z*>0s8535IdzH0(mbQJDwtknlfSI^~nz@9W zx`>~=i=w`aqrZ)#zmTTElc>X&tHqeC#hb6koUh28u*jaV$)K~!qO{AWxX!4#&al7J zv46nRw8Pc5#MZpY+P=%%z|7pi&D_x0<<#8g)!paT-ssog>D=S%=j-z5?DFaD^X%{R z^7Q!g_4xJo`S$nv`uqI+{Qdp?{{R2~Y1KcJ|py5l^bpRw20MthqQu`D_$R#;@XyBp;uCkvYk0FFL`rkqb&tyY*8Hj3Y z4OPPUAY`f;yh|nKlHXdXXanZSANm%e3Yh~shhY?&j&6493Jk>xEi*s{Ah{e-NPH1! zPQyeQ`)ppu3qrbQfo*`QU8q8e_kfl(%=U6!52K17)E{> zM}8YffE-DYTP1%mS&K7UjX7YDJ!6wTWRpQ>l}>S-QgohEb)QvtpjLOGS$d*mgQ#YN zsb__%Xojn6h^%mouW^mAbC0ofkFk4|wS1PgeV4X=m$!eIw}6?rfttC3o4JFVx`dp% zho8KNpS+8rzKo;4jibMirooe_!<4DRm#f8?ti_tH$DDt!$epmrpR&oJv&y2h%c!}| zu)ou>z|*wD)waaeyvf?Z&D_Gy-Nw=1&)DS9+2z#S=hoin*Wc;fM{UHO%D-c7G=RXw zf|H5?9)E-g*?aT%5hCPIa-_W5T@|3rFItk1Jl%C`il05=0jKSSww0~HAmvw{;O#;sVPURI+XaN_;V5-j6 z(X8F<2pN0~tOJy0a|$WGDnS1YdZw3n(I9Qz=>+M23cTb*N>{Gu6teR95Y*~K-@WeT zO{lB^T-t%w1h?A&j59P0%=0ZGKIMKP9^NfQH@gtecp*ZB2oWMgh!7z{ga{ELM2HX} nLX)2X36q}z2^xe5`A7K;FZ7|u5j*BX00000NkvXXu0mjf$zM|L diff --git a/testing/resources/pixel/freetext_annotation_without_da_expected_skia.pdf.0.png b/testing/resources/pixel/freetext_annotation_without_da_expected_skia.pdf.0.png index e58455b6fe0d09b9f328e3c2718cf51a48d2e34d..653d5b8c1d3ebf0d5531413cee6c5f86a9f18eb8 100644 GIT binary patch literal 659 zcmcJN+e?!H9EKlVg{)5}Mvzv^idf*qLWo#uvaikDiY05rw52sADoe?QN>+q9-8wFV zqO8F#M22=y!W;!&SaU*UbixelqQY#g!_oqqt*`%}n;zcZ``o@4KX;L7L$W+W4kQ~2 zb!N$-zn3JF`f_t=m!ywHn=E?Cb3p-VFc0QKIxK`mund;N3RnrNARF>Q3nCQ2M%WBn zpcuA+4a#6AltTsVfqhT~4yc8CXn-Sd9Gbuh&CmiaaKmXh181QX&cj8x0$%Vz2l(M8 zbVCo^f*}}&5qJrs@Cx3-2bh2`MBp1lVG^d{7tBChN<5yj_PMkqp~9fkTIxq5BZH>( zT4DBMUrSR);wLEqmr2Tii&YG+5I%oYF3S_CrLs4tZbWCN){Le&E4Ec}Boc9#6 zM2TpY=jXFit}$cSclBYXz0+%*QF;8=Y~l-fo})VbU3uU}WmL1P_j{5i+<$bz>)}jQ zd)r{t{^0X_d8^szPkTD$3Kq`sR~6WVU`(sb$-ZDVwhQKUC;C2}bPnW-dvo3ll#aP} z3-_NKP%a&p-BvrMgqo7Ocb04)3M-4%2QA)`{;kz@k=4O9`)gArJU{v>HJ2KX{R6SU Y;e?6q-iF0J?l$SWFz8LX>*9{aKc92PtN;K2 literal 672 zcmcJN-AmH}6owyXAIqT?1mUcUG71N^thF00YD~8=adRzZB<9#y3`)u6GD^bCOxMRK zR+O?5g3xR>D0FpG(Ne-vR51Eb&_WbOs975`*U$f;n;yshXOFbL9oDKI07Yb6w1H~Hn77na6&n_zzx-K7HXgt>fj>OLjzofMrZ;LT!E`_ z9d5vFXaPU8!b50-ClG|E&;{M_4*FpNA}|9#VIF=%6k-sEKd=Z1VG;@LgU}bD0lQ9p zz+C+)@=;?@6|GreT<3GFm&ksNz8sY_)hr~=_k<G~hyVGZB*pe*z zzYIpaefNd}-l%Q=5{t`c{Z93pqR{-n@d@kwLxzefvE42Ac_V`Z<9bo7Sf2JiH~iWv z-DC+*_P5n7tIVF2x*i2jwaBy;%H~K`&$+$h4n?hbdhO}@;(a=s=52f~wxAZJ=Xkn* zczi<&Rr|9sYv=Iha(&S4&+n~jO>d5``c@g;F3WI!&CCgv#AYT(q#a6I<%nZtlEBop i7q@O^iT?rZ=kFP%rmoJhu@l3>ccIHGR0mXL7ybgJtFf>E diff --git a/testing/resources/pixel/generation_numbers1_expected_skia.pdf.0.png b/testing/resources/pixel/generation_numbers1_expected_skia.pdf.0.png index c782b658408b7e3bcd2582fcecdb1d189b81fc81..0f4bc5dd4b6ff8627aa8babac25bdbad4824519d 100644 GIT binary patch literal 1294 zcmeAS@N?(olHy`uVBq!ia0vp^CqS43NHBC5e{^DCV7cn);uunK>+P+2pDU>{>>t`? z6$*|Y{Gqtu-J}WfTwXecy8Rvs9aEQhY&DI%!nT!LbkdK|1&5b-F5@iDJ(;AuT)<`K zw8ax#&)FZ30hm=HZ_(c zEL4`ND-yVdy?!3h+b*fS z#OsFg^qGGD%zvAfzREYZi>tcG^s=b#rPuMa^^CI;TZ62W9+WP6v*7BU+3zZsy>Hnx zW6cD`>k+llQ`Yz8Z4TObUwNa~^bW1t)laI|PS#pD*J6o>*K-c*-SbjEz6&`gRQ>;N zd9J`Ovnz@l-hC{YsZgBtRFwP4m)-l=k5>?tlpf~lL_gl~XY0M{cKJ_xp3Jj8&V8Qk zH;26S8=fzpR&R0?x*jL7d)D28_aAcowPtI#u$>jCy5VqhXOUxFP|4@2;Q#YmA5Cbg zbW-BoQocWCLRV-|ddlis`@>dkpA>peX4Adn?{D~)Ki?%*dMsg2&~1ITzi(UjpQ(AY z<@%htSC6DF z+#SJFrZao#iNI5n(oAv|##<~2ylg6$w_w%dBF9tCm71j?+j4)+$v9iN(QW>wHxoOa zWyT*);5=%0EN;rOoQz!(VU>?LI&Zc;KfC?fyqwQ+nHIYDn8KLHi@S&AvZ1)~+$#wJ3g;qT{_&#?C18 zQ_Axv;q&S*o358xWd6ANxbG#N$@i;8Cb?eX;rx^t(0^t^r%mtP?cYp#a|&xW_^rBb zuC-m;YadS;*RQArb&e(z7DTPSUL9-h?|Jp|J}IHio2A;BH)}_J@>%62E##d4{-^x@ zo1foDoVoSx_m7UEr@ND03%~pDx8_<=eU3=G8&S~gTe~DWM4fY`H&F literal 1289 zcmeAS@N?(olHy`uVBq!ia0vp^CqS43NHBC5e{=#;jKx9jP7LeL$-HD>U^(pR;uunK z>+P*tpR1uV$3H$62-f#1^bC2EY4>D`N^(|qmx7&t;#9F$9~8~E-1XSpqb|x3{5j03 zaGkwL=DDCrhPulSzv)|$TD-I*(CC7W?`3Z#yEcn^e+%oU?|viy_x1EQ#s4gsi!b5rDH zKLuI)4U(UdgRbWVziyteDlk@t^FI6LmB|h2)eI{q|NOnyZef4g-9@+F^h>_$KVJ4~ zzwt5F*seDXU%pn@$em|AJE%kFPUN5T1Lv&eG8KjZbvh=EbetiGk`0RkELz zzRl5pyKhF6am`!DIju2$Ga|}!f?Bu_*>7S_TJtQ?^}Cvd_$FP3$S)6kcYHZ;YTKL4 z;u({EXhvJ4X4NQWH!SUYW;OZY{ixf%wtsFNWStoO=5EwUP6p-}#uF=C8XPY-J>2)Y zAa%cW|D!k=6H$lGl`D;{|4z8Gj=?tOLiX&v6B7R|ohjFFWFNzaJ1q$n2fL5FS^MJn zpPN%=&TlCC96ML@yK`K<#De|Ya<>!pRWjF{fByOBIu?bGoea$JTy5S}W-TW7UVM4p zkXw_h)gb$FB5 zZm`(1ls72n)x#NuH|sb3zgPS1e0@%@olwJ-@|o3}%q%}C>8f4#;(z;FN=Nd8$b@%y zs{a|g%jHgJ%S&F(fAo7v;ng+Ue#=O{eqpu6qN1aqgYE`G0+{R}hts7}x2~oV~Z=&qM3w<`()Y z>Gz&CN8j&ex^eyXX>IP@W}iBCi>R{aUqaR2?QVV0&7^Sd^dz6%3id6g%xlm7kJM0q zH>bLV=X218Q+g+k30_-JcUju{>&pNS1>(spGEA+cQv2=V6+H+UWBT(nV*^VQ|$@>}>PW@+>SpPt_@|g3T zeYe*3%$_=Z`)MuDzh6AgOnVjd=jNvA2gP0M#Ew*I{=T%W{K!QXof9gV{5G*q-@8v^ zS8(RrXn3}^wNUloq`Q~zgmS*lj}R40iR3#{`S#DBWhp-ucdp)fZS%$ZySa2cg1?yl z>(Xi1ez{rnZ2z9~2V&N6aet~@ba%q+$l{_+LHw6yY|DA3x7vR8gs>ZHlir{C6ZyL# z^Y_C?OJ3eQzFPS_lfnL3Qc-yTcA0Qj3*hC8cn9xAHG@=-SH}uXrA@g335gS3j3^P6+P+2pDU>{>>t`? z6$*|Y{Gqtu-J}WfTwXecy8Rvs9aEQhY&DI%!nT!LbkdK|1&5b-F5@iDJ(;AuT)<`K zw8ax#&)FZ30hm=HZ_(c zEL4`ND-yVdy?!3h+b*fS z#OsFg^qGGD%zvAfzREYZi>tcG^s=b#rPuMa^^CI;TZ62W9+WP6v*7BU+3zZsy>Hnx zW6cD`>k+llQ`Yz8Z4TObUwNa~^bW1t)laI|PS#pD*J6o>*K-c*-SbjEz6&`gRQ>;N zd9J`Ovnz@l-hC{YsZgBtRFwP4m)-l=k5>?tlpf~lL_gl~XY0M{cKJ_xp3Jj8&V8Qk zH;26S8=fzpR&R0?x*jL7d)D28_aAcowPtI#u$>jCy5VqhXOUxFP|4@2;Q#YmA5Cbg zbW-BoQocWCLRV-|ddlis`@>dkpA>peX4Adn?{D~)Ki?%*dMsg2&~1ITzi(UjpQ(AY z<@%htSC6DF z+#SJFrZao#iNI5n(oAv|##<~2ylg6$w_w%dBF9tCm71j?+j4)+$v9iN(QW>wHxoOa zWyT*);5=%0EN;rOoQz!(VU>?LI&Zc;KfC?fyqwQ+nHIYDn8KLHi@S&AvZ1)~+$#wJ3g;qT{_&#?C18 zQ_Axv;q&S*o358xWd6ANxbG#N$@i;8Cb?eX;rx^t(0^t^r%mtP?cYp#a|&xW_^rBb zuC-m;YadS;*RQArb&e(z7DTPSUL9-h?|Jp|J}IHio2A;BH)}_J@>%62E##d4{-^x@ zo1foDoVoSx_m7UEr@ND03%~pDx8_<=eU3=G8&S~gTe~DWM4fY`H&F literal 1289 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 delta 1695 zcmWmCe>~Iq0|)S3b#oHM`jqq*63t{XPS7_u`q_rB-j@%s1m&+CU1Q0r#IwOiWBs54IjWV`gTy zZQC|;b8`#8!EZa@McVN=YHP3d-q_&(#*sZ%a4 zF0QVwZf_o=g(ib zaN!c=>19gM72sYmj`}<}I5-4|F9{6|g+dd{t^-i{k3dpIcyc9?NW69H7KucPh=_=a zii(bozMEc4p-^Ho>+WUM|CC)%WpLwwoJJarmH<2{h9D@3_2w~9^fo0WB{elQ4S3O# zk&%&^nVFT9m7SfvYIR&T}RKV=wG%&k3 zGc%(GG@obZmo&hFc41-Rvv&D!V0mR3(5>opx|Nlc)qm*$gTb)2w$^B5#YP~EuKRd< zT)jUsGqTJI_z}^nsY9PeH)Z8m`lVhfU@(NCOE*XB50S->8Ko8OWIt(6zp?F(leUjx z`gf^0w!(ohdZ|+Xl{B86-7z1lAdTJC(fTNVP!zrTaaxhqRa>Zi^T5M3FNN8^{xK6? z9|)Z?`)OUXXk4V23SJzKx!Ljca60 zjXCgWe1&Ef_t|88buNC zWdG@U^~X8qwpR6iDU}o?+iE%9Qw$@earcZ<{1e9tx8kN3DQf(eUnV``&JVJO+_wT-^d(tPD3iFN04FFxG-P!0ihdVVwm|ITgI zVsA|=j6*$Ye*m?{aYD*kHhXpcmMxZO7x%y4sxqj5Sgw3J{DU5^_!u4a5_Q9&%H5{< zg9DXQt3FP=a%Sds80VE6)HsP;e)hJju5E6@ZnKOcj^kYVy(NL|Q)_6dOY^!rm>$pg zgH~(QbbC~T#zR&2(`I-aU8IU$_x`Yy(6Of~QKF{f6L(o!H=U3P*)IhDTf4jzE%#Cx zkV`WA;i=7W@uK?hO@!uUUmwyFHFslmSzn~!7rRwwTspixY8onZ#=SEGWi>@e-eoGf zUx*Rwn_bFLL2qf@#S)@0o=qf(czMmMKE=XrP6R*2WM{#D5{$v-ffvP%>#8-1^oVa0 z{g(3u^HOEKW+$gi>)nI{D(@bs}l#K8dM( z=-$#lKugY$BzgA diff --git a/testing/resources/pixel/scrollable_widgets2_expected_skia.pdf.0.png b/testing/resources/pixel/scrollable_widgets2_expected_skia.pdf.0.png index 16486a272b72d9b64a3f4cc87ba2fd427751a526..d07b08228a51793dec88df74a24c3185e38b9fb7 100644 GIT binary patch delta 2000 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 delta 672 zcmV;R0$=^a2e1c_BrZx&OjJczS^ryI|6E@GU0?rRVEoH2$^Xd8|H{n&%gz7H&i~KR|I*a|)7Agf*8kPl z|JK<5*V+Hr+W*?z|J&XF-QWM<;{V~}|KjBTO;G|LE%f>FfXN?f>lV|LyPp z?(qNb@&EAh|MBzx^7Q}z|NjBN6uZ;RZ1^3O3Z5(jamW ztF=fhC@7+qfM5$Kpnz!+L{NIrZ~6aky-1zj%8VC&%)5TUerC@;q<&qJq>=(Hk^(J~ z0tJ7_KaMUOAVB^O@*{O3DJuM_(>;kjApZwsX*geQClIrc%RfA~6tbCXnPMe@RD+Hl zJ+TdP)pcE`pqXXq-JJwdT9&qRmUd+7hVT3L63E>(X@AgCNLc9&d#NJ5AGUTznp%9F zKx#oprRTP8t(U%E_}1H6VUx=a1juEA+^T;{oxYmXc8+@0cK@v?vNj zV?nT^E~I(i8-F^@Wd{NT2oNAZfB*pk1c=R(@Bu3qE|lNh+dD7JWG^lN0000 Date: Wed, 7 Oct 2026 10:02:38 -0700 Subject: [PATCH 48/72] Roll third_party/freetype/src/ 6f5bcbbad..891f904e2 (3 commits) https://chromium.googlesource.com/chromium/src/third_party/freetype2.git/+log/6f5bcbbad52e..891f904e2e7b Created with: roll-dep third_party/freetype/src Also skip drawing zero-sized text in CFX_RenderDevice::DrawNormalText(), as FreeType's FT_Set_Matrix() now rejects zero matrices and falls back to the identity matrix, which would otherwise cause zero-sized text to be rendered visibly. Change-Id: Ibe1857897484916871f06d6c2b931bcb36c6ff89 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159950 Reviewed-by: Lei Zhang Commit-Queue: Andy Phan --- DEPS | 2 +- core/fxge/cfx_renderdevice.cpp | 4 ++++ third_party/freetype/README.pdfium | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/DEPS b/DEPS index aa44c63d70..d66606a499 100644 --- a/DEPS +++ b/DEPS @@ -146,7 +146,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': '6f5bcbbad52e111296bff1bf115c4504d31f3cef', + 'freetype_revision': '891f904e2e7b4289f615598cd4b69832f87d2f3a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling GN CIPD package version # and whatever else without interference from each other. diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp index 7426706958..20cbcf2a64 100644 --- a/core/fxge/cfx_renderdevice.cpp +++ b/core/fxge/cfx_renderdevice.cpp @@ -1161,6 +1161,10 @@ bool CFX_RenderDevice::DrawNormalText(pdfium::span pCharPos, const CFX_Matrix& mtText2Device, uint32_t fill_color, const CFX_TextRenderOptions& options) { + if (FXSYS_IsFloatZero(font_size)) { + return true; + } + // `anti_alias` and `normalize` don't affect Skia rendering. FontAntiAliasingMode anti_alias = FontAntiAliasingMode::kMono; bool normalize = false; diff --git a/third_party/freetype/README.pdfium b/third_party/freetype/README.pdfium index b236f4b0ae..613e495c27 100644 --- a/third_party/freetype/README.pdfium +++ b/third_party/freetype/README.pdfium @@ -1,7 +1,7 @@ Name: FreeType URL: https://gitlab.freedesktop.org/freetype/freetype -Version: VER-2-14-3-107 -Revision: 6f5bcbbad52e111296bff1bf115c4504d31f3cef +Version: VER-2-14-3-110 +Revision: 891f904e2e7b4289f615598cd4b69832f87d2f3a Update Mechanism: Manual CPEPrefix: cpe:/a:freetype:freetype:2.14.3 Security Critical: yes From f0672807c5f31d09cb4e1c58416f2537d9039236 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Wed, 7 Oct 2026 13:50:07 -0700 Subject: [PATCH 49/72] Add third_party/libyuv to .gitignore. This is now being DEPS'd into the tree. Change-Id: I3941eef2036970beaf39ab5f5b30db33c48f1b13 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160130 Commit-Queue: Lei Zhang Auto-Submit: Tom Sepez Reviewed-by: Lei Zhang --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5ee92fed22..7d32143ac2 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ /third_party/libunwind/src /third_party/libjpeg_turbo /third_party/libpng +/third_party/libyuv /third_party/llvm /third_party/llvm-build /third_party/llvm-libc/src From efe339c7c307bdbad2eb962f1059cbaaa3478804 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Wed, 7 Oct 2026 14:35:20 -0700 Subject: [PATCH 50/72] Clean up PDF_ENABLE_SKIA and PDF_USE_XFA macros Unify macro usage to follow the convention where USE_ is for backend choices (e.g., Skia) and ENABLE_ is for additive features (e.g., XFA). - Remove PDF_USE_XFA from public/fpdfview.h as it was redundant with PDF_ENABLE_XFA and is unused throughout the chromium codebase. - Replace PDF_ENABLE_SKIA with PDF_USE_SKIA in the testing directory and BUILD.gn, as this was one oddball usage. - Remove redundant #define block for PDF_USE_SKIA in pdfium_test.cc. - More accurately name pdfium_test_config. Change-Id: I1de149cd743bd24b1cb99d493e199524d9655144 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160170 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- public/fpdfview.h | 6 --- testing/BUILD.gn | 7 +--- testing/pdfium_test/BUILD.gn | 2 +- testing/pdfium_test/pdfium_test.cc | 60 ++++++++++++++---------------- testing/pdfium_test/write.cc | 12 +++--- testing/pdfium_test/write.h | 10 ++--- testing/utils/bitmap_saver.cpp | 6 +-- testing/utils/bitmap_saver.h | 2 +- 8 files changed, 46 insertions(+), 59 deletions(-) diff --git a/public/fpdfview.h b/public/fpdfview.h index 7c9328021a..fdf2ec4b0e 100644 --- a/public/fpdfview.h +++ b/public/fpdfview.h @@ -26,12 +26,6 @@ #include #endif -#ifdef PDF_ENABLE_XFA -// PDF_USE_XFA is set in confirmation that this version of PDFium can support -// XFA forms as requested by the PDF_ENABLE_XFA setting. -#define PDF_USE_XFA -#endif // PDF_ENABLE_XFA - // PDF object types #define FPDF_OBJECT_UNKNOWN 0 #define FPDF_OBJECT_BOOLEAN 1 diff --git a/testing/BUILD.gn b/testing/BUILD.gn index cf3a579cdd..5820d42228 100644 --- a/testing/BUILD.gn +++ b/testing/BUILD.gn @@ -53,7 +53,7 @@ source_set("test_support") { configs += [ "../:pdfium_strict_config", "../:pdfium_noshorten_config", - ":pdfium_test_config", + ":pdfium_test_allocator_config", ] visibility = [ "../*" ] if (is_posix) { @@ -274,12 +274,9 @@ config("pdfium_in_chromium_config") { } } -config("pdfium_test_config") { +config("pdfium_test_allocator_config") { defines = [] include_dirs = [ ".." ] - if (pdf_use_skia) { - defines += [ "PDF_ENABLE_SKIA" ] - } if (is_asan) { defines += [ "PDF_ENABLE_ASAN" ] } diff --git a/testing/pdfium_test/BUILD.gn b/testing/pdfium_test/BUILD.gn index 424d28ea90..688c93bad9 100644 --- a/testing/pdfium_test/BUILD.gn +++ b/testing/pdfium_test/BUILD.gn @@ -31,7 +31,7 @@ executable("pdfium_test") { ] configs += [ "../:pdfium_in_chromium_config", - "../:pdfium_test_config", + "../:pdfium_test_allocator_config", "../../:pdfium_common_config", ] diff --git a/testing/pdfium_test/pdfium_test.cc b/testing/pdfium_test/pdfium_test.cc index c584cd7e9e..20f5a7f76e 100644 --- a/testing/pdfium_test/pdfium_test.cc +++ b/testing/pdfium_test/pdfium_test.cc @@ -19,10 +19,6 @@ #include #include -#if defined(PDF_ENABLE_SKIA) && !defined(PDF_USE_SKIA) -#define PDF_USE_SKIA -#endif - #include "core/fxcrt/check_op.h" #include "core/fxcrt/compiler_specific.h" #include "core/fxcrt/fx_memcpy_wrappers.h" @@ -69,7 +65,7 @@ #include "testing/allocator_shim_config.h" #endif -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA #include "third_party/skia/include/core/SkCanvas.h" // nogncheck #include "third_party/skia/include/core/SkColor.h" // nogncheck #include "third_party/skia/include/core/SkDocument.h" // nogncheck @@ -92,7 +88,7 @@ #ifdef BUILD_WITH_CHROMIUM #include "testing/chromium_support/discardable_memory_allocator.h" // nogncheck #endif -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA #ifdef PDF_ENABLE_V8 #include "testing/v8_initializer.h" @@ -132,9 +128,9 @@ enum class RendererType { #ifdef _WIN32 kGdi, #endif // _WIN32 -#if defined(PDF_ENABLE_SKIA) +#if defined(PDF_USE_SKIA) kSkia, -#endif // defined(PDF_ENABLE_SKIA) +#endif // defined(PDF_USE_SKIA) }; enum class OutputFormat { @@ -152,12 +148,12 @@ enum class OutputFormat { kPs3, kPs3Type42, #endif -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA kSkp, #ifdef _WIN32 kXps, #endif // _WIN32 -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA }; struct Options { @@ -579,18 +575,18 @@ bool ParseCommandLine(const std::vector& args, } else if (value == "gdi") { options->use_renderer_type = RendererType::kGdi; #endif // _WIN32 -#if defined(PDF_ENABLE_SKIA) +#if defined(PDF_USE_SKIA) } else if (value == "skia") { options->use_renderer_type = RendererType::kSkia; -#endif // defined(PDF_ENABLE_SKIA) +#endif // defined(PDF_USE_SKIA) } else { fprintf(stderr, "Invalid --use-renderer argument\n"); return false; } -#if defined(PDF_ENABLE_SKIA) +#if defined(PDF_USE_SKIA) } else if (cur_arg == "--render-premultiplied") { options->render_premultiplied_alpha = true; -#endif // defined(PDF_ENABLE_SKIA) +#endif // defined(PDF_USE_SKIA) #if defined(PDF_ENABLE_FONTATIONS) } else if (cur_arg == "--fontations") { options->use_fontations_backend = true; @@ -647,7 +643,7 @@ bool ParseCommandLine(const std::vector& args, return false; } options->output_format = OutputFormat::kAnnot; -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA } else if (cur_arg == "--skp") { if (options->output_format != OutputFormat::kNone) { fprintf(stderr, "Duplicate or conflicting --skp argument\n"); @@ -662,7 +658,7 @@ bool ParseCommandLine(const std::vector& args, } options->output_format = OutputFormat::kXps; #endif // _WIN32 -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA } else if (ParseSwitchKeyValue(cur_arg, "--font-dir=", &value)) { if (!options->font_directory.empty()) { fprintf(stderr, "Duplicate --font-dir argument\n"); @@ -801,14 +797,14 @@ bool ParseCommandLine(const std::vector& args, } } -#if defined(PDF_ENABLE_SKIA) +#if defined(PDF_USE_SKIA) if (options->render_premultiplied_alpha && options->use_renderer_type != RendererType::kSkia) { fprintf(stderr, "Cannot use --render_premultiplied with selected renderer\n"); return false; } -#endif // defined(PDF_ENABLE_SKIA) +#endif // defined(PDF_USE_SKIA) return true; } @@ -1323,7 +1319,7 @@ class GdiDisplayPageRenderer : public BitmapPageRenderer { }; #endif // _WIN32 -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA class SkCanvasPageRenderer : public PageRenderer { public: bool Start() override { @@ -1470,7 +1466,7 @@ class SkDocumentPageRenderer final : public SkCanvasPageRenderer { SkCanvas* canvas_ = nullptr; bool has_output_ = false; }; -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA bool PdfProcessor::ProcessPage(const int page_index) { FPDF_PAGE page = GetPage(page_index); @@ -1533,7 +1529,7 @@ bool PdfProcessor::ProcessPage(const int page_index) { case OutputFormat::kPng: { auto func = WriteStraightAlphaBufferToPng; -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA if (options().render_premultiplied_alpha) { func = WritePremultipliedAlphaBufferToPng; } @@ -1559,7 +1555,7 @@ bool PdfProcessor::ProcessPage(const int page_index) { break; #endif // _WIN32 -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA case OutputFormat::kSkp: renderer = std::make_unique( page, /*width=*/width, /*height=*/height, /*flags=*/flags); @@ -1597,7 +1593,7 @@ bool PdfProcessor::ProcessPage(const int page_index) { break; } #endif // _WIN32 -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA default: // Other formats won't write the output to a file, but still rasterize. @@ -1856,7 +1852,7 @@ void ShowConfig() { #ifdef PDF_ENABLE_ASAN append_config("ASAN"); #endif -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA append_config("SKIA"); #endif #ifdef _WIN32 @@ -1912,7 +1908,7 @@ constexpr char kUsageString[] = " --save-thumbs-raw - write page thumbnails' raw stream data" ".thumbnail.raw..png\n" -#if defined(PDF_ENABLE_SKIA) +#if defined(PDF_USE_SKIA) #ifdef _WIN32 " --use-renderer - renderer to use, one of [agg | gdi | skia]\n" #else @@ -1926,7 +1922,7 @@ constexpr char kUsageString[] = #else " --use-renderer - renderer to use, one of [agg]\n" #endif // _WIN32 -#endif // defined(PDF_ENABLE_SKIA) +#endif // defined(PDF_USE_SKIA) #if defined(PDF_ENABLE_FONTATIONS) " --fontations - Use fontations back-end library\n" #endif @@ -1968,12 +1964,12 @@ constexpr char kUsageString[] = " --png - write page images ..png\n" " --ppm - write page images ..ppm\n" " --annot - write annotation info ..annot.txt\n" -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA " --skp - write page images ..skp\n" #ifdef _WIN32 " --xps - write page images ..xps\n" #endif // _WIN32 -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA " --md5 - write output image paths and their md5 hashes to stdout.\n" " --time= - Seconds since the epoch to set system time.\n" ""; @@ -2054,11 +2050,11 @@ int main(int argc, const char* argv[]) { break; #endif // _WIN32 -#if defined(PDF_ENABLE_SKIA) +#if defined(PDF_USE_SKIA) case RendererType::kSkia: config.m_RendererType = FPDF_RENDERERTYPE_SKIA; break; -#endif // defined(PDF_ENABLE_SKIA) +#endif // defined(PDF_USE_SKIA) } #if defined(PDF_ENABLE_FONTATIONS) @@ -2066,7 +2062,7 @@ int main(int argc, const char* argv[]) { config.m_FontLibraryType = FPDF_FONTBACKENDTYPE_FONTATIONS; } #endif // defined(PDF_ENABLE_FONTATIONS) -#if defined(PDF_ENABLE_SKIA) +#if defined(PDF_USE_SKIA) #if defined(BUILD_WITH_CHROMIUM) // Needed to support Chromium's copy of Skia, which uses a // `DiscardableMemoryAllocator`. @@ -2074,7 +2070,7 @@ int main(int argc, const char* argv[]) { chromium_support::InitializeDiscardableMemoryAllocator(); } #endif // defined(BUILD_WITH_CHROMIUM) -#endif // defined(PDF_ENABLE_SKIA) +#endif // defined(PDF_USE_SKIA) std::function idler = [](FPDF_FORMHANDLE) {}; #ifdef PDF_ENABLE_V8 diff --git a/testing/pdfium_test/write.cc b/testing/pdfium_test/write.cc index 821281e4d3..6ed697b755 100644 --- a/testing/pdfium_test/write.cc +++ b/testing/pdfium_test/write.cc @@ -25,7 +25,7 @@ #include "testing/utils/bitmap_saver.h" #include "testing/utils/file_util.h" -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA #include "third_party/skia/include/core/SkData.h" // nogncheck #include "third_party/skia/include/core/SkImage.h" // nogncheck #include "third_party/skia/include/core/SkPicture.h" // nogncheck @@ -36,7 +36,7 @@ #else #include "third_party/skia/include/encode/SkPngEncoder.h" // nogncheck #endif // PDF_ENABLE_RUST_PNG -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA namespace { @@ -250,7 +250,7 @@ std::string WritePng(const char* pdf_name, UNSAFE_TODO(pdfium::span(static_cast(buffer), static_cast(bitmap_attributes.stride) * bitmap_attributes.height)); -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA std::vector straight_alpha_input; if (bitmap_attributes.has_alpha && buffer_has_premultiplied_alpha) { straight_alpha_input = BitmapSaver::ConvertToStraightAlpha( @@ -490,7 +490,7 @@ std::string WriteStraightAlphaBufferToPng( /*buffer_has_premultiplied_alpha=*/false); } -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA std::string WritePremultipliedAlphaBufferToPng( const char* pdf_name, int num, @@ -618,7 +618,7 @@ void WritePS(FPDF_PAGE page, const char* pdf_name, int num) { } #endif // _WIN32 -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA std::unique_ptr WriteToSkWStream(const std::string& pdf_name, int num, const std::string& extension) { @@ -663,7 +663,7 @@ std::string WriteSkp(const char* pdf_name, int num, const SkPicture& picture) { picture.serialize(stream.get(), &procs); return filename; } -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA enum class ThumbnailDecodeType { kBitmap, kRawStream, kDecodedStream }; diff --git a/testing/pdfium_test/write.h b/testing/pdfium_test/write.h index 4e048d36ee..b80b92122e 100644 --- a/testing/pdfium_test/write.h +++ b/testing/pdfium_test/write.h @@ -10,10 +10,10 @@ #include "public/fpdfview.h" -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA class SkPicture; class SkWStream; -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA struct BitmapAttributes { int width; @@ -33,7 +33,7 @@ std::string WriteStraightAlphaBufferToPng( int num, void* buffer, const BitmapAttributes& bitmap_attributes); -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA std::string WritePremultipliedAlphaBufferToPng( const char* pdf_name, int num, @@ -50,7 +50,7 @@ void WriteEmf(FPDF_PAGE page, const char* pdf_name, int num); void WritePS(FPDF_PAGE page, const char* pdf_name, int num); #endif // _WIN32 -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA std::unique_ptr WriteToSkWStream(const std::string& pdf_name, int num, const std::string& extension); @@ -59,7 +59,7 @@ std::unique_ptr WriteToSkWStream(const std::string& pdf_name, const std::string& extension, std::string& filename); std::string WriteSkp(const char* pdf_name, int num, const SkPicture& picture); -#endif // PDF_ENABLE_SKIA +#endif // PDF_USE_SKIA void WriteAttachments(FPDF_DOCUMENT doc, const std::string& name); void WriteImages(FPDF_PAGE page, const char* pdf_name, int page_num); diff --git a/testing/utils/bitmap_saver.cpp b/testing/utils/bitmap_saver.cpp index 90689b31d0..3b6d9d26b0 100644 --- a/testing/utils/bitmap_saver.cpp +++ b/testing/utils/bitmap_saver.cpp @@ -16,7 +16,7 @@ #include "core/fxcrt/notreached.h" #include "testing/png_codec/png_codec.h" -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA #include "third_party/skia/include/core/SkAlphaType.h" // nogncheck #include "third_party/skia/include/core/SkColorType.h" // nogncheck #include "third_party/skia/include/core/SkImageInfo.h" // nogncheck @@ -54,7 +54,7 @@ std::vector BitmapSaver::EncodeBitmapToPng(FPDF_BITMAP bitmap) { case FPDFBitmap_BGRA: return png_codec::EncodeBGRA(input, width, height, stride, /*discard_transparency=*/false); -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA case FPDFBitmap_BGRA_Premul: { std::vector straight_alpha_input = ConvertToStraightAlpha(input, width, height, stride); @@ -89,7 +89,7 @@ void BitmapSaver::WriteBitmapToPng(CFX_DIBitmap* bitmap, WriteBitmapToPng(reinterpret_cast(bitmap), filename); } -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA // static std::vector BitmapSaver::ConvertToStraightAlpha( pdfium::span input, diff --git a/testing/utils/bitmap_saver.h b/testing/utils/bitmap_saver.h index 1111b154f8..f8d80252c0 100644 --- a/testing/utils/bitmap_saver.h +++ b/testing/utils/bitmap_saver.h @@ -21,7 +21,7 @@ class BitmapSaver { static void WriteBitmapToPng(FPDF_BITMAP bitmap, const std::string& filename); static void WriteBitmapToPng(CFX_DIBitmap* bitmap, const std::string& filename); -#ifdef PDF_ENABLE_SKIA +#ifdef PDF_USE_SKIA static std::vector ConvertToStraightAlpha( pdfium::span input, int width, From f5ec36c8272fac4854433b0f93398582c9a35095 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Wed, 7 Oct 2026 17:02:29 -0700 Subject: [PATCH 51/72] Introduce CalculateSSIM and output metrics in image_diff This CL implements CalculateSSIM in pixel_diff_util, modifies image_diff.cpp to output mean_ssim and min_window_ssim, and updates pngdiffer.py to parse them without taking any new action. Eventually, these can be used to provide another sanity check on Fontations/Skia results that would have large MSE issues otherwise and would have to their diffs ignored for the moment. A short-circuit is provided in image_diff.cpp to avoid SSIM calculation if the images are exactly identical. Change-Id: I40e1e4e9b2cbc3b9f8862fdae5820d846b076e05 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160150 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- testing/image_diff.cpp | 44 +++++--- testing/tools/pngdiffer.py | 6 +- testing/utils/pixel_diff_util.cpp | 114 +++++++++++++++++++++ testing/utils/pixel_diff_util.h | 17 +++ testing/utils/pixel_diff_util_unittest.cpp | 23 +++++ 5 files changed, 189 insertions(+), 15 deletions(-) diff --git a/testing/image_diff.cpp b/testing/image_diff.cpp index 09092f145c..772828fbf6 100644 --- a/testing/image_diff.cpp +++ b/testing/image_diff.cpp @@ -158,6 +158,8 @@ struct DiffMetrics { uint8_t max_delta = 0; double mse = 0.0; double win_mse = 0.0; + double mean_ssim = 1.0; + double min_window_ssim = 1.0; }; // Computes the number of differing pixels. When `out_metrics` is non-null, @@ -190,20 +192,32 @@ int PixelsDifferent(const Image& baseline, out_metrics->raw_diff_pixels = pixels_different; out_metrics->max_delta = max_delta; if (w > 0 && h > 0) { - out_metrics->mse = - static_cast(total_squared_error) / (3.0 * w * h); - - std::vector baseline_overlap(w * h); - std::vector actual_overlap(w * h); - for (int y = 0; y < h; ++y) { - for (int x = 0; x < w; ++x) { - baseline_overlap[y * w + x] = baseline.pixel_at(x, y); - actual_overlap[y * w + x] = actual.pixel_at(x, y); + if (pixels_different == 0) { + out_metrics->mse = 0.0; + out_metrics->win_mse = 0.0; + out_metrics->mean_ssim = 1.0; + out_metrics->min_window_ssim = 1.0; + } else { + out_metrics->mse = + static_cast(total_squared_error) / (3.0 * w * h); + + std::vector baseline_overlap(w * h); + std::vector actual_overlap(w * h); + for (int y = 0; y < h; ++y) { + for (int x = 0; x < w; ++x) { + baseline_overlap[y * w + x] = baseline.pixel_at(x, y); + actual_overlap[y * w + x] = actual.pixel_at(x, y); + } } + out_metrics->win_mse = CalculateMaxWindowMSE( + baseline_overlap, static_cast(w), actual_overlap, + static_cast(w), w, h, kMaxFuzzyWindowSize); + SSIMMetrics ssim_metrics = + CalculateSSIM(baseline_overlap, static_cast(w), + actual_overlap, static_cast(w), w, h); + out_metrics->mean_ssim = ssim_metrics.mean_ssim; + out_metrics->min_window_ssim = ssim_metrics.min_window_ssim; } - out_metrics->win_mse = CalculateMaxWindowMSE( - baseline_overlap, static_cast(w), actual_overlap, - static_cast(w), w, h, kMaxFuzzyWindowSize); } } @@ -325,10 +339,12 @@ int CompareImages(const std::string& binary_name, printf( "%s: actual_w=%d actual_h=%d expected_w=%d expected_h=%d pixels=%d " - "total=%d max_delta=%u mse=%.6f win_mse=%.6f\n", + "total=%d max_delta=%u mse=%.6f win_mse=%.6f mean_ssim=%.6f " + "min_window_ssim=%.6f\n", base_name.c_str(), actual_image.w(), actual_image.h(), baseline_image.w(), baseline_image.h(), metrics.raw_diff_pixels, - overlap_w * overlap_h, metrics.max_delta, metrics.mse, metrics.win_mse); + overlap_w * overlap_h, metrics.max_delta, metrics.mse, metrics.win_mse, + metrics.mean_ssim, metrics.min_window_ssim); } UNSAFE_TODO(printf("%s: %01.2f%% %s (%d pixels differ)\n", diff_name, percent, diff --git a/testing/tools/pngdiffer.py b/testing/tools/pngdiffer.py index c180ebebc4..f31cfecd4a 100755 --- a/testing/tools/pngdiffer.py +++ b/testing/tools/pngdiffer.py @@ -34,6 +34,8 @@ class DiffMetrics: max_delta: int mse: float win_mse: float + mean_ssim: float = 1.0 + min_window_ssim: float = 1.0 @property def dims_match(self): @@ -202,7 +204,9 @@ def _RunImageCompareCommand(self, image_diff, image_matching_algorithm): total=int(kv['total']), max_delta=int(kv['max_delta']), mse=float(kv['mse']), - win_mse=float(kv['win_mse'])) + win_mse=float(kv['win_mse']), + mean_ssim=float(kv.get('mean_ssim', 1.0)), + min_window_ssim=float(kv.get('min_window_ssim', 1.0))) image_diff.metrics = metrics matched, failure_reason = self.EvaluateMatch(metrics, diff --git a/testing/utils/pixel_diff_util.cpp b/testing/utils/pixel_diff_util.cpp index a9531fe536..36a12f194a 100644 --- a/testing/utils/pixel_diff_util.cpp +++ b/testing/utils/pixel_diff_util.cpp @@ -8,6 +8,7 @@ #include #include +#include #include namespace { @@ -133,6 +134,119 @@ double CalculateMaxWindowMSE(pdfium::span baseline, return max_win_mse; } +SSIMMetrics CalculateSSIM(pdfium::span baseline, + size_t baseline_stride_pixels, + pdfium::span actual, + size_t actual_stride_pixels, + int w, + int h) { + if (w <= 0 || h <= 0) { + return {0.0, 0.0}; + } + + if (baseline_stride_pixels < static_cast(w) || + actual_stride_pixels < static_cast(w)) { + return {0.0, 0.0}; + } + + const size_t min_baseline_size = + (static_cast(h) - 1) * baseline_stride_pixels + w; + const size_t min_actual_size = + (static_cast(h) - 1) * actual_stride_pixels + w; + if (baseline.size() < min_baseline_size || actual.size() < min_actual_size) { + return {0.0, 0.0}; + } + + constexpr double kC1 = 6.5025; // (0.01 * 255)^2 + constexpr double kC2 = 58.5225; // (0.03 * 255)^2 + + double ssim_total = 0.0; + double min_window_ssim = 1.0; + int samples = 0; + + constexpr int kWindowSize = 8; + constexpr int kStepSize = 4; + + const int win_w = std::min(w, kWindowSize); + const int win_h = std::min(h, kWindowSize); + + for (int y = 0; y < h; y += kStepSize) { + if (y > h - win_h) { + y = h - win_h; + } + for (int x = 0; x < w; x += kStepSize) { + if (x > w - win_w) { + x = w - win_w; + } + + std::array sum_s = {}; + std::array sum_r = {}; + std::array sum_sq_s = {}; + std::array sum_sq_r = {}; + std::array sum_sxr = {}; + + for (int wy = 0; wy < win_h; ++wy) { + const size_t b_offset = (y + wy) * baseline_stride_pixels; + const size_t a_offset = (y + wy) * actual_stride_pixels; + for (int wx = 0; wx < win_w; ++wx) { + UnpackedPixel p_b(baseline[b_offset + x + wx]); + UnpackedPixel p_a(actual[a_offset + x + wx]); + + const std::array b_channels = {p_b.red, p_b.green, + p_b.blue}; + const std::array a_channels = {p_a.red, p_a.green, + p_a.blue}; + + for (int c = 0; c < 3; ++c) { + sum_s[c] += b_channels[c]; + sum_r[c] += a_channels[c]; + sum_sq_s[c] += b_channels[c] * b_channels[c]; + sum_sq_r[c] += a_channels[c] * a_channels[c]; + sum_sxr[c] += b_channels[c] * a_channels[c]; + } + } + } + + double window_ssim = 0.0; + const int count = win_w * win_h; + + for (int c = 0; c < 3; ++c) { + const double mean_s = static_cast(sum_s[c]) / count; + const double mean_r = static_cast(sum_r[c]) / count; + + const double var_s = + static_cast(sum_sq_s[c]) / count - mean_s * mean_s; + const double var_r = + static_cast(sum_sq_r[c]) / count - mean_r * mean_r; + const double covar_sxr = + static_cast(sum_sxr[c]) / count - mean_s * mean_r; + + const double ssim_n = + (2.0 * mean_s * mean_r + kC1) * (2.0 * covar_sxr + kC2); + const double ssim_d = + (mean_s * mean_s + mean_r * mean_r + kC1) * (var_s + var_r + kC2); + + window_ssim += ssim_n / ssim_d; + } + + const double final_window_ssim = window_ssim / 3.0; + ssim_total += final_window_ssim; + min_window_ssim = std::min(min_window_ssim, final_window_ssim); + samples++; + + if (x == w - win_w) { + break; + } + } + if (y == h - win_h) { + break; + } + } + + return samples > 0 ? SSIMMetrics{ssim_total / samples, min_window_ssim} + : SSIMMetrics{1.0, 1.0}; +} + int CalculatePixelsDifferent(pdfium::span baseline, size_t baseline_stride_pixels, pdfium::span actual, diff --git a/testing/utils/pixel_diff_util.h b/testing/utils/pixel_diff_util.h index 4ad054a646..7aa153a69e 100644 --- a/testing/utils/pixel_diff_util.h +++ b/testing/utils/pixel_diff_util.h @@ -48,6 +48,11 @@ inline constexpr DiffOptions kFontationsDiffOptions = { .max_window_mean_squared_error = kMaxFontationsWindowMeanSquaredError, }; +struct SSIMMetrics { + double mean_ssim; + double min_window_ssim; +}; + // Returns the largest difference in pixel channels between `baseline_pixel` and // `actual_pixel`. Pixels are expected to be in 32-bit ARGB or BGRA format. uint8_t MaxPixelPerChannelDelta(uint32_t baseline_pixel, uint32_t actual_pixel); @@ -68,6 +73,18 @@ double CalculateMaxWindowMSE(pdfium::span baseline, int h, int window_size); +// Computes the Structural Similarity (SSIM) index across the RGB channels. +// Uses an 8x8 sliding window with a step size of 4 pixels. Returns both the +// global mean SSIM, and the minimum local window SSIM (worst-case match). +// Values are between 0.0 and 1.0, where 1.0 indicates perfect similarity. +// See https://en.wikipedia.org/wiki/Structural_similarity_index_measure +SSIMMetrics CalculateSSIM(pdfium::span baseline, + size_t baseline_stride_pixels, + pdfium::span actual, + size_t actual_stride_pixels, + int w, + int h); + // Returns the number of differing pixels between `baseline` and `actual` within // the overlap region of dimensions (`w`, `h`), taking into account maximum // per-channel delta, global mean squared error, and optional windowed mean diff --git a/testing/utils/pixel_diff_util_unittest.cpp b/testing/utils/pixel_diff_util_unittest.cpp index cc60693556..13509ab041 100644 --- a/testing/utils/pixel_diff_util_unittest.cpp +++ b/testing/utils/pixel_diff_util_unittest.cpp @@ -129,6 +129,29 @@ TEST(PixelDiffUtilTest, CalculateMaxWindowMSEInvalidInputs) { EXPECT_DOUBLE_EQ(0.0, CalculateMaxWindowMSE(img, 4, img, 4, 4, 4, 0)); } +TEST(PixelDiffUtilTest, CalculateSSIMExactMatch) { + std::vector img(64, 0xffffffff); + EXPECT_DOUBLE_EQ(1.0, CalculateSSIM(img, 8, img, 8, 8, 8).mean_ssim); + EXPECT_DOUBLE_EQ(1.0, CalculateSSIM(img, 8, img, 8, 8, 8).min_window_ssim); +} + +TEST(PixelDiffUtilTest, CalculateSSIMReallyOff) { + std::vector img1(64, 0xffffffff); + std::vector img2(img1); + // Corrupt a few pixels. + img2[12] = 56; + img2[34] = 78; + EXPECT_NEAR(0.0364, CalculateSSIM(img1, 8, img2, 8, 8, 8).mean_ssim, 0.0001); + EXPECT_NEAR(0.0364, CalculateSSIM(img1, 8, img2, 8, 8, 8).min_window_ssim, + 0.0001); +} + +TEST(PixelDiffUtilTest, CalculateSSIMInvalidInputs) { + std::vector img(16, 0); + EXPECT_DOUBLE_EQ(0.0, CalculateSSIM(img, 0, img, 0, 0, 0).mean_ssim); + EXPECT_DOUBLE_EQ(0.0, CalculateSSIM(img, 0, img, 0, 0, 0).min_window_ssim); +} + TEST(PixelDiffUtilTest, CalculatePixelsDifferentExactMatch) { std::vector img(64, 0xffffffff); EXPECT_EQ(0, From fd884274a279e30e33fb1201167a33029ddebd28 Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Wed, 7 Oct 2026 17:31:01 -0700 Subject: [PATCH 52/72] Speed up PngPredictLine for Paeth and Average Simplify PaethPredictor() algebraically (pa = abs(b - c), pb = abs(a - c), pc = abs((a - c) + (b - c))) and use branchless conditional selection. Extend the per-pixel register-carry fast path (previously used only for 3- and 4-byte Sub rows) to Bpp = 1, 2, 3, and 4 across Sub, Average, and Paeth rows, and reuse PredictSubRow() on the first row of Paeth. Carrying the running left and upper_left pixel state in local registers eliminates per-byte store-to-load forwarding stalls on dest_span[i - bpp], redundant loads of last_span[i - bpp], and per-byte span bounds checks via fxcrt::Zip(). On a 2048x200 image, PngPredictLine() with Paeth is 3.72x faster for 4-Bpp (5911.4 us -> 1588.9 us) and 2.33x faster for 3-Bpp (5553.3 us -> 2386.0 us), while remaining bit-exact for all filter tags and inputs. Bug: 549230311 Change-Id: I45ed513938044b868cb7ef526706948501b567ca Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160071 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- core/fxcodec/BUILD.gn | 1 + core/fxcodec/image_predictors.cpp | 283 +++++++++++++++------ core/fxcodec/image_predictors_unittest.cpp | 107 ++++++++ 3 files changed, 311 insertions(+), 80 deletions(-) create mode 100644 core/fxcodec/image_predictors_unittest.cpp diff --git a/core/fxcodec/BUILD.gn b/core/fxcodec/BUILD.gn index c48a8daa2b..a81d5c5c10 100644 --- a/core/fxcodec/BUILD.gn +++ b/core/fxcodec/BUILD.gn @@ -257,6 +257,7 @@ pdfium_unittest_source_set("unittests") { "basic/a85_unittest.cpp", "basic/rle_unittest.cpp", "flate/flatemodule_unittest.cpp", + "image_predictors_unittest.cpp", "jbig2/jbig2_bit_stream_unittest.cpp", "jbig2/jbig2_image_unittest.cpp", "jpeg/jpegmodule_unittest.cpp", diff --git a/core/fxcodec/image_predictors.cpp b/core/fxcodec/image_predictors.cpp index aa86ee3337..8e9c2773ba 100644 --- a/core/fxcodec/image_predictors.cpp +++ b/core/fxcodec/image_predictors.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -25,14 +26,150 @@ namespace fxcodec { namespace { uint8_t PaethPredictor(uint8_t a, uint8_t b, uint8_t c) { - int p = static_cast(a) + b - c; - int pa = abs(p - a); - int pb = abs(p - b); - int pc = abs(p - c); - if (pa <= pb && pa <= pc) { - return a; + const int bc = static_cast(b) - c; + const int ac = static_cast(a) - c; + const int pa = abs(bc); + const int pb = abs(ac); + const int pc = abs(ac + bc); + // Eagerly selecting between `b` and `c` avoids a short-circuit branch across + // `&&` and lets the compiler emit two branchless conditional selects. + const uint8_t bc_best = pb <= pc ? b : c; + return (pa <= pb && pa <= pc) ? a : bc_best; +} + +// Fixed-size pixel view for per-pixel register carry in Sub, Average, and Paeth +// predictors. PNG predictors operate on raw bytes and never care about color +// order. +template +using Pixel = std::array; + +template +void PredictSubRest(pdfium::span dest_span, + pdfium::span src_span) { + const size_t row_size = dest_span.size(); + if (row_size <= Bpp) { + return; + } + auto src_px = fxcrt::reinterpret_span>(src_span); + auto dest_px = fxcrt::reinterpret_span>(dest_span); + Pixel left = dest_px.front(); + for (auto [s, d] : fxcrt::Zip(src_px.subspan(1u), dest_px.subspan(1u))) { + for (size_t c = 0; c < Bpp; ++c) { + left[c] += s[c]; + } + d = left; + } + for (size_t i = row_size - row_size % Bpp; i < row_size; ++i) { + dest_span[i] = src_span[i] + dest_span[i - Bpp]; + } +} + +void PredictSubRow(pdfium::span dest_span, + pdfium::span src_span, + size_t bpp, + size_t lead) { + // The lead bytes have a zero left neighbor. + fxcrt::Copy(src_span.first(lead), dest_span); + // A Sub-filtered row's channels form independent additive chains; the + // generic loop below re-reads dest_span[i - bpp], a value it stored `bpp` + // iterations earlier, which serializes the loop on store-to-load + // forwarding. Walking the row as pixel arrays and carrying the running + // channel values in a local removes that dependency (and, via fxcrt::Zip(), + // all per-element bounds checks). + switch (bpp) { + case 1: + PredictSubRest<1>(dest_span, src_span); + return; + case 2: + PredictSubRest<2>(dest_span, src_span); + return; + case 3: + PredictSubRest<3>(dest_span, src_span); + return; + case 4: + PredictSubRest<4>(dest_span, src_span); + return; + default: { + const size_t row_size = dest_span.size(); + for (size_t i = lead; i < row_size; ++i) { + dest_span[i] = src_span[i] + dest_span[i - bpp]; + } + return; + } + } +} + +template +void PredictAverageFirstRowRest(pdfium::span dest_span, + pdfium::span src_span) { + const size_t row_size = dest_span.size(); + if (row_size <= Bpp) { + return; + } + auto src_px = fxcrt::reinterpret_span>(src_span); + auto dest_px = fxcrt::reinterpret_span>(dest_span); + Pixel left = dest_px.front(); + for (auto [s, d] : fxcrt::Zip(src_px.subspan(1u), dest_px.subspan(1u))) { + for (size_t c = 0; c < Bpp; ++c) { + left[c] = s[c] + left[c] / 2; + } + d = left; + } + for (size_t i = row_size - row_size % Bpp; i < row_size; ++i) { + dest_span[i] = src_span[i] + dest_span[i - Bpp] / 2; + } +} + +template +void PredictAverageRest(pdfium::span dest_span, + pdfium::span src_span, + pdfium::span last_span) { + const size_t row_size = dest_span.size(); + if (row_size <= Bpp) { + return; + } + auto src_px = fxcrt::reinterpret_span>(src_span); + auto last_px = fxcrt::reinterpret_span>(last_span); + auto dest_px = fxcrt::reinterpret_span>(dest_span); + Pixel left = dest_px.front(); + for (auto [s, u, d] : fxcrt::Zip(src_px.subspan(1u), last_px.subspan(1u), + dest_px.subspan(1u))) { + for (size_t c = 0; c < Bpp; ++c) { + left[c] = s[c] + (u[c] + left[c]) / 2; + } + d = left; + } + for (size_t i = row_size - row_size % Bpp; i < row_size; ++i) { + dest_span[i] = src_span[i] + (last_span[i] + dest_span[i - Bpp]) / 2; + } +} + +template +void PredictPaethRest(pdfium::span dest_span, + pdfium::span src_span, + pdfium::span last_span) { + const size_t row_size = dest_span.size(); + if (row_size <= Bpp) { + return; + } + auto src_px = fxcrt::reinterpret_span>(src_span); + auto last_px = fxcrt::reinterpret_span>(last_span); + auto dest_px = fxcrt::reinterpret_span>(dest_span); + Pixel left = dest_px.front(); + Pixel upper_left = last_px.front(); + for (auto [s, u, d] : fxcrt::Zip(src_px.subspan(1u), last_px.subspan(1u), + dest_px.subspan(1u))) { + for (size_t c = 0; c < Bpp; ++c) { + left[c] = s[c] + PaethPredictor(left[c], u[c], upper_left[c]); + } + upper_left = u; + d = left; + } + for (size_t i = row_size - row_size % Bpp; i < row_size; ++i) { + dest_span[i] = + src_span[i] + + PaethPredictor(dest_span[i - Bpp], last_span[i], last_span[i - Bpp]); } - return pb <= pc ? b : c; } std::optional> PngPredictor( @@ -138,22 +275,6 @@ const DataAndBytesConsumed ApplyPredictor(DataVector decoded_buf, NOTREACHED(); } -// Fixed-size pixel views for the Sub filter's per-channel fast paths. The -// channel names are deliberately positional: PNG predictors operate on raw -// bytes and never care about color order. -struct Pixel3 { - uint8_t c0; - uint8_t c1; - uint8_t c2; -}; - -struct Pixel4 { - uint8_t c0; - uint8_t c1; - uint8_t c2; - uint8_t c3; -}; - void PngPredictLine(pdfium::span dest_span, pdfium::span src_span, pdfium::span last_span, @@ -181,51 +302,7 @@ void PngPredictLine(pdfium::span dest_span, switch (tag) { case 1: { // Sub: left neighbor only, so the first row needs no special casing. - // The lead bytes have a zero left neighbor. - fxcrt::Copy(src_span.first(lead), dest_span); - // A Sub-filtered row's channels form independent additive chains; the - // generic loop below re-reads dest_span[i - bpp], a value it stored `bpp` - // iterations earlier, which serializes the loop on store-to-load - // forwarding. For the common 3- and 4-byte pixel sizes, walking the - // row as pixel structs and carrying the running channel values in a - // local removes that dependency (and, via fxcrt::Zip(), all - // per-element bounds checks). - if (bpp == 3 && row_size >= 3) { - auto src_px = fxcrt::reinterpret_span(src_span); - auto dest_px = fxcrt::reinterpret_span(dest_span); - Pixel3 carry = dest_px.front(); - for (auto [s, d] : - fxcrt::Zip(src_px.subspan(1u), dest_px.subspan(1u))) { - carry.c0 += s.c0; - carry.c1 += s.c1; - carry.c2 += s.c2; - d = carry; - } - for (size_t i = row_size - row_size % 3; i < row_size; ++i) { - dest_span[i] = src_span[i] + dest_span[i - 3]; - } - break; - } - if (bpp == 4 && row_size >= 4) { - auto src_px = fxcrt::reinterpret_span(src_span); - auto dest_px = fxcrt::reinterpret_span(dest_span); - Pixel4 carry = dest_px.front(); - for (auto [s, d] : - fxcrt::Zip(src_px.subspan(1u), dest_px.subspan(1u))) { - carry.c0 += s.c0; - carry.c1 += s.c1; - carry.c2 += s.c2; - carry.c3 += s.c3; - d = carry; - } - for (size_t i = row_size - row_size % 4; i < row_size; ++i) { - dest_span[i] = src_span[i] + dest_span[i - 4]; - } - break; - } - for (size_t i = lead; i < row_size; ++i) { - dest_span[i] = src_span[i] + dest_span[i - bpp]; - } + PredictSubRow(dest_span, src_span, bpp, lead); break; } case 2: { @@ -243,8 +320,24 @@ void PngPredictLine(pdfium::span dest_span, // Average: (left + up) / 2, with the zero cases hoisted. if (last_span.empty()) { fxcrt::Copy(src_span.first(lead), dest_span); - for (size_t i = lead; i < row_size; ++i) { - dest_span[i] = src_span[i] + dest_span[i - bpp] / 2; + switch (bpp) { + case 1: + PredictAverageFirstRowRest<1>(dest_span, src_span); + break; + case 2: + PredictAverageFirstRowRest<2>(dest_span, src_span); + break; + case 3: + PredictAverageFirstRowRest<3>(dest_span, src_span); + break; + case 4: + PredictAverageFirstRowRest<4>(dest_span, src_span); + break; + default: + for (size_t i = lead; i < row_size; ++i) { + dest_span[i] = src_span[i] + dest_span[i - bpp] / 2; + } + break; } break; } @@ -252,8 +345,25 @@ void PngPredictLine(pdfium::span dest_span, fxcrt::Zip(src_span.first(lead), last_span, dest_span)) { d = s + u / 2; } - for (size_t i = lead; i < row_size; ++i) { - dest_span[i] = src_span[i] + (last_span[i] + dest_span[i - bpp]) / 2; + switch (bpp) { + case 1: + PredictAverageRest<1>(dest_span, src_span, last_span); + break; + case 2: + PredictAverageRest<2>(dest_span, src_span, last_span); + break; + case 3: + PredictAverageRest<3>(dest_span, src_span, last_span); + break; + case 4: + PredictAverageRest<4>(dest_span, src_span, last_span); + break; + default: + for (size_t i = lead; i < row_size; ++i) { + dest_span[i] = + src_span[i] + (last_span[i] + dest_span[i - bpp]) / 2; + } + break; } break; } @@ -262,20 +372,33 @@ void PngPredictLine(pdfium::span dest_span, // selects the left neighbor, so the first row reduces to Sub; with // left == upper_left == 0 (lead bytes) it always selects up. if (last_span.empty()) { - fxcrt::Copy(src_span.first(lead), dest_span); - for (size_t i = lead; i < row_size; ++i) { - dest_span[i] = src_span[i] + dest_span[i - bpp]; - } + PredictSubRow(dest_span, src_span, bpp, lead); break; } for (auto [s, u, d] : fxcrt::Zip(src_span.first(lead), last_span, dest_span)) { d = s + u; } - for (size_t i = lead; i < row_size; ++i) { - dest_span[i] = - src_span[i] + PaethPredictor(dest_span[i - bpp], last_span[i], - last_span[i - bpp]); + switch (bpp) { + case 1: + PredictPaethRest<1>(dest_span, src_span, last_span); + break; + case 2: + PredictPaethRest<2>(dest_span, src_span, last_span); + break; + case 3: + PredictPaethRest<3>(dest_span, src_span, last_span); + break; + case 4: + PredictPaethRest<4>(dest_span, src_span, last_span); + break; + default: + for (size_t i = lead; i < row_size; ++i) { + dest_span[i] = + src_span[i] + PaethPredictor(dest_span[i - bpp], last_span[i], + last_span[i - bpp]); + } + break; } break; } diff --git a/core/fxcodec/image_predictors_unittest.cpp b/core/fxcodec/image_predictors_unittest.cpp new file mode 100644 index 0000000000..2b46ac79e8 --- /dev/null +++ b/core/fxcodec/image_predictors_unittest.cpp @@ -0,0 +1,107 @@ +// Copyright 2026 The PDFium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/fxcodec/image_predictors.h" + +#include +#include +#include + +#include + +#include "core/fxcrt/span.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace fxcodec { +namespace { + +uint8_t ReferencePaethPredictor(uint8_t a, uint8_t b, uint8_t c) { + int p = static_cast(a) + b - c; + int pa = abs(p - a); + int pb = abs(p - b); + int pc = abs(p - c); + if (pa <= pb && pa <= pc) { + return a; + } + return pb <= pc ? b : c; +} + +void ReferencePngPredictLine(pdfium::span dest_span, + pdfium::span src_span, + pdfium::span last_span, + size_t row_size, + uint32_t bytes_per_pixel) { + const uint8_t tag = src_span.front(); + src_span = src_span.subspan(1u, row_size); + dest_span = dest_span.first(row_size); + if (!last_span.empty()) { + last_span = last_span.first(row_size); + } + const size_t bpp = bytes_per_pixel; + for (size_t i = 0; i < row_size; ++i) { + const uint8_t left = i >= bpp ? dest_span[i - bpp] : 0; + const uint8_t up = last_span.empty() ? 0 : last_span[i]; + const uint8_t upper_left = + (i >= bpp && !last_span.empty()) ? last_span[i - bpp] : 0; + switch (tag) { + case 1: + dest_span[i] = src_span[i] + left; + break; + case 2: + dest_span[i] = src_span[i] + up; + break; + case 3: + dest_span[i] = src_span[i] + (up + left) / 2; + break; + case 4: + dest_span[i] = + src_span[i] + ReferencePaethPredictor(left, up, upper_left); + break; + default: + dest_span[i] = src_span[i]; + break; + } + } +} + +} // namespace + +TEST(ImagePredictorsTest, PngPredictLineAllTagsAndWidths) { + for (uint8_t tag = 0; tag <= 5; ++tag) { + for (uint32_t bpp : {1u, 2u, 3u, 4u, 6u}) { + for (size_t row_size : + {1u, 2u, 3u, 4u, 5u, 7u, 8u, 12u, 16u, 31u, 64u, 129u}) { + std::vector src(row_size + 1); + std::vector last(row_size); + src[0] = tag; + for (size_t i = 0; i < row_size; ++i) { + src[i + 1] = + static_cast((i * 73 + tag * 19 + bpp * 41) & 0xFF); + last[i] = + static_cast((i * 151 + tag * 31 + bpp * 17) & 0xFF); + } + + // First row (empty last_span). + std::vector dst_ref_first(row_size, 0); + std::vector dst_opt_first(row_size, 0); + ReferencePngPredictLine(dst_ref_first, src, {}, row_size, bpp); + PngPredictLine(dst_opt_first, src, {}, row_size, bpp); + EXPECT_EQ(dst_ref_first, dst_opt_first) + << "First row mismatch for tag=" << static_cast(tag) + << " bpp=" << bpp << " row_size=" << row_size; + + // Subsequent row (non-empty last_span). + std::vector dst_ref(row_size, 0); + std::vector dst_opt(row_size, 0); + ReferencePngPredictLine(dst_ref, src, last, row_size, bpp); + PngPredictLine(dst_opt, src, last, row_size, bpp); + EXPECT_EQ(dst_ref, dst_opt) + << "Row mismatch for tag=" << static_cast(tag) + << " bpp=" << bpp << " row_size=" << row_size; + } + } + } +} + +} // namespace fxcodec From 8d804d1424af0598d1aba3d085354689f709cb08 Mon Sep 17 00:00:00 2001 From: Matt Stark Date: Wed, 7 Oct 2026 17:42:33 -0700 Subject: [PATCH 53/72] Fix check_includes_strict violations in pdfium. Note: public_deps should now be used iff a public header includes the dependency. This is because public_deps no longer exposes headers from dependencies, so the advice to avoid public_deps is no longer relevant. This is a part of the LSC https://docs.google.com/document/d/1zYUC_zuFrZozo9ogFHcf0Rzkiw9W7RVnaY-1fzfQ0AM/edit?tab=t.0 Bug: 556959580 Change-Id: Id9954ce4c8685204030e22a7a23891eb6a6a6964 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160112 Auto-Submit: Matt Stark Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- BUILD.gn | 5 ++++ core/fdrm/BUILD.gn | 8 +++++-- core/fpdfapi/edit/BUILD.gn | 9 +++++-- core/fpdfapi/font/BUILD.gn | 4 ++-- core/fpdfapi/page/BUILD.gn | 14 +++++------ core/fpdfapi/parser/BUILD.gn | 14 +++++++---- core/fpdfapi/render/BUILD.gn | 10 ++++---- core/fpdfdoc/BUILD.gn | 10 +++++--- core/fpdftext/BUILD.gn | 6 +++-- core/fxcodec/BUILD.gn | 15 ++++++++++-- core/fxcrt/BUILD.gn | 4 +++- core/fxcrt/css/BUILD.gn | 3 ++- core/fxge/BUILD.gn | 6 +++-- fpdfsdk/BUILD.gn | 21 +++++++++------- fpdfsdk/formfiller/BUILD.gn | 10 ++++---- fpdfsdk/fpdfxfa/BUILD.gn | 18 +++++++++----- fpdfsdk/pwl/BUILD.gn | 16 ++++++++----- fxbarcode/BUILD.gn | 5 ++-- fxjs/BUILD.gn | 15 +++++++++--- testing/BUILD.gn | 46 +++++++++++++++++++++++------------- testing/fuzzers/BUILD.gn | 11 ++++++--- testing/pdfium_test/BUILD.gn | 6 ++++- testing/test.gni | 14 +++++++++-- third_party/BUILD.gn | 2 +- xfa/fde/BUILD.gn | 6 +++-- xfa/fgas/crt/BUILD.gn | 8 +++---- xfa/fgas/font/BUILD.gn | 6 +++-- xfa/fgas/graphics/BUILD.gn | 3 ++- xfa/fgas/layout/BUILD.gn | 2 +- xfa/fwl/BUILD.gn | 5 ++-- xfa/fxfa/BUILD.gn | 18 ++++++++------ xfa/fxfa/formcalc/BUILD.gn | 5 +++- xfa/fxfa/layout/BUILD.gn | 5 ++-- xfa/fxfa/parser/BUILD.gn | 13 ++++++---- 34 files changed, 231 insertions(+), 112 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index a5d8a7741d..ae553d2001 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -217,6 +217,7 @@ source_set("pdfium_public_headers_impl") { "public/fpdf_transformpage.h", "public/fpdfview.h", ] + visibility = [ ":*" ] } group("pdfium_public_headers") { @@ -330,6 +331,8 @@ test("pdfium_unittests") { "core/fxcrt:unittests", "core/fxge:unittests", "fpdfsdk:unittests", + "testing:test_environments", + "testing:test_support", "testing:unit_test_support", "testing:unittests", "testing/png_codec:unittests", @@ -393,6 +396,8 @@ test("pdfium_embeddertests") { "fpdfsdk:embeddertests", "fpdfsdk/formfiller:embeddertests", "fpdfsdk/pwl:embeddertests", + "testing:test_environments", + "testing:test_support", "testing/png_codec", "//testing/gmock", "//testing/gtest", diff --git a/core/fdrm/BUILD.gn b/core/fdrm/BUILD.gn index 39a93c4f83..159bce5ce0 100644 --- a/core/fdrm/BUILD.gn +++ b/core/fdrm/BUILD.gn @@ -18,12 +18,16 @@ source_set("fdrm") { "../../:pdfium_strict_config", "../../:pdfium_noshorten_config", ] - deps = [ "../fxcrt" ] + visibility = [ "../../*" ] + public_deps = [ "../fxcrt" ] } pdfium_unittest_source_set("unittests") { sources = [ "fx_crypt_unittest.cpp" ] - deps = [ ":fdrm" ] + deps = [ + ":fdrm", + "../../testing:test_support", + ] pdfium_root_dir = "../../" } diff --git a/core/fpdfapi/edit/BUILD.gn b/core/fpdfapi/edit/BUILD.gn index 45bf9f9b40..70fe588aae 100644 --- a/core/fpdfapi/edit/BUILD.gn +++ b/core/fpdfapi/edit/BUILD.gn @@ -30,12 +30,15 @@ source_set("edit") { "../../../:pdfium_strict_config", "../../../:pdfium_noshorten_config", ] + public_deps = [ + "../../fxcrt", + "../parser", + ] deps = [ "../../../constants", - "../../fxcrt", + "../../fxge", "../font", "../page", - "../parser", "//third_party/harfbuzz", ] visibility = [ "../../../*" ] @@ -71,6 +74,8 @@ pdfium_embeddertest_source_set("embeddertests") { ] deps = [ ":edit", + "../../../testing:path_service", + "../../../testing:test_support", "../../fxge", "../font", "../parser", diff --git a/core/fpdfapi/font/BUILD.gn b/core/fpdfapi/font/BUILD.gn index 8684cfcd4f..62304889e0 100644 --- a/core/fpdfapi/font/BUILD.gn +++ b/core/fpdfapi/font/BUILD.gn @@ -42,13 +42,13 @@ source_set("font") { "../../../:pdfium_strict_config", "../../../:pdfium_noshorten_config", ] - deps = [ - "../../../constants", + public_deps = [ "../../fxcrt", "../../fxge", "../cmaps", "../parser", ] + deps = [ "../../../constants" ] visibility = [ "../../../*" ] if (is_mac) { frameworks = [ "CoreFoundation.framework" ] diff --git a/core/fpdfapi/page/BUILD.gn b/core/fpdfapi/page/BUILD.gn index 4f01a5e8e8..c9fdf2b85b 100644 --- a/core/fpdfapi/page/BUILD.gn +++ b/core/fpdfapi/page/BUILD.gn @@ -111,15 +111,14 @@ source_set("page") { ] configs += [ "../../../:pdfium_strict_config" ] public_deps = [ - "../../fxge", - "../parser", - ] - deps = [ "../../../constants", "../../fxcodec", "../../fxcrt", + "../../fxge", "../font", + "../parser", ] + deps = [ "//third_party/abseil-cpp:absl" ] allow_circular_includes_from = [] if (pdf_use_skia) { allow_circular_includes_from += [ "../../fxge" ] @@ -134,10 +133,8 @@ source_set("unit_test_support") { "test_with_page_module.h", ] configs += [ "../../../:pdfium_strict_config" ] - deps = [ - "../page", - "//testing/gtest", - ] + public_deps = [ "//testing/gtest" ] + deps = [ "../page" ] } pdfium_unittest_source_set("unittests") { @@ -157,6 +154,7 @@ pdfium_unittest_source_set("unittests") { ":page", ":unit_test_support", "../../../constants", + "../../../testing:path_service", "../parser", "../parser:unit_test_support", "../render", diff --git a/core/fpdfapi/parser/BUILD.gn b/core/fpdfapi/parser/BUILD.gn index 858ddaa9ec..3e38e5ec8f 100644 --- a/core/fpdfapi/parser/BUILD.gn +++ b/core/fpdfapi/parser/BUILD.gn @@ -77,12 +77,12 @@ source_set("parser") { "object_tree_traversal_util.h", ] configs += [ "../../../:pdfium_strict_config" ] - deps = [ - "../../../constants", + public_deps = [ "../../fdrm", "../../fxcodec", + "../../fxcrt", ] - public_deps = [ "../../fxcrt" ] + deps = [ "../../../constants" ] allow_circular_includes_from = [] visibility = [ "../../../*" ] @@ -105,8 +105,11 @@ source_set("unit_test_support") { "cpdf_test_document.h", ] configs += [ "../../../:pdfium_strict_config" ] - deps = [ + public_deps = [ ":parser", + "../../fxcrt", + ] + deps = [ "../page", "../render", ] @@ -138,6 +141,8 @@ pdfium_unittest_source_set("unittests") { ":parser", ":unit_test_support", "../../../constants", + "../../../testing:path_service", + "../../../testing:test_support", "../../fxcodec", "../page", "../page:unit_test_support", @@ -159,6 +164,7 @@ pdfium_embeddertest_source_set("embeddertests") { ] deps = [ ":parser", + "../../../testing:test_support", "../../fxge", ] pdfium_root_dir = "../../../" diff --git a/core/fpdfapi/render/BUILD.gn b/core/fpdfapi/render/BUILD.gn index 7619843201..0fa5744938 100644 --- a/core/fpdfapi/render/BUILD.gn +++ b/core/fpdfapi/render/BUILD.gn @@ -38,15 +38,17 @@ source_set("render") { "../../../:pdfium_strict_config", "../../../:pdfium_noshorten_config", ] - deps = [ - "../../../constants", - "../../fxcodec", + public_deps = [ "../../fxcrt", "../../fxge", - "../font", "../page", "../parser", ] + deps = [ + "../../../constants", + "../../fxcodec", + "../font", + ] visibility = [ "../../../*" ] if (is_win) { sources += [ diff --git a/core/fpdfdoc/BUILD.gn b/core/fpdfdoc/BUILD.gn index a12953e077..aef114dd28 100644 --- a/core/fpdfdoc/BUILD.gn +++ b/core/fpdfdoc/BUILD.gn @@ -82,15 +82,18 @@ source_set("fpdfdoc") { "../../:pdfium_strict_config", "../../:pdfium_noshorten_config", ] - deps = [ + public_deps = [ "../../constants", - "../fpdfapi/font", - "../fpdfapi/page", "../fpdfapi/parser", "../fpdfapi/render", "../fxcrt", "../fxge", ] + deps = [ + "../fpdfapi/font", + "../fpdfapi/page", + "//third_party/abseil-cpp:absl", + ] visibility = [ "../../*" ] } @@ -116,6 +119,7 @@ pdfium_unittest_source_set("unittests") { deps = [ ":fpdfdoc", "../../constants", + "../../testing:test_support", "../fpdfapi/font", "../fpdfapi/page", "../fpdfapi/page:unit_test_support", diff --git a/core/fpdftext/BUILD.gn b/core/fpdftext/BUILD.gn index cea247e6b5..8a27e32d52 100644 --- a/core/fpdftext/BUILD.gn +++ b/core/fpdftext/BUILD.gn @@ -17,11 +17,13 @@ source_set("fpdftext") { "unicodenormalizationdata.h", ] configs += [ "../../:pdfium_strict_config" ] + public_deps = [ + "../fpdfapi/page", + "../fxcrt", + ] deps = [ "../fpdfapi/font", - "../fpdfapi/page", "../fpdfapi/parser", - "../fxcrt", ] visibility = [ "../../*" ] } diff --git a/core/fxcodec/BUILD.gn b/core/fxcodec/BUILD.gn index a81d5c5c10..0484baa3d6 100644 --- a/core/fxcodec/BUILD.gn +++ b/core/fxcodec/BUILD.gn @@ -128,7 +128,10 @@ source_set("fxcodec") { "../../:pdfium_strict_config", "../../:pdfium_noshorten_config", ] - public_deps = [ "../fxcrt" ] + public_deps = [ + "../../third_party:fx_lcms2", + "../fxcrt", + ] deps = [ "../../third_party:lcms2", "../../third_party:libopenjpeg2", @@ -141,7 +144,10 @@ source_set("fxcodec") { "brotli/brotli_decoder.cpp", "brotli/brotli_decoder.h", ] - deps += [ "//third_party/brotli:dec" ] + deps += [ + "//third_party/brotli:dec", + "//third_party/brotli:headers", + ] } if (pdf_enable_xfa) { sources += [ @@ -161,6 +167,7 @@ source_set("fxcodec") { "tiff/libtiff_tiff_context.cpp", "tiff/libtiff_tiff_context.h", ] + public_deps += [ "../fxge" ] deps += [ "../../third_party:tiff" ] if (pdf_enable_rust_bmp) { sources += [ @@ -217,6 +224,7 @@ source_set("fxcodec") { "codec_memory_sk_stream.cpp", "codec_memory_sk_stream.h", ] + public_deps += [ "//skia" ] } } @@ -243,6 +251,7 @@ source_set("fxcodec") { "jpeg/jpeg_common.c", "jpeg/jpeg_common.h", ] + public_deps += [ "//third_party/libjpeg_turbo:libjpeg_headers" ] deps += [ "//third_party:jpeg" ] } @@ -265,6 +274,8 @@ pdfium_unittest_source_set("unittests") { ] deps = [ ":fxcodec", + "../../testing:path_service", + "../../testing:test_support", "../../third_party:libopenjpeg2", "../fpdfapi/parser", "../fxge", diff --git a/core/fxcrt/BUILD.gn b/core/fxcrt/BUILD.gn index eee64a7f27..1930ecd07e 100644 --- a/core/fxcrt/BUILD.gn +++ b/core/fxcrt/BUILD.gn @@ -164,6 +164,7 @@ source_set("fxcrt") { public_deps = [ "//third_party/abseil-cpp:absl", "//third_party/icu:icuuc", + "//third_party/icu:icuuc_public", ] if (pdf_use_partition_alloc) { sources += [ "fx_memory_pa.cpp" ] @@ -217,10 +218,10 @@ source_set("unit_test_support") { "fake_time_test.h", ] configs += [ "../../:pdfium_strict_config" ] + public_deps = [ "//testing/gtest" ] deps = [ ":fxcrt", ":test_support", - "//testing/gtest", ] } @@ -286,6 +287,7 @@ pdfium_unittest_source_set("unittests") { deps = [ ":test_support", ":unit_test_support", + "../../testing:test_support", ] pdfium_root_dir = "../../" if (pdf_use_partition_alloc) { diff --git a/core/fxcrt/css/BUILD.gn b/core/fxcrt/css/BUILD.gn index 22bec47ac1..5a4228f0e6 100644 --- a/core/fxcrt/css/BUILD.gn +++ b/core/fxcrt/css/BUILD.gn @@ -55,8 +55,9 @@ source_set("css") { "../../../:pdfium_strict_config", "../../../:pdfium_noshorten_config", ] - deps = [ "../" ] + visibility = [ "../../../*" ] + public_deps = [ "../../fxcrt" ] } pdfium_unittest_source_set("unittests") { diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn index 3be2a18f68..92c15eda9d 100644 --- a/core/fxge/BUILD.gn +++ b/core/fxge/BUILD.gn @@ -115,8 +115,8 @@ source_set("fxge") { "../../:pdfium_strict_config", "../../:pdfium_noshorten_config", ] - deps = [ "../fxcrt" ] - public_deps = [] + public_deps = [ "../fxcrt" ] + deps = [ "//third_party/abseil-cpp:absl" ] defines = [] if (pdf_enable_freetype) { @@ -288,6 +288,8 @@ pdfium_unittest_source_set("unittests") { ] deps = [ ":fxge", + "../../testing:path_service", + "../../testing:test_support", "../fpdfapi/page", "../fpdfapi/parser", "../fxcrt:test_support", diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn index c291ae2806..8f55351069 100644 --- a/fpdfsdk/BUILD.gn +++ b/fpdfsdk/BUILD.gn @@ -65,23 +65,25 @@ source_set("fpdfsdk") { "../:pdfium_strict_config", "../:pdfium_noshorten_config", ] - deps = [ + public_deps = [ "../:pdfium_public_headers", + "../core/fpdfapi/page", + "../core/fpdfapi/parser", + "../core/fpdfdoc", + "../core/fxcrt", + "../core/fxge", + "formfiller", + "pwl", + ] + deps = [ "../constants", "../core/fdrm", "../core/fpdfapi/edit", "../core/fpdfapi/font", - "../core/fpdfapi/page", - "../core/fpdfapi/parser", "../core/fpdfapi/render", - "../core/fpdfdoc", "../core/fpdftext", "../core/fxcodec", - "../core/fxcrt", - "../core/fxge", "../fxjs", - "formfiller", - "pwl", ] allow_circular_includes_from = [ "../fxjs", @@ -117,6 +119,7 @@ pdfium_unittest_source_set("unittests") { "../core/fpdfapi/parser:unit_test_support", "../core/fpdfapi/render", "../core/fpdfdoc", + "../testing:test_support", ] pdfium_root_dir = "../" } @@ -159,6 +162,8 @@ pdfium_embeddertest_source_set("embeddertests") { "../core/fpdfapi/parser", "../core/fxcrt:test_support", "../core/fxge", + "../testing:path_service", + "../testing:test_support", ] pdfium_root_dir = "../" diff --git a/fpdfsdk/formfiller/BUILD.gn b/fpdfsdk/formfiller/BUILD.gn index 857bb5a698..4652b0f408 100644 --- a/fpdfsdk/formfiller/BUILD.gn +++ b/fpdfsdk/formfiller/BUILD.gn @@ -36,15 +36,17 @@ source_set("formfiller") { "../../:pdfium_strict_config", "../../:pdfium_noshorten_config", ] - deps = [ + public_deps = [ "../../:pdfium_public_headers", - "../../constants", - "../../core/fpdfapi/page", "../../core/fpdfdoc", "../../core/fxcrt", - "../../core/fxge", "../pwl", ] + deps = [ + "../../constants", + "../../core/fpdfapi/page", + "../../core/fxge", + ] visibility = [ "../../*" ] } diff --git a/fpdfsdk/fpdfxfa/BUILD.gn b/fpdfsdk/fpdfxfa/BUILD.gn index 1c202f1dc4..9bdba164ba 100644 --- a/fpdfsdk/fpdfxfa/BUILD.gn +++ b/fpdfsdk/fpdfxfa/BUILD.gn @@ -22,22 +22,26 @@ source_set("fpdfxfa") { "../../:pdfium_strict_config", "../../:pdfium_noshorten_config", ] - deps = [ + public_deps = [ "../../:pdfium_public_headers", - "../../constants", "../../core/fpdfapi/page", "../../core/fpdfapi/parser", - "../../core/fpdfapi/render", - "../../core/fxcodec", "../../core/fxcrt", - "../../fxbarcode", "../../fxjs", "../../fxjs:gc", + "../../xfa/fxfa", + "//v8:cppgc_headers", + ] + deps = [ + "../../constants", + "../../core/fpdfapi/render", + "../../core/fxcodec", + "../../fxbarcode", "../../xfa/fgas/font", "../../xfa/fgas/graphics", "../../xfa/fwl", - "../../xfa/fxfa", "../../xfa/fxfa/parser", + "//v8:v8_headers", ] visibility = [ "../../*" ] } @@ -53,6 +57,8 @@ pdfium_embeddertest_source_set("embeddertests") { ":fpdfxfa", "../:fpdfsdk", "../../fxjs", + "../../testing:path_service", + "../../testing:test_environments", ] pdfium_root_dir = "../../" } diff --git a/fpdfsdk/pwl/BUILD.gn b/fpdfsdk/pwl/BUILD.gn index cacff5dc32..c936766768 100644 --- a/fpdfsdk/pwl/BUILD.gn +++ b/fpdfsdk/pwl/BUILD.gn @@ -39,15 +39,17 @@ source_set("pwl") { "../../:pdfium_strict_config", "../../:pdfium_noshorten_config", ] - deps = [ + public_deps = [ "../../:pdfium_public_headers", - "../../constants", - "../../core/fpdfapi/font", - "../../core/fpdfapi/render", "../../core/fpdfdoc", "../../core/fxcrt", "../../core/fxge", ] + deps = [ + "../../constants", + "../../core/fpdfapi/font", + "../../core/fpdfapi/render", + ] visibility = [ "../../*" ] } @@ -58,13 +60,15 @@ source_set("embedder_test_support") { "cpwl_combo_box_embeddertest.h", ] configs += [ "../../:pdfium_strict_config" ] + public_deps = [ + "../../testing:embedder_test_support", + "//testing/gtest", + ] deps = [ ":pwl", "../:fpdfsdk", "../../:pdfium_public_headers", - "../../testing:embedder_test_support", "../formfiller", - "//testing/gtest", ] } diff --git a/fxbarcode/BUILD.gn b/fxbarcode/BUILD.gn index 318cf9d180..78fce1a6d9 100644 --- a/fxbarcode/BUILD.gn +++ b/fxbarcode/BUILD.gn @@ -130,11 +130,11 @@ source_set("fxbarcode") { "qrcode/BC_QRCoderVersion.cpp", "qrcode/BC_QRCoderVersion.h", ] - deps = [ + public_deps = [ "../core/fxcrt", "../core/fxge", - "../third_party:bigint", ] + deps = [ "../third_party:bigint" ] configs += [ "../:pdfium_strict_config" ] visibility = [ "../*" ] } @@ -157,6 +157,7 @@ pdfium_unittest_source_set("unittests") { deps = [ ":fxbarcode", "../core/fxge", + "../testing:test_support", ] pdfium_root_dir = "../" } diff --git a/fxjs/BUILD.gn b/fxjs/BUILD.gn index 1f6c858b66..849fa58568 100644 --- a/fxjs/BUILD.gn +++ b/fxjs/BUILD.gn @@ -106,13 +106,13 @@ source_set("fxjs") { "../core/fpdfapi/parser", "../core/fpdfapi/render", "../core/fpdfdoc", - "../core/fxge", "//v8", "//v8:v8_libplatform", ] configs += [ "//v8:external_startup_data" ] public_deps += [ "../core/fxcrt", + "../core/fxge", "//v8", ] @@ -208,8 +208,8 @@ source_set("fxjs") { "xfa/fxjse.h", "xfa/jse_define.h", ] + public_deps += [ ":gc" ] deps += [ - ":gc", "../xfa/fgas/crt", "../xfa/fgas/graphics", "../xfa/fxfa/formcalc", @@ -229,7 +229,10 @@ if (pdf_enable_v8) { "gc/heap.h", ] configs += [ "../:pdfium_strict_config" ] - deps = [ "//v8" ] + deps = [ + "//v8", + "//v8:v8_config_headers", + ] public_deps = [ "../core/fxcrt", "//v8:cppgc", @@ -253,6 +256,7 @@ if (pdf_enable_v8) { deps = [ ":fxjs", "../core/fxcrt:unit_test_support", + "//v8:v8_headers", ] pdfium_root_dir = "../" if (pdf_enable_xfa) { @@ -267,7 +271,9 @@ if (pdf_enable_v8) { ] deps += [ ":gc", + "../testing:test_environments", "../xfa/fxfa/parser", + "//v8:cppgc_headers", ] } @@ -285,6 +291,7 @@ if (pdf_enable_v8) { deps = [ ":fxjs", "../fpdfsdk", + "//v8:v8_headers", ] pdfium_root_dir = "../" if (pdf_enable_xfa) { @@ -297,6 +304,8 @@ if (pdf_enable_v8) { ] deps += [ ":gc", + "../testing:test_environments", + "../testing:test_support", "../xfa/fxfa", ] } diff --git a/testing/BUILD.gn b/testing/BUILD.gn index 5820d42228..45d768c7ce 100644 --- a/testing/BUILD.gn +++ b/testing/BUILD.gn @@ -40,12 +40,12 @@ source_set("test_support") { data = [ "resources/" ] public_deps = [ ":path_service", + "../:pdfium_public_headers", + "../core/fxcrt", "//third_party/test_fonts", ] deps = [ - "../:pdfium_public_headers", "../core/fdrm", - "../core/fxcrt", "../core/fxge", "../fpdfsdk", "png_codec", @@ -77,6 +77,7 @@ source_set("test_support") { deps += [ "//v8", "//v8:v8_libplatform", + "//v8:v8_libplatform_headers", ] configs += [ "//v8:external_startup_data" ] } @@ -131,11 +132,13 @@ source_set("test_environments") { "pdf_test_environment.cpp", "pdf_test_environment.h", ] - deps = [ + public_deps = [ ":test_support", + "//testing/gtest", + ] + deps = [ "../core/fxcrt", "../core/fxge", - "//testing/gtest", ] configs += [ "../:pdfium_strict_config", @@ -146,10 +149,12 @@ source_set("test_environments") { "v8_test_environment.cpp", "v8_test_environment.h", ] + public_deps += [ "../fxjs" ] deps += [ - "../fxjs", "//v8", + "//v8:v8_config_headers", "//v8:v8_libplatform", + "//v8:v8_libplatform_headers", ] configs += [ "//v8:external_startup_data" ] } @@ -168,7 +173,7 @@ source_set("test_environments") { source_set("unit_test_support") { testonly = true sources = [] - deps = [ "//testing/gtest" ] + deps = [] configs += [ "../:pdfium_strict_config", "../:pdfium_noshorten_config", @@ -176,27 +181,32 @@ source_set("unit_test_support") { public_deps = [ ":test_environments", ":test_support", + "//testing/gtest", ] if (is_posix) { sources += [ "temporary_file_test.cpp", "temporary_file_test.h", ] - deps += [ "../core/fxcrt" ] + public_deps += [ "../core/fxcrt" ] } if (pdf_enable_v8) { sources += [ "fxv8_unittest.cpp", "fxv8_unittest.h", ] - deps += [ "../fxjs" ] + deps += [ + "../fxjs", + "//v8:v8_headers", + ] configs += [ "//v8:external_startup_data" ] if (pdf_enable_xfa) { sources += [ "fxgc_unittest.cpp", "fxgc_unittest.h", ] - deps += [ "../fxjs:gc" ] + public_deps += [ "../fxjs:gc" ] + deps += [ "//v8:v8_libplatform_headers" ] } } } @@ -218,22 +228,23 @@ source_set("embedder_test_support") { "utils/compare_coordinates.cc", "utils/compare_coordinates.h", ] - deps = [ + public_deps = [ ":pixel_diff_utils", + ":test_environments", + ":test_support", "../:pdfium_public_headers", + "../core/fxcrt", + "//testing/gmock", + "//testing/gtest", + ] + deps = [ + ":path_service", "../core/fdrm", "../core/fxge", "../fpdfsdk", "png_codec", - "//testing/gmock", - "//testing/gtest", "//third_party/simdutf", ] - public_deps = [ - ":test_environments", - ":test_support", - "../core/fxcrt", - ] configs += [ "../:pdfium_strict_config", "../:pdfium_noshorten_config", @@ -246,6 +257,7 @@ source_set("embedder_test_support") { "js_embedder_test.cpp", "js_embedder_test.h", ] + public_deps += [ "//v8:v8_headers" ] deps += [ "../fxjs", "//v8", diff --git a/testing/fuzzers/BUILD.gn b/testing/fuzzers/BUILD.gn index 789e3dcfca..531e77b9c2 100644 --- a/testing/fuzzers/BUILD.gn +++ b/testing/fuzzers/BUILD.gn @@ -108,9 +108,10 @@ if (pdf_enable_xfa) { "xfa_process_state.h", ] configs += [ ":fuzzer_config" ] + public_deps = [ "../../fxjs:gc" ] deps = [ - "../../fxjs:gc", "//v8", + "//v8:v8_libplatform_headers", ] } } @@ -132,6 +133,7 @@ source_set("fuzzer_init_public") { "../:test_support", "../../fxjs", "//v8", + "//v8:v8_config_headers", "//v8:v8_libplatform", ] if (pdf_enable_xfa) { @@ -164,8 +166,8 @@ source_set("fuzzer_helper") { "pdfium_fuzzer_helper.h", ] configs += [ ":fuzzer_config" ] + public_deps = [ "../../:pdfium_public_headers" ] deps = [ - "../../:pdfium_public_headers", "../../core/fxcrt", "../../fpdfsdk", ] @@ -180,7 +182,7 @@ source_set("fuzzer_utils") { "pdfium_fuzzer_util.cc", "pdfium_fuzzer_util.h", ] - deps = [ "../../:pdfium_public_headers" ] + public_deps = [ "../../:pdfium_public_headers" ] include_dirs = [ "../.." ] } @@ -219,6 +221,8 @@ template("pdfium_fuzzer") { source_set(impl_name) { testonly = true + # Explicitly specifying public = [] disables implicitly public headers in sources. + public = [] sources = invoker.sources defines = [] deps = [] @@ -292,6 +296,7 @@ if (pdf_enable_v8) { "../../xfa/fgas/crt", "../../xfa/fxfa", "../../xfa/fxfa/parser", + "//v8:cppgc_headers", ] public_fuzzer = true } diff --git a/testing/pdfium_test/BUILD.gn b/testing/pdfium_test/BUILD.gn index 688c93bad9..55295b64ea 100644 --- a/testing/pdfium_test/BUILD.gn +++ b/testing/pdfium_test/BUILD.gn @@ -18,13 +18,15 @@ executable("pdfium_test") { "write.cc", "write.h", ] + public_deps = [ "../../:pdfium_public_headers" ] # Note: One should write programs that depend on ../../:pdfium. Whereas this # test program does not set a good example, and depends on PDFium internals, # as well as test support code, for convenience. deps = [ + "../:path_service", "../:test_support", - "../../:pdfium_public_headers", + "../../core/fxcrt", "../../fpdfsdk", "../png_codec", "//build/win:default_exe_manifest", @@ -44,8 +46,10 @@ executable("pdfium_test") { if (pdf_enable_v8) { deps += [ + "//v8:v8_config_headers", "//v8:v8_headers", "//v8:v8_libplatform", + "//v8:v8_libplatform_headers", ] include_dirs = [ "//v8" ] configs += [ "//v8:external_startup_data" ] diff --git a/testing/test.gni b/testing/test.gni index 6ad2c2d4ab..9b98489077 100644 --- a/testing/test.gni +++ b/testing/test.gni @@ -42,7 +42,8 @@ template("test") { "$target_out_dir/${invoker.target_name}/${invoker.target_name}" executable(_exec_target) { - # Configs will always be defined since we set_defaults in BUILDCONFIG.gn. + # Configs will always be defined since we set_defaults in + # BUILDCONFIG.gn. configs = [] data_deps = [] forward_variables_from(invoker, @@ -94,6 +95,7 @@ template("test") { if (defined(invoker.add_unwind_tables_in_apk) && invoker.add_unwind_tables_in_apk) { _unwind_table_asset_name = "${target_name}_unwind_assets" + unwind_table_asset(_unwind_table_asset_name) { testonly = true library_target = _library_target @@ -102,7 +104,8 @@ template("test") { } shared_library(_library_target) { - # Configs will always be defined since we set_defaults in BUILDCONFIG.gn. + # Configs will always be defined since we set_defaults in + # BUILDCONFIG.gn. configs = [] # Prevent list overwriting warning. configs = invoker.configs testonly = true @@ -118,6 +121,7 @@ template("test") { deps += [ "//testing/android/native_test:native_test_native_code" ] } } + unittest_apk(_apk_target) { forward_variables_from(invoker, _apk_specific_vars) shared_library = ":$_library_target" @@ -260,6 +264,9 @@ template("pdfium_unittest_source_set") { testonly = true sources = invoker.sources + + # Explicitly specifying public disables implictly public headers in sources. + public = [] configs += [ _pdfium_root_dir + ":pdfium_core_config" ] if (defined(invoker.configs)) { configs += invoker.configs @@ -279,6 +286,9 @@ template("pdfium_embeddertest_source_set") { testonly = true sources = invoker.sources + + # Explicitly specifying public disables implictly public headers in sources. + public = [] configs += [ _pdfium_root_dir + ":pdfium_core_config" ] if (defined(invoker.configs)) { configs += invoker.configs diff --git a/third_party/BUILD.gn b/third_party/BUILD.gn index 96068f14ac..64a5b598f0 100644 --- a/third_party/BUILD.gn +++ b/third_party/BUILD.gn @@ -257,7 +257,7 @@ if (pdf_use_agg) { "agg23/agg_vcgen_stroke.h", "agg23/agg_vertex_sequence.h", ] - deps = [ "../core/fxcrt" ] + public_deps = [ "../core/fxcrt" ] } } diff --git a/xfa/fde/BUILD.gn b/xfa/fde/BUILD.gn index 31d6e55fb1..c524733003 100644 --- a/xfa/fde/BUILD.gn +++ b/xfa/fde/BUILD.gn @@ -22,12 +22,12 @@ source_set("fde") { "../../:pdfium_noshorten_config", "../:xfa_warnings", ] - deps = [ + public_deps = [ "../../core/fxcrt", "../../core/fxge", - "../fgas/font", "../fgas/layout", ] + deps = [ "../fgas/font" ] visibility = [ "../../*" ] } @@ -40,6 +40,8 @@ pdfium_unittest_source_set("unittests") { ":fde", "../../core/fdrm", "../../core/fxge", + "../../testing:test_environments", + "../../testing:test_support", "../fgas/font", ] pdfium_root_dir = "../../" diff --git a/xfa/fgas/crt/BUILD.gn b/xfa/fgas/crt/BUILD.gn index 6eb8526bfc..e37b658820 100644 --- a/xfa/fgas/crt/BUILD.gn +++ b/xfa/fgas/crt/BUILD.gn @@ -21,10 +21,8 @@ source_set("crt") { "../../../:pdfium_noshorten_config", "../../:xfa_warnings", ] - deps = [ - "../../../core/fpdfapi/page", - "../../../core/fxcrt", - ] + public_deps = [ "../../../core/fxcrt" ] + deps = [ "../../../core/fpdfapi/page" ] visibility = [ "../../../*" ] } @@ -37,7 +35,9 @@ pdfium_unittest_source_set("unittests") { ":crt", "../../../core/fpdfapi/page", "../../../fxjs:gc", + "../../../testing:test_support", "../../fxfa/parser", + "//v8:cppgc_headers", ] pdfium_root_dir = "../../../" } diff --git a/xfa/fgas/font/BUILD.gn b/xfa/fgas/font/BUILD.gn index f4f8ded320..aa11572c94 100644 --- a/xfa/fgas/font/BUILD.gn +++ b/xfa/fgas/font/BUILD.gn @@ -27,13 +27,15 @@ source_set("font") { "../../../:pdfium_noshorten_config", "../../:xfa_warnings", ] + public_deps = [ + "../../../core/fxcrt", + "../../../core/fxge", + ] deps = [ "../../../constants", "../../../core/fpdfapi/font", "../../../core/fpdfapi/page", "../../../core/fpdfapi/parser", - "../../../core/fxcrt", - "../../../core/fxge", ] visibility = [ "../../../*" ] } diff --git a/xfa/fgas/graphics/BUILD.gn b/xfa/fgas/graphics/BUILD.gn index a1408c41f3..87d0357a6d 100644 --- a/xfa/fgas/graphics/BUILD.gn +++ b/xfa/fgas/graphics/BUILD.gn @@ -24,9 +24,10 @@ source_set("graphics") { "../../../:pdfium_noshorten_config", "../../:xfa_warnings", ] - deps = [ + public_deps = [ "../../../core/fxcrt", "../../../core/fxge", ] + visibility = [ "../../../*" ] } diff --git a/xfa/fgas/layout/BUILD.gn b/xfa/fgas/layout/BUILD.gn index b00430a577..caea5c78d6 100644 --- a/xfa/fgas/layout/BUILD.gn +++ b/xfa/fgas/layout/BUILD.gn @@ -32,8 +32,8 @@ source_set("layout") { "fgas_linebreak.cpp", "fgas_linebreak.h", ] + public_deps = [ "../../../core/fxcrt" ] deps = [ - "../../../core/fxcrt", "../../../core/fxcrt/css", "../../../core/fxge", "../font", diff --git a/xfa/fwl/BUILD.gn b/xfa/fwl/BUILD.gn index 15a0d2f6cd..fef87a5d7f 100644 --- a/xfa/fwl/BUILD.gn +++ b/xfa/fwl/BUILD.gn @@ -112,15 +112,16 @@ source_set("fwl") { "../../:pdfium_noshorten_config", "../:xfa_warnings", ] - deps = [ + public_deps = [ "../../core/fxcrt", "../../core/fxge", "../../fxbarcode", "../../fxjs:gc", "../fde", - "../fgas/font", "../fgas/graphics", + "//v8:cppgc_headers", ] + deps = [ "../fgas/font" ] visibility = [ "../../*" ] } diff --git a/xfa/fxfa/BUILD.gn b/xfa/fxfa/BUILD.gn index 6a862f649a..7cb4729d5e 100644 --- a/xfa/fxfa/BUILD.gn +++ b/xfa/fxfa/BUILD.gn @@ -84,24 +84,27 @@ source_set("fxfa") { "fxfa.h", "fxfa_basic.h", ] - deps = [ - "../../constants", - "../../core/fpdfapi/parser", + public_deps = [ "../../core/fpdfdoc", "../../core/fxcodec", "../../core/fxcrt", "../../core/fxcrt/css", "../../core/fxge", "../../fxbarcode", - "../../fxjs", "../../fxjs:gc", - "../fde", - "../fgas/font", - "../fgas/graphics", "../fgas/layout", "../fwl", "layout", "parser", + "//v8:cppgc_headers", + ] + deps = [ + "../../constants", + "../../core/fpdfapi/parser", + "../../fxjs", + "../fde", + "../fgas/font", + "../fgas/graphics", ] allow_circular_includes_from = [ "../../fxjs", @@ -125,6 +128,7 @@ pdfium_unittest_source_set("unittests") { deps = [ ":fxfa", "../../fxjs:gc", + "//v8:cppgc_headers", ] pdfium_root_dir = "../../" } diff --git a/xfa/fxfa/formcalc/BUILD.gn b/xfa/fxfa/formcalc/BUILD.gn index 114c730199..612a09e66f 100644 --- a/xfa/fxfa/formcalc/BUILD.gn +++ b/xfa/fxfa/formcalc/BUILD.gn @@ -23,10 +23,12 @@ source_set("formcalc") { "../../../:pdfium_noshorten_config", "../../:xfa_warnings", ] - deps = [ + public_deps = [ "../../../core/fxcrt", "../../../fxjs:gc", + "//v8:cppgc_headers", ] + visibility = [ "../../../*" ] } @@ -39,6 +41,7 @@ pdfium_unittest_source_set("unittests") { deps = [ ":formcalc", "../../../fxjs:gc", + "//v8:cppgc_headers", ] pdfium_root_dir = "../../../" } diff --git a/xfa/fxfa/layout/BUILD.gn b/xfa/fxfa/layout/BUILD.gn index 1d28f04acc..1c517ded73 100644 --- a/xfa/fxfa/layout/BUILD.gn +++ b/xfa/fxfa/layout/BUILD.gn @@ -29,12 +29,13 @@ source_set("layout") { "../../../:pdfium_noshorten_config", "../../:xfa_warnings", ] - deps = [ + public_deps = [ "../../../core/fxcrt", - "../../../fxjs", "../../../fxjs:gc", "../parser", + "//v8:cppgc_headers", ] + deps = [ "../../../fxjs" ] visibility = [ "../../../*" ] } diff --git a/xfa/fxfa/parser/BUILD.gn b/xfa/fxfa/parser/BUILD.gn index f42bd066f9..dee7872ed5 100644 --- a/xfa/fxfa/parser/BUILD.gn +++ b/xfa/fxfa/parser/BUILD.gn @@ -682,16 +682,19 @@ source_set("parser") { "../../../:pdfium_noshorten_config", "../../:xfa_warnings", ] - deps = [ - "../../../core/fxcodec", + public_deps = [ "../../../core/fxcrt", "../../../core/fxge", "../../../fxjs", "../../../fxjs:gc", - "../../fde", "../../fgas/crt", - "../../fgas/font", "../../fgas/graphics", + "//v8:cppgc_headers", + ] + deps = [ + "../../../core/fxcodec", + "../../fde", + "../../fgas/font", ] visibility = [ "../../../*" ] } @@ -713,6 +716,8 @@ pdfium_unittest_source_set("unittests") { ":parser", "../../../fxjs", "../../../fxjs:gc", + "../../../testing:test_support", + "//v8:cppgc_headers", ] pdfium_root_dir = "../../../" } From 71b984c3f64b616c5b9ea935f21fc3efad9b75bf Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 8 Oct 2026 08:42:35 -0700 Subject: [PATCH 54/72] Adjust some code that involves PDF_USE_AGG - In core/fxge, mark code as NOTREACHED() for the case when AGG is disabled at build time, yet somehow Skia is not available. - Compile FPDFViewEmbedderTest.Bug2087 only for builds that have both AGG and Skia. Otherwise the test does not make sense to run. Change-Id: If0f93635ca1a2859db4065e0c3740e4d092ac4d6 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160190 Commit-Queue: Tom Sepez Reviewed-by: Tom Sepez --- core/fxge/cfx_renderdevice.cpp | 6 ++++-- core/fxge/win32/cgdi_device_driver.cpp | 2 +- fpdfsdk/fpdf_view_embeddertest.cpp | 6 +++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp index 20cbcf2a64..5d966b4048 100644 --- a/core/fxge/cfx_renderdevice.cpp +++ b/core/fxge/cfx_renderdevice.cpp @@ -18,6 +18,7 @@ #include "core/fxcrt/check_op.h" #include "core/fxcrt/compiler_specific.h" #include "core/fxcrt/fx_safe_types.h" +#include "core/fxcrt/notreached.h" #include "core/fxcrt/ptr_util.h" #include "core/fxcrt/span.h" #include "core/fxcrt/zip.h" @@ -40,6 +41,7 @@ #if defined(PDF_USE_AGG) #include "core/fxge/agg/cfx_agg_devicedriver.h" #endif + #if defined(PDF_USE_SKIA) #include "core/fxge/skia/fx_skia_device.h" #include "third_party/skia/include/core/SkTypes.h" // nogncheck @@ -1682,7 +1684,7 @@ bool CFX_RenderDevice::AttachImpl(RetainPtr pBitmap, return AttachAggImpl(std::move(pBitmap), bRgbByteOrder, std::move(pBackdropBitmap), bGroupKnockout); #else - return false; + NOTREACHED(); #endif } @@ -1702,7 +1704,7 @@ bool CFX_RenderDevice::CreateWithBackdrop(int width, #if defined(PDF_USE_AGG) return CreateAgg(width, height, format, backdrop); #else - return false; + NOTREACHED(); #endif } diff --git a/core/fxge/win32/cgdi_device_driver.cpp b/core/fxge/win32/cgdi_device_driver.cpp index 0ac0c5cb11..18daecebf7 100644 --- a/core/fxge/win32/cgdi_device_driver.cpp +++ b/core/fxge/win32/cgdi_device_driver.cpp @@ -348,7 +348,7 @@ unsigned LineClip(float w, pdfium::agg::rect_base rect(0.0f, 0.0f, w, h); return pdfium::agg::clip_liang_barsky(x1, y1, x2, y2, rect, x, y); #else - return 0u; + NOTREACHED(); #endif } diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp index ea9ff04064..bf0f45988f 100644 --- a/fpdfsdk/fpdf_view_embeddertest.cpp +++ b/fpdfsdk/fpdf_view_embeddertest.cpp @@ -1994,12 +1994,13 @@ TEST_F(FPDFViewEmbedderTest, RenderXfaPageToSkp) { // Should always be blank, as we're not testing `FPDF_FFLRecord()` here. TestRenderPageSkp(page.get(), pdfium::kBlankPage612By792Png); } +#endif // defined(PDF_USE_SKIA) +#if defined(PDF_USE_AGG) && defined(PDF_USE_SKIA) TEST_F(FPDFViewEmbedderTest, Bug2087) { FPDF_DestroyLibrary(); std::string agg_checksum; -#if defined(PDF_USE_AGG) const FPDF_LIBRARY_CONFIG kAggConfig = { .version = 5, .m_pUserFontPaths = nullptr, @@ -2018,7 +2019,6 @@ TEST_F(FPDFViewEmbedderTest, Bug2087) { } CloseDocument(); FPDF_DestroyLibrary(); -#endif // PDF_USE_AGG std::string skia_checksum; const FPDF_LIBRARY_CONFIG kSkiaConfig = { @@ -2041,7 +2041,7 @@ TEST_F(FPDFViewEmbedderTest, Bug2087) { EmbedderTestEnvironment::GetInstance()->TearDown(); EmbedderTestEnvironment::GetInstance()->SetUp(); } -#endif // defined(PDF_USE_SKIA) +#endif // defined(PDF_USE_AGG) && defined(PDF_USE_SKIA) TEST_F(FPDFViewEmbedderTest, BadIsolatePerDocumentConfig) { FPDF_DestroyLibrary(); From e0dd7ca096b3a64bbc6b7e68ffd8f20c5fdcc24a Mon Sep 17 00:00:00 2001 From: xonaman Date: Thu, 8 Oct 2026 08:46:34 -0700 Subject: [PATCH 55/72] Dereference old-style named destinations in FPDF_GetNamedDest() FPDF_CountNamedDests() counts every key in the catalog's old-style /Dests dictionary, and FPDF_GetNamedDest() falls back to that dictionary for indices past the /Dests name tree. The fallback used the raw dictionary value, so when the value was an indirect reference, which is valid PDF, it was neither an array nor a dictionary. FPDF_GetNamedDest() then returned nullptr without reporting the name, and a document could report named destinations that it could not return by index. All other named destination lookups already dereference the value: the /Dests name tree lookups by name and by index, and the old-style lookup by name. As a result, FPDF_GetNamedDestByName() found indirect old-style destinations that FPDF_GetNamedDest() dropped. Dereference only the value of the matching key, so that the loop does not parse the objects behind the keys it walks past. Direct values are unaffected, and a dangling reference resolves to nothing, so FPDF_GetNamedDest() returns nullptr for it. Add a named_dests_old_style_indirect.pdf fixture whose old-style /Dests values are all indirect: a destination array, a destination dictionary with a /D array, and a dangling reference. The new embedder test checks that FPDF_GetNamedDest() returns the same destinations as FPDF_GetNamedDestByName() along with their names, that those destinations are for the expected pages, and that the dangling entry gives neither a destination nor a name. An alternative would be to expose GetNamedDestFromObject() from cpdf_nametree.cpp through a new CPDF_NameTree static for the old-style lookup by index. This change keeps the fix local instead. Found while working on the pdfium-native Node.js binding. Change-Id: I380f9b07dbe1bbc680e3c5ae4a21f161a1d554fa Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159090 Reviewed-by: Lei Zhang Reviewed-by: Tom Sepez Commit-Queue: Tom Sepez --- fpdfsdk/fpdf_view.cpp | 4 +- fpdfsdk/fpdf_view_embeddertest.cpp | 53 ++++++++++++++++++ .../named_dests_old_style_indirect.in | 52 +++++++++++++++++ .../named_dests_old_style_indirect.pdf | Bin 0 -> 1097 bytes 4 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 testing/resources/named_dests_old_style_indirect.in create mode 100644 testing/resources/named_dests_old_style_indirect.pdf diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp index 1c4a7026d8..93d1308c48 100644 --- a/fpdfsdk/fpdf_view.cpp +++ b/fpdfsdk/fpdf_view.cpp @@ -1437,9 +1437,9 @@ FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDF_GetNamedDest(FPDF_DOCUMENT document, ByteStringView bsName; CPDF_DictionaryLocker locker(pDest); for (const auto& it : locker) { - bsName = it.first.AsStringView(); - pDestObj = it.second; if (i == index) { + bsName = it.first.AsStringView(); + pDestObj = it.second->GetDirect(); break; } i++; diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp index bf0f45988f..6a85d9f57a 100644 --- a/fpdfsdk/fpdf_view_embeddertest.cpp +++ b/fpdfsdk/fpdf_view_embeddertest.cpp @@ -18,11 +18,13 @@ #include "fpdfsdk/cpdfsdk_helpers.h" #include "fpdfsdk/fpdf_view_c_api_test.h" #include "public/cpp/fpdf_scopers.h" +#include "public/fpdf_doc.h" #include "public/fpdfview.h" #include "testing/embedder_test.h" #include "testing/embedder_test_constants.h" #include "testing/embedder_test_environment.h" #include "testing/fx_string_testhelpers.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/utils/file_util.h" #include "testing/utils/hash.h" @@ -922,6 +924,57 @@ TEST_F(FPDFViewEmbedderTest, NamedDestsOldStyle) { GetPlatformString(reinterpret_cast(buffer))); } +TEST_F(FPDFViewEmbedderTest, NamedDestsOldStyleIndirect) { + ASSERT_TRUE(OpenDocument("named_dests_old_style_indirect.pdf")); + EXPECT_EQ(3u, FPDF_CountNamedDests(document())); + + static constexpr char kIndirectArray[] = "IndirectArray"; + static constexpr char kIndirectDangling[] = "IndirectDangling"; + static constexpr char kIndirectDict[] = "IndirectDict"; + + char buffer[512]; + static constexpr long kBufferSize = sizeof(buffer); + long size = kBufferSize; + + // The first entry is an indirect destination array for the second page. + // Looking it up by index must give the same destination as by name. + FPDF_DEST dest = FPDF_GetNamedDestByName(document(), kIndirectArray); + ASSERT_TRUE(dest); + EXPECT_EQ(1, FPDFDest_GetDestPageIndex(document(), dest)); + EXPECT_EQ(dest, FPDF_GetNamedDest(document(), 0, nullptr, &size)); + ASSERT_EQ(static_cast(sizeof(kIndirectArray) * 2), size); + ASSERT_EQ(dest, FPDF_GetNamedDest(document(), 0, buffer, &size)); + ASSERT_EQ(static_cast(sizeof(kIndirectArray) * 2), size); + EXPECT_EQ(kIndirectArray, + GetPlatformString(reinterpret_cast(buffer))); + + // The second entry is a dangling reference, so neither lookup finds a + // destination, and FPDF_GetNamedDest() does not report the name. + EXPECT_FALSE(FPDF_GetNamedDestByName(document(), kIndirectDangling)); + size = kBufferSize; + EXPECT_FALSE(FPDF_GetNamedDest(document(), 1, nullptr, &size)); + EXPECT_EQ(0, size); + static constexpr char kPattern = 'X'; + std::ranges::fill(buffer, kPattern); + size = kBufferSize; + EXPECT_FALSE(FPDF_GetNamedDest(document(), 1, buffer, &size)); + EXPECT_EQ(kBufferSize, size); // unmodified. + EXPECT_THAT(buffer, testing::Each(kPattern)); + + // The third entry is an indirect destination dictionary, whose /D array is + // for the third page. + dest = FPDF_GetNamedDestByName(document(), kIndirectDict); + ASSERT_TRUE(dest); + EXPECT_EQ(2, FPDFDest_GetDestPageIndex(document(), dest)); + size = kBufferSize; + EXPECT_EQ(dest, FPDF_GetNamedDest(document(), 2, nullptr, &size)); + ASSERT_EQ(static_cast(sizeof(kIndirectDict) * 2), size); + ASSERT_EQ(dest, FPDF_GetNamedDest(document(), 2, buffer, &size)); + ASSERT_EQ(static_cast(sizeof(kIndirectDict) * 2), size); + EXPECT_EQ(kIndirectDict, + GetPlatformString(reinterpret_cast(buffer))); +} + // The following tests pass if the document opens without crashing. TEST_F(FPDFViewEmbedderTest, Crasher113) { ASSERT_TRUE(OpenDocument("bug_113.pdf")); diff --git a/testing/resources/named_dests_old_style_indirect.in b/testing/resources/named_dests_old_style_indirect.in new file mode 100644 index 0000000000..80dcfb5239 --- /dev/null +++ b/testing/resources/named_dests_old_style_indirect.in @@ -0,0 +1,52 @@ +{{header}} +{{object 1 0}} << + /Type /Catalog + /Pages 2 0 R + /Dests 6 0 R +>> +endobj +{{object 2 0}} << + /Type /Pages + /Count 3 + /Kids [3 0 R 4 0 R 5 0 R] +>> +endobj +{{object 3 0}} << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] +>> +endobj +{{object 4 0}} << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] +>> +endobj +{{object 5 0}} << + /Type /Page + /Parent 2 0 R + /MediaBox [0 0 612 792] +>> +endobj +% Old-style top-level Dests dictionary whose values are all indirect. +% The keys are listed in sorted order, which is their index order. +% IndirectDangling intentionally references non-existent object 999. +{{object 6 0}} << + /IndirectArray 7 0 R + /IndirectDangling 999 0 R + /IndirectDict 8 0 R +>> +endobj +% Destination array for the second page. +{{object 7 0}} [4 0 R /XYZ 0 792 0] +endobj +% Destination dictionary for the third page. +{{object 8 0}} << + /D [5 0 R /Fit] +>> +endobj +{{xref}} +{{trailer}} +{{startxref}} +%%EOF diff --git a/testing/resources/named_dests_old_style_indirect.pdf b/testing/resources/named_dests_old_style_indirect.pdf new file mode 100644 index 0000000000000000000000000000000000000000..38eea82eaed22e4fc6c5e70a5b046ae28b854434 GIT binary patch literal 1097 zcmb_c!EW0y487|sc=2sX?08OMpeWEb3or~ri>`;YK@XbE#A*d8kkl^T*X*z_9QFYt z?K;lf9jk+3KZ=j!)03mC`E!Xrc$hVxr>6o~5s-88x)(mZ}KK z8tH2IURjUuEcFu|f^-N{Yfz?C4vR1r5!_S=k65=st$e_e;^3|0H|t7t?}$Ye6(|p( zLghFg_ic&7~s20Rwll&~Y0js=(EHrB1T zCSPyw2q8~EeBW91U$P^qJH}8c*Aa3j{ai~}H+F@|N`+&a?MWjMLoVXOf?1ZO8EoKy zC6vnxOph(d?E@^ysOSKj64MY%$?Zcd%U|!Cr*t<4e2auGeTM}nl}7h+|F5kLz`um% a$iAo_NMq4a_#j Date: Thu, 8 Oct 2026 08:49:33 -0700 Subject: [PATCH 56/72] Tidy conditional options in pdfium_test.cc Avoid hitting a check when initializing a library by providing the correct default based upon what is linked into the binary. Do the same for the embedder_test_environment.cc. -- No need to provide designated-initializer for 0s. Change-Id: I82745b19cc8c8e7b5b058cd2aee1338be44fb3af Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160131 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- testing/command_line_helpers.cpp | 8 ++++ testing/command_line_helpers.h | 5 +++ testing/embedder_test_environment.cpp | 26 +++++------ testing/embedder_test_environment.h | 6 ++- testing/pdfium_test/pdfium_test.cc | 64 +++++++++++++++++++++------ 5 files changed, 77 insertions(+), 32 deletions(-) diff --git a/testing/command_line_helpers.cpp b/testing/command_line_helpers.cpp index eb2e3ec695..937b5ea5f9 100644 --- a/testing/command_line_helpers.cpp +++ b/testing/command_line_helpers.cpp @@ -22,3 +22,11 @@ FPDF_RENDERER_TYPE GetDefaultRendererType() { return FPDF_RENDERERTYPE_AGG; #endif } + +FPDF_FONT_BACKEND_TYPE GetDefaultFontLibraryType() { +#if defined(PDF_ENABLE_FREETYPE) + return FPDF_FONTBACKENDTYPE_FREETYPE; +#else + return FPDF_FONTBACKENDTYPE_FONTATIONS; +#endif +} diff --git a/testing/command_line_helpers.h b/testing/command_line_helpers.h index cc134cbafb..2acd955322 100644 --- a/testing/command_line_helpers.h +++ b/testing/command_line_helpers.h @@ -20,4 +20,9 @@ bool ParseSwitchKeyValue(const std::string& arg, // based upon command line options. FPDF_RENDERER_TYPE GetDefaultRendererType(); +// Identifies the compile-time default font library to use for font rendering. +// Used as part of support to override the font library at runtime based upon +// command line options. +FPDF_FONT_BACKEND_TYPE GetDefaultFontLibraryType(); + #endif // TESTING_COMMAND_LINE_HELPERS_H_ diff --git a/testing/embedder_test_environment.cpp b/testing/embedder_test_environment.cpp index fdc711a608..650d05e8a6 100644 --- a/testing/embedder_test_environment.cpp +++ b/testing/embedder_test_environment.cpp @@ -23,7 +23,8 @@ EmbedderTestEnvironment* g_environment = nullptr; } // namespace EmbedderTestEnvironment::EmbedderTestEnvironment() - : renderer_type_(GetDefaultRendererType()) { + : renderer_type_(GetDefaultRendererType()), + font_library_type_(GetDefaultFontLibraryType()) { DCHECK(!g_environment); g_environment = this; } @@ -45,28 +46,15 @@ void EmbedderTestEnvironment::SetUp() { #ifdef PDF_ENABLE_V8 .m_pIsolate = V8TestEnvironment::GetInstance()->isolate(), - .m_v8EmbedderSlot = 0, .m_pPlatform = V8TestEnvironment::GetInstance()->platform(), -#else // PDF_ENABLE_V8 - .m_pIsolate = nullptr, - .m_v8EmbedderSlot = 0, - .m_pPlatform = nullptr, #endif // PDF_ENABLE_V8 .m_RendererType = renderer_type_, -#if defined(PDF_ENABLE_FONTATIONS) && defined(PDF_ENABLE_FREETYPE) - .m_FontLibraryType = fontations_ ? FPDF_FONTBACKENDTYPE_FONTATIONS - : FPDF_FONTBACKENDTYPE_FREETYPE, -#elif defined(PDF_ENABLE_FONTATIONS) - .m_FontLibraryType = FPDF_FONTBACKENDTYPE_FONTATIONS, -#else - .m_FontLibraryType = FPDF_FONTBACKENDTYPE_FREETYPE, -#endif + .m_FontLibraryType = font_library_type_, .m_BrotliEnabled = brotli_enabled_, }; FPDF_InitLibraryWithConfig(&config); - test_fonts_.InstallFontMapper(); } @@ -100,9 +88,15 @@ void EmbedderTestEnvironment::AddFlag(const std::string& flag) { return; } #endif // defined(PDF_USE_SKIA) +#if defined(PDF_ENABLE_FREETYPE) + if (flag == "--freetype") { + font_library_type_ = FPDF_FONTBACKENDTYPE_FREETYPE; + return; + } +#endif // defined(PDF_ENABLE_FREETYPE) #if defined(PDF_ENABLE_FONTATIONS) if (flag == "--fontations") { - fontations_ = true; + font_library_type_ = FPDF_FONTBACKENDTYPE_FONTATIONS; return; } #endif // defined(PDF_ENABLE_FONTATIONS) diff --git a/testing/embedder_test_environment.h b/testing/embedder_test_environment.h index 3ac640422e..dca8fe5d74 100644 --- a/testing/embedder_test_environment.h +++ b/testing/embedder_test_environment.h @@ -32,14 +32,16 @@ class EmbedderTestEnvironment : public testing::Environment { void AddFlags(int argc, char** argv); bool write_pngs() const { return write_pngs_; } - bool fontations() const { return fontations_; } + bool fontations() const { + return font_library_type_ == FPDF_FONTBACKENDTYPE_FONTATIONS; + } private: void AddFlag(const std::string& flag); int version_ = 6; FPDF_RENDERER_TYPE renderer_type_; - bool fontations_ = false; + FPDF_FONT_BACKEND_TYPE font_library_type_; bool write_pngs_ = false; bool brotli_enabled_ = false; TestFonts test_fonts_; diff --git a/testing/pdfium_test/pdfium_test.cc b/testing/pdfium_test/pdfium_test.cc index 20f5a7f76e..509588df58 100644 --- a/testing/pdfium_test/pdfium_test.cc +++ b/testing/pdfium_test/pdfium_test.cc @@ -124,7 +124,9 @@ namespace { enum class RendererType { kDefault, +#if defined(PDF_USE_AGG) kAgg, +#endif // defined(PDF_USE_AGG) #ifdef _WIN32 kGdi, #endif // _WIN32 @@ -133,6 +135,16 @@ enum class RendererType { #endif // defined(PDF_USE_SKIA) }; +enum class FontLibraryType { + kDefault, +#if defined(PDF_ENABLE_FREETYPE) + kFreetype, +#endif // defined(PDF_ENABLE_FREETYPE) +#if defined(PDF_ENABLE_FONTATIONS) + kFontations, +#endif // defined(PDF_ENABLE_FONTATIONS) +}; + enum class OutputFormat { kNone, kPageInfo, @@ -184,9 +196,7 @@ struct Options { bool save_thumbnails_decoded = false; bool save_thumbnails_raw = false; RendererType use_renderer_type = RendererType::kDefault; -#if defined(PDF_ENABLE_FONTATIONS) - bool use_fontations_backend = false; -#endif // defined(PDF_ENABLE_FONTATIONS) + FontLibraryType use_font_library_type = FontLibraryType::kDefault; #ifdef PDF_ENABLE_V8 bool disable_javascript = false; std::string js_flags; // Extra flags to pass to v8 init. @@ -569,17 +579,22 @@ bool ParseCommandLine(const std::vector& args, fprintf(stderr, "Duplicate --use-renderer argument\n"); return false; } +#if defined(PDF_USE_AGG) if (value == "agg") { options->use_renderer_type = RendererType::kAgg; + } +#endif // defined(PDF_USE_AGG) #ifdef _WIN32 - } else if (value == "gdi") { + if (value == "gdi") { options->use_renderer_type = RendererType::kGdi; + } #endif // _WIN32 #if defined(PDF_USE_SKIA) - } else if (value == "skia") { + if (value == "skia") { options->use_renderer_type = RendererType::kSkia; + } #endif // defined(PDF_USE_SKIA) - } else { + if (options->use_renderer_type == RendererType::kDefault) { fprintf(stderr, "Invalid --use-renderer argument\n"); return false; } @@ -587,9 +602,21 @@ bool ParseCommandLine(const std::vector& args, } else if (cur_arg == "--render-premultiplied") { options->render_premultiplied_alpha = true; #endif // defined(PDF_USE_SKIA) +#if defined(PDF_ENABLE_FREETYPE) + } else if (cur_arg == "--freetype") { + if (options->use_font_library_type != FontLibraryType::kDefault) { + fprintf(stderr, "Duplicate or conflicting --freetype argument\n"); + return false; + } + options->use_font_library_type = FontLibraryType::kFreetype; +#endif // defined(PDF_ENABLE_FONTATIONS) #if defined(PDF_ENABLE_FONTATIONS) } else if (cur_arg == "--fontations") { - options->use_fontations_backend = true; + if (options->use_font_library_type != FontLibraryType::kDefault) { + fprintf(stderr, "Duplicate or conflicting --fontations argument\n"); + return false; + } + options->use_font_library_type = FontLibraryType::kFontations; #endif // defined(PDF_ENABLE_FONTATIONS) #ifdef PDF_ENABLE_V8 } else if (cur_arg == "--disable-javascript") { @@ -2021,7 +2048,6 @@ int main(int argc, const char* argv[]) { config.m_pIsolate = nullptr; config.m_v8EmbedderSlot = 0; config.m_pPlatform = nullptr; - config.m_FontLibraryType = FPDF_FONTBACKENDTYPE_FREETYPE; #ifdef PDF_ENABLE_BROTLI config.m_BrotliEnabled = options.enable_brotli; #else @@ -2038,18 +2064,17 @@ int main(int argc, const char* argv[]) { case RendererType::kDefault: config.m_RendererType = GetDefaultRendererType(); break; - +#if defined(PDF_USE_AGG) case RendererType::kAgg: config.m_RendererType = FPDF_RENDERERTYPE_AGG; break; - +#endif // defined(PDF_USE_AGG) #ifdef _WIN32 case RendererType::kGdi: // GDI renderer uses `FPDF_RenderPage()`, rather than a renderer type. config.m_RendererType = GetDefaultRendererType(); break; #endif // _WIN32 - #if defined(PDF_USE_SKIA) case RendererType::kSkia: config.m_RendererType = FPDF_RENDERERTYPE_SKIA; @@ -2057,11 +2082,22 @@ int main(int argc, const char* argv[]) { #endif // defined(PDF_USE_SKIA) } + switch (options.use_font_library_type) { + case FontLibraryType::kDefault: + config.m_FontLibraryType = GetDefaultFontLibraryType(); + break; +#if defined(PDF_ENABLE_FREETYPE) + case FontLibraryType::kFreetype: + config.m_FontLibraryType = FPDF_FONTBACKENDTYPE_FREETYPE; + break; +#endif // defined(PDF_ENABLE_FREETYPE) #if defined(PDF_ENABLE_FONTATIONS) - if (options.use_fontations_backend) { - config.m_FontLibraryType = FPDF_FONTBACKENDTYPE_FONTATIONS; - } + case FontLibraryType::kFontations: + config.m_FontLibraryType = FPDF_FONTBACKENDTYPE_FONTATIONS; + break; #endif // defined(PDF_ENABLE_FONTATIONS) + } + #if defined(PDF_USE_SKIA) #if defined(BUILD_WITH_CHROMIUM) // Needed to support Chromium's copy of Skia, which uses a From cd522d62c55430757ce79eedbbebfbf5df18f2f6 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 8 Oct 2026 09:40:17 -0700 Subject: [PATCH 57/72] Fix various SyntaxWarnings in DEPS files As seen when running buildtools/checkdeps/checkdeps.py. Change-Id: Icc6fe0267e30706a9f899e181ec70378deddf876 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160132 Commit-Queue: Tom Sepez Reviewed-by: Tom Sepez --- core/fpdfapi/page/DEPS | 2 +- core/fxcodec/DEPS | 6 +++--- core/fxcodec/bmp/DEPS | 2 +- core/fxcodec/png/DEPS | 4 ++-- fpdfsdk/DEPS | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/core/fpdfapi/page/DEPS b/core/fpdfapi/page/DEPS index 3dc6946b70..5ef96e7e7f 100644 --- a/core/fpdfapi/page/DEPS +++ b/core/fpdfapi/page/DEPS @@ -1,5 +1,5 @@ specific_include_rules = { - 'cpdf_pageimagecache\.cpp': [ + 'cpdf_pageimagecache\\.cpp': [ '+third_party/skia/include', ], } diff --git a/core/fxcodec/DEPS b/core/fxcodec/DEPS index 143f6899cc..1e9528069f 100644 --- a/core/fxcodec/DEPS +++ b/core/fxcodec/DEPS @@ -1,11 +1,11 @@ specific_include_rules = { - "codec_memory_sk_stream\.(cpp|h)": [ + "codec_memory_sk_stream\\.(cpp|h)": [ '+third_party/skia/include', ], - "codec_memory_sk_stream_unittest\.cpp": [ + "codec_memory_sk_stream_unittest\\.cpp": [ '+third_party/skia/include', ], - "fx_codec\.cpp": [ + "fx_codec\\.cpp": [ '+third_party/libyuv/include/libyuv/planar_functions.h', ], } diff --git a/core/fxcodec/bmp/DEPS b/core/fxcodec/bmp/DEPS index b4d51b75ae..680b9ae6bc 100644 --- a/core/fxcodec/bmp/DEPS +++ b/core/fxcodec/bmp/DEPS @@ -1,5 +1,5 @@ specific_include_rules = { - "skia_bmp_context\.cpp": [ + "skia_bmp_context\\.cpp": [ '+third_party/skia/include', ], } diff --git a/core/fxcodec/png/DEPS b/core/fxcodec/png/DEPS index cbd0820fd5..0ab0e82596 100644 --- a/core/fxcodec/png/DEPS +++ b/core/fxcodec/png/DEPS @@ -1,8 +1,8 @@ specific_include_rules = { - "libpng_png_context\.cpp": [ + "libpng_png_context\\.cpp": [ '+third_party/libpng/png.h', ], - "skia_png_context\.cpp": [ + "skia_png_context\\.cpp": [ '+third_party/skia/include', ], } diff --git a/fpdfsdk/DEPS b/fpdfsdk/DEPS index 7c77a7e523..ba65b0ce92 100644 --- a/fpdfsdk/DEPS +++ b/fpdfsdk/DEPS @@ -9,7 +9,7 @@ include_rules = [ ] specific_include_rules = { - 'fpdf_view_embeddertest\.cpp': [ + 'fpdf_view_embeddertest\\.cpp': [ '+third_party/skia/include', ], } From e2a8e09798a3c1fc93236cffba5b03b122671569 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 8 Oct 2026 09:40:44 -0700 Subject: [PATCH 58/72] Restore implicit public headers in fuzzer impl targets Revert a tiny portion of https://pdfium-review.googlesource.com/c/160112 so Chromium can successfully roll PDFium and build the fuzzers. Bug: 556959580 Change-Id: Ic002f56f0eb5a9fff4d7eebaa2a398fc7d19bde2 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160250 Commit-Queue: Andy Phan Auto-Submit: Lei Zhang Reviewed-by: Andy Phan --- testing/fuzzers/BUILD.gn | 2 -- 1 file changed, 2 deletions(-) diff --git a/testing/fuzzers/BUILD.gn b/testing/fuzzers/BUILD.gn index 531e77b9c2..13c9f934da 100644 --- a/testing/fuzzers/BUILD.gn +++ b/testing/fuzzers/BUILD.gn @@ -221,8 +221,6 @@ template("pdfium_fuzzer") { source_set(impl_name) { testonly = true - # Explicitly specifying public = [] disables implicitly public headers in sources. - public = [] sources = invoker.sources defines = [] deps = [] From 29b3246851e74b3414bdb4c941753ea1bf910b76 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 8 Oct 2026 09:55:34 -0700 Subject: [PATCH 59/72] Stop using third_party/rust/cxx/v1/cxx.h Just use third_party/rust/chromium_crates_io/vendor/cxx-v1/include/cxx.h directly. Bug: 396397336 Change-Id: Icbc6afb2ff91d7c46fd54da932afa10ef6c47d0f Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159930 Reviewed-by: Tom Sepez Commit-Queue: Tom Sepez --- core/fxge/DEPS | 2 +- core/fxge/cfx_face.cpp | 2 +- core/fxge/skrifa/src/outlines.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/fxge/DEPS b/core/fxge/DEPS index 28ca37542a..81e9c22f12 100644 --- a/core/fxge/DEPS +++ b/core/fxge/DEPS @@ -1,5 +1,5 @@ include_rules = [ - '+third_party/rust/cxx', + '+third_party/rust', '+third_party/skia/include', ] diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index 4e86dc17c1..8f68046027 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp @@ -48,7 +48,7 @@ #if defined(PDF_ENABLE_FONTATIONS) #include "core/fxge/skrifa/src/main.rs.h" #include "third_party/abseil-cpp/absl/cleanup/cleanup.h" -#include "third_party/rust/cxx/v1/cxx.h" +#include "third_party/rust/chromium_crates_io/vendor/cxx-v1/include/cxx.h" #endif namespace { diff --git a/core/fxge/skrifa/src/outlines.h b/core/fxge/skrifa/src/outlines.h index dcfe923907..58f3c7b9c7 100644 --- a/core/fxge/skrifa/src/outlines.h +++ b/core/fxge/skrifa/src/outlines.h @@ -5,7 +5,7 @@ // Based on https://github.com/googlefonts/fontations/pull/1820 #pragma once -#include "third_party/rust/cxx/v1/cxx.h" +#include "third_party/rust/chromium_crates_io/vendor/cxx-v1/include/cxx.h" namespace skrifa { void run(rust::Str font_path); } From 547d3f4ba2a309f059e4d0ccc12490690c1c23c7 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Thu, 8 Oct 2026 09:57:52 -0700 Subject: [PATCH 60/72] Simplify brotli_decodeparms to test one thing and unify golden PNGs Tests should test one thing. In this case, that the Brotli filter correctly decodes an image stream using DecodeParms predictor parameters. Previously, brotli_decodeparms.in was derived from bug_1015233.in, a test originally created to demonstrate a tiling pattern bug. Consequently, it included fractional pattern matrices ([.202488 0 0 -.449947 0 791.999]), subpixel path strokes (0.24 pt), and pattern tiling. Those extraneous rendering operations made the test non-portable. AGG and Skia rasterized the patterns and subpixel strokes differently, causing 120,196 out of 120,200 image bytes to diverge. That divergence required separate brotli_decode_parms_agg.png and brotli_decode_parms_skia.png expectation files. Simplify brotli_decodeparms.in to render the 4x4 Brotli image directly to the page without patterns or strokes. The resulting output is bit-for-bit identical between AGG and Skia, allowing replacement of the backend-specific PNGs with a single brotli_decode_parms.png and switching the test to CompareBitmap(). Change-Id: I172f21b04b43494ca3e5d1906ae7a217c6c05a5b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160090 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- core/fxcodec/brotli/brotli_embeddertest.cpp | 2 +- testing/resources/brotli_decodeparms.in | 65 ++---------------- testing/resources/brotli_decodeparms.pdf | Bin 1534 -> 877 bytes .../embedder_tests/brotli_decode_parms.png | Bin 0 -> 239 bytes .../brotli_decode_parms_agg.png | Bin 697 -> 0 bytes .../brotli_decode_parms_skia.png | Bin 695 -> 0 bytes 6 files changed, 6 insertions(+), 61 deletions(-) create mode 100644 testing/resources/embedder_tests/brotli_decode_parms.png delete mode 100644 testing/resources/embedder_tests/brotli_decode_parms_agg.png delete mode 100644 testing/resources/embedder_tests/brotli_decode_parms_skia.png diff --git a/core/fxcodec/brotli/brotli_embeddertest.cpp b/core/fxcodec/brotli/brotli_embeddertest.cpp index 5fd9a62a66..473eaf09e1 100644 --- a/core/fxcodec/brotli/brotli_embeddertest.cpp +++ b/core/fxcodec/brotli/brotli_embeddertest.cpp @@ -93,7 +93,7 @@ TEST_F(BrotliEnabledEmbedderTest, BrotliDecodeParms) { ScopedFPDFBitmap bitmap = RenderLoadedPage(page.get()); ASSERT_TRUE(bitmap); - CompareBitmapWithExpectationSuffix(bitmap.get(), "brotli_decode_parms"); + CompareBitmap(bitmap.get(), "brotli_decode_parms"); } TEST_F(BrotliEnabledEmbedderTest, BrotliWithLength1Argument) { diff --git a/testing/resources/brotli_decodeparms.in b/testing/resources/brotli_decodeparms.in index 292c2ab7c0..bf72f025cd 100644 --- a/testing/resources/brotli_decodeparms.in +++ b/testing/resources/brotli_decodeparms.in @@ -15,15 +15,12 @@ endobj {{object 3 0}} << /Type /Page /Parent 2 0 R + /MediaBox [0 0 200 200] /Contents 4 0 R - /MediaBox [0 0 600 200] /Resources << /ProcSet [/PDF /ImageC] - /ColorSpace << - /C1 [/Pattern] - >> - /Pattern << - /P1 5 0 R + /XObject << + /Im1 5 0 R >> >> >> @@ -34,65 +31,13 @@ endobj >> stream q -0.24 0 0 0.24 0 0 cm -/C1 cs -/P1 scn -888 400 108 60 re -f* -0 0 0 rg -888 460 m -888 400 l -S -/C1 cs -/P1 scn -1536 400 108 60 re -f* -0 0 0 rg -1536 460 m -1536 400 l -S -/C1 cs -/P1 scn -2184 400 108 60 re -f* -0 0 0 rg -2184 460 m -2184 400 l -S +200 0 0 200 0 0 cm +/Im1 Do Q endstream endobj {{object 5 0}} << - /Type /Pattern - /PaintType 1 - /PatternType 1 - /TilingType 1 - /BBox [0 0 128 32] - /Matrix [.202488 0 0 -.449947 0 791.999] - /Resources << - /ProcSet [/PDF /ImageC] - /XObject << - /R17 6 0 R - >> - >> - /XStep 128 - /YStep 32 - {{streamlen}} ->> -stream -0.24 0 0 0.24 0 0 cm -q -0 134 534 -134 re -W n -q 533.333 0 0 -133.333 0 133.333 cm -/R17 Do -Q -Q -endstream -endobj - -{{object 6 0}} << /Type /XObject /Subtype /Image /Width 4 diff --git a/testing/resources/brotli_decodeparms.pdf b/testing/resources/brotli_decodeparms.pdf index 23c805d99ef13cb78eb305e323a7cf372715fa7a..c755be06dbbdfc29e7b8abc0880d088803394041 100644 GIT binary patch delta 171 zcmeyz{g!RQMh)N8l*~k@{0fC=0|f&GBLgsw|HJNFPi;h)&Ms()Y|YRB*|kT*9QeS&>DAkH1||lElXtReOPWE9Oe`v?C`wJ^GP5+`QdM>JcjE#8uYxPP literal 1534 zcmbVM&2G~`5WeqI%z+$0s_pe(Y^kb55(*V92}wl@r3lyArd!$GbiF}^1JA;NCqz5| zGi%3*(y9j>#hU&0oAJ!-H`|+x4)?gzXT4v4e*a}0JWyA+u)og$+|%z%0q!s}S)mpL zOtOWj!AH`R9UL%G&5_I)0lQw7NzdK z%yWF=;cso^C8IR*nz{IeIYj!9A8lXBXM*BYYEZJN_4uWfN716di1S|znR8{kwHvRZ7` zgH90KPayEE9!@f&CF;cSJwL=AQp@(7Fig|1k7hsRPMW6wA)WK_)vd_QmKLVG4>87^ zTCuFffPy-o8LobRNZ{JBk@hEb9>WkrKdrqVS8G{89R zxltN;gfj;AunuK`^NEA{ayC3VN}?tpxC5hbfhy|*_XJ`MNdar#+A zU-Ge2K6`ik(_U{oBE8q*8oS?TUiUy8ML`7D&|#RE-Gyp{#pweKPvrp?#5nu(Z289F v17Ge1sMj^m=u8$^esgC}mBQP$Rh~POKLn<0FPKaln?DcynDu(E#)s@52~mEG diff --git a/testing/resources/embedder_tests/brotli_decode_parms.png b/testing/resources/embedder_tests/brotli_decode_parms.png new file mode 100644 index 0000000000000000000000000000000000000000..f3656047b3c46c8ac2757462ef327851a83a3869 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5m8A!&LZC(qc3<7*YTtVVSCm2#rFibmP#BjpM z=!8+q38QHzQW#F87@bH-Igv8$#59Hz(~M3`OF1!Z+6ghoe2@`Uo-U3d6}R5rFyv)W z5MXhfm%!kE!d--GpR&V=nB7Oeh^t257tgXZ;9y~DbWjk0QBTxW+`??i;e3ef3EL%= r?+}W>f)m&$&WQYY#}Q5V`vg|5Smq5&nNCasx`M&e)z4*}Q$iB}*;z+V literal 0 HcmV?d00001 diff --git a/testing/resources/embedder_tests/brotli_decode_parms_agg.png b/testing/resources/embedder_tests/brotli_decode_parms_agg.png deleted file mode 100644 index c87b9aac623d6be213fd51e937cc7b79b106b4e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 zcmeAS@N?(olHy`uVBq!ia0y~yV2S{;PjD~;NoL3V79dp};1lA?z#zrI;KIP*!@#fx zD9>PYf+6Ju!?Y7@3{t!dQi2RF!VEql3{naVO-c+dDh!iV8K$W*_-He%(P!9e#BjpM z=!8+q38QHzj2T=k8GOPR)}%0;NHIE*l5!$t+KEPnHPaYQOfxz$E#<_tX(#5+ox6Pb z@*6j9+_`h-|Ns9da}CciFfjh~ba4!+xb^ntZoVc1iH1NfrRhh`x+gsNd;g@%T;CWG zpOnIeqZ76?7PCG2al2+4Z<}57*Qe7M5*2k?SPwZxaB#P@ZV(XT;06i^hyeu@bbta5 zK=H&zp!gvsIx2i~C$T#|Ysd7ao| k!4)nXr-d+LW#TS=%Zbv{SN8nh2~3L&p00i_>zopr0OKwL00000 diff --git a/testing/resources/embedder_tests/brotli_decode_parms_skia.png b/testing/resources/embedder_tests/brotli_decode_parms_skia.png deleted file mode 100644 index 0a4705ba31f46f2f399e10b1f230eee9fe62946e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmeAS@N?(olHy`uVBq!ia0y~yV2S{;PjD~;NoL3V79dp};1lA?z#z%M;KIP*$H1^2 zD9>PYf+6Ju!?Y7@43azyl7b8_!VHqa41Nj>jYNHIE*l5!$t+KFa{_0t$mOfxz$E#<_tX(#5)nX_WW zitE>}-??+=|Ns9pT>sTEFfe}iba4!+xb^m?d!Cb_NZUnsUKXZ>tzuqIcmH!ueDiU( zq~y%vun(_a&A$7J&p*JD@sLvl2X{;B1_3b+?nFf$0WqL}f(}r?0Vtl>2oyiW1Qc&! zrK3WDu*!A!yI-hBxP4amzHNQv+iiC)=RL06mFwD8I`5C$?gaVV<~z54&Ayepb9t=W z?ULIqsyd0B-Vuj{!Wt9T{$KR}fru Date: Fri, 9 Oct 2026 11:52:46 -0700 Subject: [PATCH 61/72] Remove group_knockout argument from device class constructors. First step towards simplifying the number of different forms of device class constructors. Group knockout is fundamentally a piece of rendering state - it only matters when blending a new primitive onto the canvas. Pass as an argument when needed. Change-Id: I0e187f79d1f975ece739c0ba788c89dc07e04e1d Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160290 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang Commit-Queue: Tom Sepez --- core/fpdfapi/render/cpdf_rendertiling.cpp | 4 +- core/fxge/agg/cfx_agg_devicedriver.cpp | 17 +++--- core/fxge/agg/cfx_agg_devicedriver.h | 5 +- core/fxge/cfx_renderdevice.cpp | 57 +++++++------------ core/fxge/cfx_renderdevice.h | 24 ++++---- core/fxge/renderdevicedriver_iface.cpp | 2 - core/fxge/renderdevicedriver_iface.h | 2 +- core/fxge/skia/fx_skia_device.cpp | 33 ++++------- core/fxge/skia/fx_skia_device.h | 11 ++-- .../fxge/skia/fx_skia_device_embeddertest.cpp | 4 +- core/fxge/win32/cgdi_device_driver.cpp | 1 + core/fxge/win32/cgdi_device_driver.h | 1 + core/fxge/win32/cps_printer_driver.cpp | 1 + core/fxge/win32/cps_printer_driver.h | 1 + core/fxge/win32/ctext_only_printer_driver.cpp | 1 + core/fxge/win32/ctext_only_printer_driver.h | 1 + 16 files changed, 69 insertions(+), 96 deletions(-) diff --git a/core/fpdfapi/render/cpdf_rendertiling.cpp b/core/fpdfapi/render/cpdf_rendertiling.cpp index 77027354b9..e9226b37c0 100644 --- a/core/fpdfapi/render/cpdf_rendertiling.cpp +++ b/core/fpdfapi/render/cpdf_rendertiling.cpp @@ -54,11 +54,11 @@ RetainPtr CPDF_RenderTiling::DrawPatternBitmap( return nullptr; } std::unique_ptr bitmap_device = - CFX_RenderDevice::CreateForBitmapWithBackdropAndGroupKnockout( - pBitmap, /*backdrop_bitmap=*/nullptr, /*group_knockout=*/true); + CFX_RenderDevice::CreateForBitmap(pBitmap); if (!bitmap_device) { return nullptr; } + bitmap_device->SetGroupKnockout(true); CFX_FloatRect cell_bbox = pPattern->pattern_to_form().TransformRect(pPattern->bbox()); cell_bbox = mtObject2Device.TransformRect(cell_bbox); diff --git a/core/fxge/agg/cfx_agg_devicedriver.cpp b/core/fxge/agg/cfx_agg_devicedriver.cpp index 24351a51ad..ebceb921b5 100644 --- a/core/fxge/agg/cfx_agg_devicedriver.cpp +++ b/core/fxge/agg/cfx_agg_devicedriver.cpp @@ -986,11 +986,9 @@ agg::path_storage BuildAggPath(const CFX_Path& path, CFX_AggDeviceDriver::CFX_AggDeviceDriver( RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout) + RetainPtr pBackdropBitmap) : bitmap_(std::move(pBitmap)), rgb_byte_order_(bRgbByteOrder), - group_knockout_(bGroupKnockout), backdrop_bitmap_(std::move(pBackdropBitmap)) { CHECK(bitmap_); CHECK_NE(bitmap_->GetFormat(), FXDIB_Format::k1bppMask); @@ -1193,6 +1191,7 @@ bool CFX_AggDeviceDriver::DrawPath(const CFX_Path& path, const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) { if (bitmap_->GetBuffer().empty()) { return true; @@ -1223,7 +1222,7 @@ bool CFX_AggDeviceDriver::DrawPath(const CFX_Path& path, RasterizeStroke(&rasterizer, &path_data, nullptr, pGraphState, 1, fill_options.stroke_text_mode); RenderRasterizer(rasterizer, stroke_color, fill_options.full_cover, - group_knockout_); + group_knockout); return true; } CFX_Matrix matrix1; @@ -1245,7 +1244,7 @@ bool CFX_AggDeviceDriver::DrawPath(const CFX_Path& path, RasterizeStroke(&rasterizer, &path_data, &matrix2, pGraphState, matrix1.a, fill_options.stroke_text_mode); RenderRasterizer(rasterizer, stroke_color, fill_options.full_cover, - group_knockout_); + group_knockout); return true; } @@ -1415,14 +1414,12 @@ bool CFX_AggDeviceDriver::ContinueDIBits( bool CFX_RenderDevice::AttachAggImpl(RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout) { + RetainPtr pBackdropBitmap) { // Unlike the Skia version, all callers pass in a non-null `pBitmap`. CHECK(pBitmap); SetBitmap(pBitmap); SetDeviceDriver(std::make_unique( - std::move(pBitmap), bRgbByteOrder, std::move(pBackdropBitmap), - bGroupKnockout)); + std::move(pBitmap), bRgbByteOrder, std::move(pBackdropBitmap))); return true; } @@ -1437,6 +1434,6 @@ bool CFX_RenderDevice::CreateAgg(int width, SetBitmap(pBitmap); SetDeviceDriver(std::make_unique( - std::move(pBitmap), false, std::move(pBackdropBitmap), false)); + std::move(pBitmap), false, std::move(pBackdropBitmap))); return true; } diff --git a/core/fxge/agg/cfx_agg_devicedriver.h b/core/fxge/agg/cfx_agg_devicedriver.h index 25256ba899..deb2581679 100644 --- a/core/fxge/agg/cfx_agg_devicedriver.h +++ b/core/fxge/agg/cfx_agg_devicedriver.h @@ -34,8 +34,7 @@ class CFX_AggDeviceDriver final : public RenderDeviceDriverIface { public: CFX_AggDeviceDriver(RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout); + RetainPtr pBackdropBitmap); ~CFX_AggDeviceDriver() override; void InitPlatform(); @@ -66,6 +65,7 @@ class CFX_AggDeviceDriver final : public RenderDeviceDriverIface { const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) override; bool FillRect(const FX_RECT& rect, uint32_t fill_color) override; FX_RECT GetClipBox() const override; @@ -122,7 +122,6 @@ class CFX_AggDeviceDriver final : public RenderDeviceDriverIface { #endif CFX_FillRenderOptions fill_options_; const bool rgb_byte_order_; - const bool group_knockout_; RetainPtr backdrop_bitmap_; }; diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp index 5d966b4048..13178defdf 100644 --- a/core/fxge/cfx_renderdevice.cpp +++ b/core/fxge/cfx_renderdevice.cpp @@ -809,26 +809,16 @@ bool CFX_RenderDevice::DrawPath(const CFX_Path& path, #if defined(PDF_USE_SKIA) if (render_cap_fillstroke_path_) { const bool using_skia = CFX_GEModule::IsSkiaRenderer(); - if (using_skia) { - device_driver_->SetGroupKnockout(true); - } - bool draw_fillstroke_path_result = - device_driver_->DrawPath(path, pObject2Device, pGraphState, - fill_color, stroke_color, fill_options); - - if (using_skia) { - // Restore the group knockout status for `device_driver_` after - // finishing painting a fill-and-stroke path. - device_driver_->SetGroupKnockout(false); - } - return draw_fillstroke_path_result; + return device_driver_->DrawPath( + path, pObject2Device, pGraphState, fill_color, stroke_color, + using_skia || group_knockout_, fill_options); } #endif // defined(PDF_USE_SKIA) return DrawFillStrokePath(path, pObject2Device, pGraphState, fill_color, stroke_color, fill_options); } return device_driver_->DrawPath(path, pObject2Device, pGraphState, fill_color, - stroke_color, fill_options); + stroke_color, group_knockout_, fill_options); } // This can be removed once PDFium entirely relies on Skia @@ -873,19 +863,19 @@ bool CFX_RenderDevice::DrawFillStrokePath( backdrop->Copy(bitmap); } std::unique_ptr bitmap_device = - CFX_RenderDevice::CreateForBitmapWithBackdropAndGroupKnockout( - bitmap, std::move(backdrop), /*group_knockout=*/true); + CFX_RenderDevice::CreateForBitmapWithBackdrop(bitmap, + std::move(backdrop)); if (!bitmap_device) { return false; } - CFX_Matrix matrix; if (pObject2Device) { matrix = *pObject2Device; } matrix.Translate(-rect.left, -rect.top); if (!bitmap_device->GetDeviceDriver()->DrawPath( - path, &matrix, pGraphState, fill_color, stroke_color, fill_options)) { + path, &matrix, pGraphState, fill_color, stroke_color, + /*group_knockout=*/true, fill_options)) { return false; } FX_RECT src_rect(0, 0, rect.Width(), rect.Height()); @@ -940,7 +930,7 @@ bool CFX_RenderDevice::DrawCosmeticLine( path.AppendPoint(ptMoveTo, CFX_Path::Point::Type::kMove); path.AppendPoint(ptLineTo, CFX_Path::Point::Type::kLine); return device_driver_->DrawPath(path, nullptr, &graph_state, 0, color, - fill_options); + group_knockout_, fill_options); } void CFX_RenderDevice::DrawZeroAreaPath( @@ -980,7 +970,7 @@ void CFX_RenderDevice::DrawZeroAreaPath( path_options.aliased_path = aliased_path; device_driver_->DrawPath(new_path, new_matrix, &graph_state, 0, stroke_color, - path_options); + group_knockout_, path_options); } bool CFX_RenderDevice::GetDIBits(RetainPtr bitmap, @@ -1659,30 +1649,27 @@ bool CFX_RenderDevice::Attach(RetainPtr pBitmap) { bool CFX_RenderDevice::AttachWithRgbByteOrder(RetainPtr pBitmap, bool bRgbByteOrder) { - return AttachImpl(std::move(pBitmap), bRgbByteOrder, nullptr, false); + return AttachImpl(std::move(pBitmap), bRgbByteOrder, nullptr); } -bool CFX_RenderDevice::AttachWithBackdropAndGroupKnockout( +bool CFX_RenderDevice::AttachWithBackdrop( RetainPtr pBitmap, - RetainPtr pBackdropBitmap, - bool bGroupKnockout) { - return AttachImpl(std::move(pBitmap), false, std::move(pBackdropBitmap), - bGroupKnockout); + RetainPtr pBackdropBitmap) { + return AttachImpl(std::move(pBitmap), false, std::move(pBackdropBitmap)); } bool CFX_RenderDevice::AttachImpl(RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout) { + RetainPtr pBackdropBitmap) { #if defined(PDF_USE_SKIA) if (CFX_GEModule::IsSkiaRenderer()) { return AttachSkiaImpl(std::move(pBitmap), bRgbByteOrder, - std::move(pBackdropBitmap), bGroupKnockout); + std::move(pBackdropBitmap)); } #endif #if defined(PDF_USE_AGG) return AttachAggImpl(std::move(pBitmap), bRgbByteOrder, - std::move(pBackdropBitmap), bGroupKnockout); + std::move(pBackdropBitmap)); #else NOTREACHED(); #endif @@ -1741,15 +1728,13 @@ std::unique_ptr CFX_RenderDevice::CreateForBitmap( } // static -std::unique_ptr -CFX_RenderDevice::CreateForBitmapWithBackdropAndGroupKnockout( +std::unique_ptr CFX_RenderDevice::CreateForBitmapWithBackdrop( RetainPtr bitmap, - RetainPtr backdrop_bitmap, - bool group_knockout) { + RetainPtr backdrop_bitmap) { // Private ctor. auto device = pdfium::WrapUnique(new CFX_RenderDevice()); - if (!device->AttachWithBackdropAndGroupKnockout( - std::move(bitmap), std::move(backdrop_bitmap), group_knockout)) { + if (!device->AttachWithBackdrop(std::move(bitmap), + std::move(backdrop_bitmap))) { return nullptr; } return device; diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h index 4114b98840..62fd2b6686 100644 --- a/core/fxge/cfx_renderdevice.h +++ b/core/fxge/cfx_renderdevice.h @@ -58,11 +58,9 @@ class CFX_RenderDevice final { RetainPtr bitmap, bool rgb_byte_order = false); - static std::unique_ptr - CreateForBitmapWithBackdropAndGroupKnockout( + static std::unique_ptr CreateForBitmapWithBackdrop( RetainPtr bitmap, - RetainPtr backdrop_bitmap, - bool group_knockout); + RetainPtr backdrop_bitmap); static std::unique_ptr CreateForNewBitmap(int width, int height, FXDIB_Format format); @@ -238,6 +236,9 @@ class CFX_RenderDevice final { // See RenderDeviceDriverIface methods of the same name. bool MultiplyAlpha(float alpha); bool MultiplyAlphaMask(RetainPtr mask); + void SetGroupKnockout(bool group_knockout) { + group_knockout_ = group_knockout; + } #if defined(PDF_USE_SKIA) bool DrawShading(const CPDF_ShadingPattern& pattern, @@ -262,10 +263,9 @@ class CFX_RenderDevice final { [[nodiscard]] bool Attach(RetainPtr pBitmap); [[nodiscard]] bool AttachWithRgbByteOrder(RetainPtr pBitmap, bool bRgbByteOrder); - [[nodiscard]] bool AttachWithBackdropAndGroupKnockout( + [[nodiscard]] bool AttachWithBackdrop( RetainPtr pBitmap, - RetainPtr pBackdropBitmap, - bool bGroupKnockout); + RetainPtr pBackdropBitmap); #if defined(PDF_USE_SKIA) [[nodiscard]] bool AttachCanvas(SkCanvas& canvas); #endif @@ -304,15 +304,13 @@ class CFX_RenderDevice final { bool AttachImpl(RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout); + RetainPtr pBackdropBitmap); #if defined(PDF_USE_AGG) // Implemented in agg/cfx_agg_devicedriver.cpp bool AttachAggImpl(RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout); + RetainPtr pBackdropBitmap); // Implemented in agg/cfx_agg_devicedriver.cpp bool CreateAgg(int width, @@ -325,8 +323,7 @@ class CFX_RenderDevice final { // Implemented in skia/fx_skia_device.cpp bool AttachSkiaImpl(RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout); + RetainPtr pBackdropBitmap); // Implemented in skia/fx_skia_device.cpp bool CreateSkia(int width, @@ -350,6 +347,7 @@ class CFX_RenderDevice final { bool render_cap_shading_ = false; bool render_cap_premultiplied_alpha_ = false; #endif + bool group_knockout_ = false; DeviceType device_type_ = DeviceType::kDisplay; FX_RECT clip_box_; std::unique_ptr device_driver_; diff --git a/core/fxge/renderdevicedriver_iface.cpp b/core/fxge/renderdevicedriver_iface.cpp index f3ecba417f..f9523853b1 100644 --- a/core/fxge/renderdevicedriver_iface.cpp +++ b/core/fxge/renderdevicedriver_iface.cpp @@ -129,8 +129,6 @@ bool RenderDeviceDriverIface::SetBitsWithMask( return false; } -void RenderDeviceDriverIface::SetGroupKnockout(bool group_knockout) {} - void RenderDeviceDriverIface::SyncInternalBitmaps() {} #endif // defined(PDF_USE_SKIA) diff --git a/core/fxge/renderdevicedriver_iface.h b/core/fxge/renderdevicedriver_iface.h index 4c876a6ad0..df0738362f 100644 --- a/core/fxge/renderdevicedriver_iface.h +++ b/core/fxge/renderdevicedriver_iface.h @@ -99,6 +99,7 @@ class RenderDeviceDriverIface { const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) = 0; virtual bool FillRect(const FX_RECT& rect, uint32_t fill_color); virtual bool DrawCosmeticLine(const CFX_PointF& ptMoveTo, @@ -152,7 +153,6 @@ class RenderDeviceDriverIface { int top, float alpha, BlendMode blend_type); - virtual void SetGroupKnockout(bool group_knockout); // For `CFX_SkiaDeviceDriver` only: // Syncs the current rendering result from the internal buffer to the output diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp index 28b16c53fa..02539d7624 100644 --- a/core/fxge/skia/fx_skia_device.cpp +++ b/core/fxge/skia/fx_skia_device.cpp @@ -664,11 +664,9 @@ SkFont SkFontFromCFXFont(const CFX_Font* cfx_font, std::unique_ptr CFX_SkiaDeviceDriver::Create( RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout) { - auto driver = pdfium::WrapUnique( - new CFX_SkiaDeviceDriver(std::move(pBitmap), bRgbByteOrder, - std::move(pBackdropBitmap), bGroupKnockout)); + RetainPtr pBackdropBitmap) { + auto driver = pdfium::WrapUnique(new CFX_SkiaDeviceDriver( + std::move(pBitmap), bRgbByteOrder, std::move(pBackdropBitmap))); if (!driver->canvas_) { return nullptr; } @@ -690,12 +688,10 @@ std::unique_ptr CFX_SkiaDeviceDriver::Create( CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver( RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout) + RetainPtr pBackdropBitmap) : bitmap_(std::move(pBitmap)), backdrop_bitmap_(pBackdropBitmap), - rgb_byte_order_(bRgbByteOrder), - group_knockout_(bGroupKnockout) { + rgb_byte_order_(bRgbByteOrder) { SkColorType color_type; const int bpp = bitmap_->GetBPP(); SkAlphaType alpha_type = kPremul_SkAlphaType; @@ -745,7 +741,7 @@ CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver( } CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(SkCanvas& canvas) - : canvas_(&canvas), rgb_byte_order_(false), group_knockout_(false) { + : canvas_(&canvas), rgb_byte_order_(false) { int width = canvas_->imageInfo().width(); int height = canvas_->imageInfo().height(); DCHECK_EQ(kUnknown_SkColorType, canvas_->imageInfo().colorType()); @@ -1142,6 +1138,7 @@ bool CFX_SkiaDeviceDriver::DrawPath(const CFX_Path& cfx_path, const CFX_GraphStateData* stroke_options, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) { fill_options_ = fill_options; @@ -1179,7 +1176,7 @@ bool CFX_SkiaDeviceDriver::DrawPath(const CFX_Path& cfx_path, // See section 11.4.6 of in ISO 32000-1:2008: // "At any given point, only the topmost object enclosing the point shall // contribute to the result colour and opacity of the group as a whole" - if (stroke_alpha && group_knockout_) { + if (stroke_alpha && group_knockout) { // Draw the knockout group path on a separate layer so blend modes can be // adjusted. When restore() is called path_paint is used to composite the // layer. @@ -1601,10 +1598,6 @@ bool CFX_SkiaDeviceDriver::SetBitsWithMask(RetainPtr bitmap, blend_type); } -void CFX_SkiaDeviceDriver::SetGroupKnockout(bool group_knockout) { - group_knockout_ = group_knockout; -} - void CFX_SkiaDeviceDriver::SyncInternalBitmaps() { if (!original_bitmap_) { return; @@ -1689,17 +1682,15 @@ CFX_SkiaDeviceDriver::CharDetail::~CharDetail() = default; bool CFX_RenderDevice::AttachSkiaImpl(RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout) { + RetainPtr pBackdropBitmap) { // FPDF_FFLDrawSkia() ends up calling this method with a deliberately null // `pBitmap`. if (!pBitmap) { return false; } SetBitmap(pBitmap); - auto driver = - CFX_SkiaDeviceDriver::Create(std::move(pBitmap), bRgbByteOrder, - std::move(pBackdropBitmap), bGroupKnockout); + auto driver = CFX_SkiaDeviceDriver::Create(std::move(pBitmap), bRgbByteOrder, + std::move(pBackdropBitmap)); if (!driver) { return false; } @@ -1728,7 +1719,7 @@ bool CFX_RenderDevice::CreateSkia(int width, SetBitmap(pBitmap); auto driver = CFX_SkiaDeviceDriver::Create(std::move(pBitmap), false, - std::move(pBackdropBitmap), false); + std::move(pBackdropBitmap)); if (!driver) { return false; } diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h index 05921028f7..e29f76876d 100644 --- a/core/fxge/skia/fx_skia_device.h +++ b/core/fxge/skia/fx_skia_device.h @@ -42,8 +42,7 @@ class CFX_SkiaDeviceDriver final : public RenderDeviceDriverIface { static std::unique_ptr Create( RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout); + RetainPtr pBackdropBitmap); static std::unique_ptr Create(SkCanvas& canvas); ~CFX_SkiaDeviceDriver() override; @@ -75,6 +74,7 @@ class CFX_SkiaDeviceDriver final : public RenderDeviceDriverIface { const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) override; bool FillRect(const FX_RECT& rect, uint32_t fill_color) override; FX_RECT GetClipBox() const override; @@ -94,7 +94,6 @@ class CFX_SkiaDeviceDriver final : public RenderDeviceDriverIface { int dest_top, float alpha, BlendMode blend_type) override; - void SetGroupKnockout(bool group_knockout) override; void SyncInternalBitmaps() override; bool StretchDIBits(RetainPtr bitmap, uint32_t color, @@ -171,8 +170,7 @@ class CFX_SkiaDeviceDriver final : public RenderDeviceDriverIface { // Use the public creation methods instead. CFX_SkiaDeviceDriver(RetainPtr pBitmap, bool bRgbByteOrder, - RetainPtr pBackdropBitmap, - bool bGroupKnockout); + RetainPtr pBackdropBitmap); explicit CFX_SkiaDeviceDriver(SkCanvas& canvas); bool TryDrawText(pdfium::span char_pos, @@ -213,9 +211,8 @@ class CFX_SkiaDeviceDriver final : public RenderDeviceDriverIface { UnownedPtr canvas_; CFX_FillRenderOptions fill_options_; const bool rgb_byte_order_; - bool group_knockout_; - CharDetail char_details_; + // accumulator for txt rotate/scale/translate DataVector rsxform_; }; diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp index c159df3c2d..26c8a9d272 100644 --- a/core/fxge/skia/fx_skia_device_embeddertest.cpp +++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp @@ -95,6 +95,7 @@ void CommonTest(CFX_SkiaDeviceDriver* driver, const State& state) { } if (state.graphic_ == State::Graphic::kPath) { driver->DrawPath(path1, &matrix, &graphState, 0xFF112233, 0, + /*group_knockout=*/false, CFX_FillRenderOptions::WindingOptions()); } else if (state.graphic_ == State::Graphic::kText) { driver->DrawDeviceText(pdfium::span_from_ref(charPos), &font, matrix, @@ -121,6 +122,7 @@ void CommonTest(CFX_SkiaDeviceDriver* driver, const State& state) { } if (state.graphic_ == State::Graphic::kPath) { driver->DrawPath(path2, &matrix2, &graphState, 0xFF112233, 0, + /*group_knockout=*/false, CFX_FillRenderOptions::WindingOptions()); } else if (state.graphic_ == State::Graphic::kText) { driver->DrawDeviceText(pdfium::span_from_ref(charPos), &font, matrix2, @@ -162,7 +164,7 @@ void Harness(void (*Test)(CFX_SkiaDeviceDriver*, const State&), ASSERT_TRUE( FPDFBitmap_FillRect(bitmap.get(), 0, 0, kWidth, kHeight, 0x00000000)); RetainPtr pBitmap(CFXDIBitmapFromFPDFBitmap(bitmap.get())); - auto driver = CFX_SkiaDeviceDriver::Create(pBitmap, false, nullptr, false); + auto driver = CFX_SkiaDeviceDriver::Create(pBitmap, false, nullptr); ASSERT_TRUE(driver); (*Test)(driver.get(), state); uint32_t pixel = pBitmap->GetPixelForTesting(0, 0); diff --git a/core/fxge/win32/cgdi_device_driver.cpp b/core/fxge/win32/cgdi_device_driver.cpp index 18daecebf7..b959186e89 100644 --- a/core/fxge/win32/cgdi_device_driver.cpp +++ b/core/fxge/win32/cgdi_device_driver.cpp @@ -623,6 +623,7 @@ bool CGdiDeviceDriver::DrawPath(const CFX_Path& path, const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) { auto* pPlatform = static_cast(CFX_GEModule::Get()->GetPlatform()); diff --git a/core/fxge/win32/cgdi_device_driver.h b/core/fxge/win32/cgdi_device_driver.h index e350333ceb..75bb021401 100644 --- a/core/fxge/win32/cgdi_device_driver.h +++ b/core/fxge/win32/cgdi_device_driver.h @@ -43,6 +43,7 @@ class CGdiDeviceDriver : public RenderDeviceDriverIface { const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) override; bool FillRect(const FX_RECT& rect, uint32_t fill_color) override; bool DrawCosmeticLine(const CFX_PointF& ptMoveTo, diff --git a/core/fxge/win32/cps_printer_driver.cpp b/core/fxge/win32/cps_printer_driver.cpp index cb83206349..625dd79e6b 100644 --- a/core/fxge/win32/cps_printer_driver.cpp +++ b/core/fxge/win32/cps_printer_driver.cpp @@ -149,6 +149,7 @@ bool CPSPrinterDriver::DrawPath(const CFX_Path& path, const CFX_GraphStateData* pGraphState, FX_ARGB fill_color, FX_ARGB stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) { return psrenderer_.DrawPath(path, pObject2Device, pGraphState, fill_color, stroke_color, fill_options); diff --git a/core/fxge/win32/cps_printer_driver.h b/core/fxge/win32/cps_printer_driver.h index 85fbfb56fb..565a71f75e 100644 --- a/core/fxge/win32/cps_printer_driver.h +++ b/core/fxge/win32/cps_printer_driver.h @@ -47,6 +47,7 @@ class CPSPrinterDriver final : public RenderDeviceDriverIface { const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) override; FX_RECT GetClipBox() const override; bool SetDIBits(RetainPtr bitmap, diff --git a/core/fxge/win32/ctext_only_printer_driver.cpp b/core/fxge/win32/ctext_only_printer_driver.cpp index 957a46e7b0..b7eed77ca2 100644 --- a/core/fxge/win32/ctext_only_printer_driver.cpp +++ b/core/fxge/win32/ctext_only_printer_driver.cpp @@ -76,6 +76,7 @@ bool CTextOnlyPrinterDriver::DrawPath( const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) { return false; } diff --git a/core/fxge/win32/ctext_only_printer_driver.h b/core/fxge/win32/ctext_only_printer_driver.h index 5b7038f724..00c6212603 100644 --- a/core/fxge/win32/ctext_only_printer_driver.h +++ b/core/fxge/win32/ctext_only_printer_driver.h @@ -39,6 +39,7 @@ class CTextOnlyPrinterDriver final : public RenderDeviceDriverIface { const CFX_GraphStateData* pGraphState, uint32_t fill_color, uint32_t stroke_color, + bool group_knockout, const CFX_FillRenderOptions& fill_options) override; FX_RECT GetClipBox() const override; bool SetDIBits(RetainPtr bitmap, From e38c84159a9de2a586d623335a8cbaa6a9b0c334 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 9 Oct 2026 15:50:15 -0700 Subject: [PATCH 62/72] Add CFX_RenderDevice::CreateWithDriver() Prevents CFX_RenderDevice from being a driver/bitmap factory, and allow extension for test-only drivers. -- Add CFX_RenderDevice::CreateWithDriver() static method. -- Make GetDeviceDriver() public. -- Rewrite CreateForWindowsDC() using CreateWithDriver(). -- Rewrite CreateForSkiaCanvas() using CreateWithDriver(). -- Remove CFX_RenderDevice::CreateForNewBitmap*() -- C++23: need complete types for defaulted arguments. -- Add FakeDeviceDriver for testing. Change-Id: I4bb2b31519546c92a6bee82ad068ae56717eb5ca Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159910 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- core/fpdfapi/render/cpdf_imagerenderer.cpp | 32 ++-- core/fpdfapi/render/cpdf_renderstatus.cpp | 21 ++- .../render/cpdf_scaledrenderbuffer.cpp | 16 +- core/fpdfdoc/cpdf_annotlist_unittest.cpp | 6 +- core/fxge/agg/cfx_agg_devicedriver.cpp | 14 -- core/fxge/cfx_renderdevice.cpp | 161 +++--------------- core/fxge/cfx_renderdevice.h | 76 ++------- core/fxge/cfx_renderdevice_unittest.cpp | 123 +++++++++++-- core/fxge/skia/fx_skia_device.cpp | 28 --- core/fxge/win32/cgdi_device_driver.cpp | 51 +++++- core/fxge/win32/cgdi_device_driver.h | 9 +- fpdfsdk/fpdf_formfill.cpp | 5 +- fpdfsdk/fpdf_progressive.cpp | 5 +- fpdfsdk/fpdf_view.cpp | 19 ++- 14 files changed, 251 insertions(+), 315 deletions(-) diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp index 6942aa3763..5d1e4fa8fa 100644 --- a/core/fpdfapi/render/cpdf_imagerenderer.cpp +++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp @@ -335,10 +335,12 @@ bool CPDF_ImageRenderer::DrawPatternImage() { return false; } - CFX_Matrix new_matrix = GetDrawMatrix(rect); + auto bitmap = pdfium::MakeRetain(); + if (!bitmap->Create(rect.Width(), rect.Height(), FXDIB_Format::kBgra)) { + return true; + } std::unique_ptr bitmap_device = - CFX_RenderDevice::CreateForNewBitmap(rect.Width(), rect.Height(), - FXDIB_Format::kBgra); + CFX_RenderDevice::CreateForBitmap(bitmap); if (!bitmap_device) { return true; } @@ -361,15 +363,16 @@ bool CPDF_ImageRenderer::DrawPatternImage() { pattern_matrix, false); } + const CFX_Matrix new_matrix = GetDrawMatrix(rect); RetainPtr mask_bitmap = CalculateDrawImage(bitmap_device.get(), dibbase_, new_matrix, rect); if (!mask_bitmap) { return true; } - bitmap_device->GetBitmap()->MultiplyAlphaMask(std::move(mask_bitmap)); + bitmap->MultiplyAlphaMask(std::move(mask_bitmap)); render_status_->GetRenderDevice()->SetDIBitsWithBlend( - bitmap_device->GetBitmap(), rect.left, rect.top, blend_type_); + std::move(bitmap), rect.left, rect.top, blend_type_); return false; } @@ -386,14 +389,18 @@ bool CPDF_ImageRenderer::DrawMaskedImage() { return false; } - CFX_Matrix new_matrix = GetDrawMatrix(rect); + auto bitmap = pdfium::MakeRetain(); + if (!bitmap->Create(rect.Width(), rect.Height(), FXDIB_Format::kBgrx)) { + return true; + } std::unique_ptr bitmap_device = - CFX_RenderDevice::CreateForNewBitmap(rect.Width(), rect.Height(), - FXDIB_Format::kBgrx); + CFX_RenderDevice::CreateForBitmap(bitmap); if (!bitmap_device) { return true; } bitmap_device->Clear(0xffffffff); + + const CFX_Matrix new_matrix = GetDrawMatrix(rect); CPDF_RenderStatus bitmap_status(render_status_->GetContext(), bitmap_device.get()); bitmap_status.SetDropObjects(render_status_->GetDropObjects()); @@ -412,15 +419,14 @@ bool CPDF_ImageRenderer::DrawMaskedImage() { #if defined(PDF_USE_SKIA) if (CFX_GEModule::IsSkiaRenderer() && render_status_->GetRenderDevice()->SetBitsWithMask( - bitmap_device->GetBitmap(), mask_bitmap, rect.left, rect.top, alpha_, - blend_type_)) { + bitmap, mask_bitmap, rect.left, rect.top, alpha_, blend_type_)) { return false; } #endif - bitmap_device->GetBitmap()->MultiplyAlphaMask(std::move(mask_bitmap)); - bitmap_device->GetBitmap()->MultiplyAlpha(alpha_); + bitmap->MultiplyAlphaMask(std::move(mask_bitmap)); + bitmap->MultiplyAlpha(alpha_); render_status_->GetRenderDevice()->SetDIBitsWithBlend( - bitmap_device->GetBitmap(), rect.left, rect.top, blend_type_); + std::move(bitmap), rect.left, rect.top, blend_type_); return false; } diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index a4ae860700..8f596f5a49 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -677,9 +677,12 @@ bool CPDF_RenderStatus::ProcessTransparency(CPDF_PageObject* pPageObj, } device_->GetDIBits(backdrop, rect.left, rect.top); } + auto bitmap = pdfium::MakeRetain(); + if (!bitmap->Create(width, height, GetCompatibleArgbFormat())) { + return true; + } std::unique_ptr bitmap_device = - CFX_RenderDevice::CreateForNewBitmapWithBackdrop( - width, height, GetCompatibleArgbFormat(), std::move(backdrop)); + CFX_RenderDevice::CreateForBitmap(bitmap, std::move(backdrop)); if (!bitmap_device) { return true; } @@ -1024,9 +1027,12 @@ bool CPDF_RenderStatus::ProcessType3Text(CPDF_TextObject* textobj, // TODO(crbug.com/42271020): Consider adding support for // `FXDIB_Format::kBgraPremul` + auto bitmap = pdfium::MakeRetain(); + if (!bitmap->Create(rect.Width(), rect.Height(), FXDIB_Format::kBgra)) { + return true; + } std::unique_ptr bitmap_device = - CFX_RenderDevice::CreateForNewBitmap(rect.Width(), rect.Height(), - FXDIB_Format::kBgra); + CFX_RenderDevice::CreateForBitmap(bitmap); if (!bitmap_device) { return true; } @@ -1457,8 +1463,12 @@ RetainPtr CPDF_RenderStatus::LoadSMask( const int width = clip_rect.Width(); const int height = clip_rect.Height(); const FXDIB_Format format = GetFormatForLuminosity(bLuminosity); + auto bitmap = pdfium::MakeRetain(); + if (!bitmap->Create(width, height, format)) { + return nullptr; + } std::unique_ptr bitmap_device = - CFX_RenderDevice::CreateForNewBitmap(width, height, format); + CFX_RenderDevice::CreateForBitmap(bitmap); if (!bitmap_device) { return nullptr; } @@ -1491,7 +1501,6 @@ RetainPtr CPDF_RenderStatus::LoadSMask( } pdfium::span dest_buf = result_mask->GetWritableBuffer(); - RetainPtr bitmap = bitmap_device->GetBitmap(); pdfium::span src_buf = bitmap->GetBuffer(); const int dest_pitch = result_mask->GetPitch(); const int src_pitch = bitmap->GetPitch(); diff --git a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp index dd9f770862..88a7506246 100644 --- a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp +++ b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp @@ -6,6 +6,8 @@ #include "core/fpdfapi/render/cpdf_scaledrenderbuffer.h" +#include + #include "build/build_config.h" #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/render/cpdf_devicebuffer.h" @@ -47,12 +49,14 @@ bool CPDF_ScaledRenderBuffer::Initialize(CPDF_RenderContext* context, } if (pitch_size.value().size <= kImageSizeLimitBytes) { - bitmap_device_ = - CFX_RenderDevice::CreateForNewBitmap(width, height, dibFormat); - if (bitmap_device_) { - context->GetBackgroundToDevice(bitmap_device_.get(), pObj, &options, - matrix_); - return true; + auto bitmap = pdfium::MakeRetain(); + if (bitmap->Create(width, height, dibFormat)) { + bitmap_device_ = CFX_RenderDevice::CreateForBitmap(std::move(bitmap)); + if (bitmap_device_) { + context->GetBackgroundToDevice(bitmap_device_.get(), pObj, &options, + matrix_); + return true; + } } } matrix_.Scale(0.5f, 0.5f); diff --git a/core/fpdfdoc/cpdf_annotlist_unittest.cpp b/core/fpdfdoc/cpdf_annotlist_unittest.cpp index 9eae082d8d..06b0236724 100644 --- a/core/fpdfdoc/cpdf_annotlist_unittest.cpp +++ b/core/fpdfdoc/cpdf_annotlist_unittest.cpp @@ -176,10 +176,10 @@ TEST_P(CPDFPopupRenderTest, PopupRendering) { CPDF_Annot* popup = list.GetAt(1); ASSERT_EQ(CPDF_Annot::Subtype::POPUP, popup->GetSubtype()); EXPECT_FALSE(popup->GetAnnotDict()->KeyExist("AP")); - auto device = - CFX_RenderDevice::CreateForNewBitmap(256, 256, FXDIB_Format::kBgra); + auto bitmap = pdfium::MakeRetain(); + ASSERT_TRUE(bitmap->Create(256, 256, FXDIB_Format::kBgra)); + auto device = CFX_RenderDevice::CreateForBitmap(bitmap); ASSERT_TRUE(device); - RetainPtr bitmap = device->GetBitmap(); EXPECT_FALSE(DrawPopup(popup, device.get())); EXPECT_EQ(0xffffffffu, GetCenterPixel(bitmap.Get())); popup->SetOpenState(true); diff --git a/core/fxge/agg/cfx_agg_devicedriver.cpp b/core/fxge/agg/cfx_agg_devicedriver.cpp index ebceb921b5..6712982276 100644 --- a/core/fxge/agg/cfx_agg_devicedriver.cpp +++ b/core/fxge/agg/cfx_agg_devicedriver.cpp @@ -1423,17 +1423,3 @@ bool CFX_RenderDevice::AttachAggImpl(RetainPtr pBitmap, return true; } -bool CFX_RenderDevice::CreateAgg(int width, - int height, - FXDIB_Format format, - RetainPtr pBackdropBitmap) { - auto pBitmap = pdfium::MakeRetain(); - if (!pBitmap->Create(width, height, format)) { - return false; - } - - SetBitmap(pBitmap); - SetDeviceDriver(std::make_unique( - std::move(pBitmap), false, std::move(pBackdropBitmap))); - return true; -} diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp index 13178defdf..c3dde6656c 100644 --- a/core/fxge/cfx_renderdevice.cpp +++ b/core/fxge/cfx_renderdevice.cpp @@ -47,13 +47,6 @@ #include "third_party/skia/include/core/SkTypes.h" // nogncheck #endif -#if BUILDFLAG(IS_WIN) -#include "core/fxge/win32/cgdi_display_driver.h" -#include "core/fxge/win32/cgdi_printer_driver.h" -#include "core/fxge/win32/cps_printer_driver.h" -#include "core/fxge/win32/ctext_only_printer_driver.h" -#endif - namespace { void AdjustGlyphSpace(std::vector* pGlyphAndPos) { @@ -518,36 +511,6 @@ FXDIB_Format GetCreateCompatibleBitmapFormat(bool bytemask_output, return CFX_DIBBase::kPlatformRGBFormat; } -#if BUILDFLAG(IS_WIN) -std::unique_ptr CreateDriver( - HDC hdc, - CFX_PSFontTracker* ps_font_tracker, - const EncoderIface* encoder_iface) { - int device_type = ::GetDeviceCaps(hdc, TECHNOLOGY); - int obj_type = ::GetObjectType(hdc); - const bool use_printer = - device_type == DT_RASPRINTER || device_type == DT_PLOTTER || - device_type == DT_CHARSTREAM || obj_type == OBJ_ENHMETADC; - - if (!use_printer) { - return std::make_unique(hdc); - } - - WindowsPrintMode print_mode = CFX_GEModule::Get()->GetPrintMode(); - if (print_mode == WindowsPrintMode::kEmf || - print_mode == WindowsPrintMode::kEmfImageMasks) { - return std::make_unique(hdc); - } - - if (print_mode == WindowsPrintMode::kTextOnly) { - return std::make_unique(hdc); - } - - return std::make_unique(hdc, print_mode, ps_font_tracker, - encoder_iface); -} -#endif // BUILDFLAG(IS_WIN) - } // namespace CFX_RenderDevice::CFX_RenderDevice() = default; @@ -863,8 +826,7 @@ bool CFX_RenderDevice::DrawFillStrokePath( backdrop->Copy(bitmap); } std::unique_ptr bitmap_device = - CFX_RenderDevice::CreateForBitmapWithBackdrop(bitmap, - std::move(backdrop)); + CFX_RenderDevice::CreateForBitmap(bitmap, std::move(backdrop)); if (!bitmap_device) { return false; } @@ -1643,53 +1605,18 @@ CFX_RenderDevice::StateRestorer::~StateRestorer() { device_->RestoreState(false); } -bool CFX_RenderDevice::Attach(RetainPtr pBitmap) { - return AttachWithRgbByteOrder(std::move(pBitmap), false); -} - -bool CFX_RenderDevice::AttachWithRgbByteOrder(RetainPtr pBitmap, - bool bRgbByteOrder) { - return AttachImpl(std::move(pBitmap), bRgbByteOrder, nullptr); -} - -bool CFX_RenderDevice::AttachWithBackdrop( - RetainPtr pBitmap, - RetainPtr pBackdropBitmap) { - return AttachImpl(std::move(pBitmap), false, std::move(pBackdropBitmap)); -} - -bool CFX_RenderDevice::AttachImpl(RetainPtr pBitmap, - bool bRgbByteOrder, - RetainPtr pBackdropBitmap) { -#if defined(PDF_USE_SKIA) - if (CFX_GEModule::IsSkiaRenderer()) { - return AttachSkiaImpl(std::move(pBitmap), bRgbByteOrder, - std::move(pBackdropBitmap)); - } -#endif -#if defined(PDF_USE_AGG) - return AttachAggImpl(std::move(pBitmap), bRgbByteOrder, - std::move(pBackdropBitmap)); -#else - NOTREACHED(); -#endif -} - -bool CFX_RenderDevice::Create(int width, int height, FXDIB_Format format) { - return CreateWithBackdrop(width, height, format, nullptr); -} - -bool CFX_RenderDevice::CreateWithBackdrop(int width, - int height, - FXDIB_Format format, - RetainPtr backdrop) { +bool CFX_RenderDevice::Attach(RetainPtr bitmap, + RetainPtr backdrop_bitmap, + bool rgb_byte_order) { #if defined(PDF_USE_SKIA) if (CFX_GEModule::IsSkiaRenderer()) { - return CreateSkia(width, height, format, backdrop); + return AttachSkiaImpl(std::move(bitmap), rgb_byte_order, + std::move(backdrop_bitmap)); } #endif #if defined(PDF_USE_AGG) - return CreateAgg(width, height, format, backdrop); + return AttachAggImpl(std::move(bitmap), rgb_byte_order, + std::move(backdrop_bitmap)); #else NOTREACHED(); #endif @@ -1699,84 +1626,36 @@ void CFX_RenderDevice::Clear(uint32_t color) { GetDeviceDriver()->Clear(color); } -#if BUILDFLAG(IS_WIN) -CFX_RenderDevice::CFX_RenderDevice(HDC hdc, - CFX_PSFontTracker* ps_font_tracker) { - const EncoderIface* encoder_iface = CFX_GEModule::Get()->GetEncoderIface(); - SetDeviceDriver(CreateDriver(hdc, ps_font_tracker, encoder_iface)); -} - -// static -std::unique_ptr CFX_RenderDevice::CreateForWindowsDC( - HDC hdc, - CFX_PSFontTracker* ps_font_tracker) { - // Private ctor. - return pdfium::WrapUnique(new CFX_RenderDevice(hdc, ps_font_tracker)); -} -#endif - // static std::unique_ptr CFX_RenderDevice::CreateForBitmap( RetainPtr bitmap, + RetainPtr backdrop_bitmap, bool rgb_byte_order) { // Private ctor. auto device = pdfium::WrapUnique(new CFX_RenderDevice()); - if (!device->AttachWithRgbByteOrder(std::move(bitmap), rgb_byte_order)) { - return nullptr; - } - return device; -} - -// static -std::unique_ptr CFX_RenderDevice::CreateForBitmapWithBackdrop( - RetainPtr bitmap, - RetainPtr backdrop_bitmap) { - // Private ctor. - auto device = pdfium::WrapUnique(new CFX_RenderDevice()); - if (!device->AttachWithBackdrop(std::move(bitmap), - std::move(backdrop_bitmap))) { + if (!device->Attach(std::move(bitmap), std::move(backdrop_bitmap), + rgb_byte_order)) { return nullptr; } return device; } +#if defined(PDF_USE_SKIA) // static -std::unique_ptr CFX_RenderDevice::CreateForNewBitmap( - int width, - int height, - FXDIB_Format format) { - // Private ctor. - auto device = pdfium::WrapUnique(new CFX_RenderDevice()); - if (!device->Create(width, height, format)) { - return nullptr; - } - return device; +std::unique_ptr CFX_RenderDevice::CreateForSkiaCanvas( + SkCanvas& canvas) { + return CreateWithDriver(CFX_SkiaDeviceDriver::Create(canvas)); } +#endif // static -std::unique_ptr -CFX_RenderDevice::CreateForNewBitmapWithBackdrop( - int width, - int height, - FXDIB_Format format, - RetainPtr backdrop) { - // Private ctor. - auto device = pdfium::WrapUnique(new CFX_RenderDevice()); - if (!device->CreateWithBackdrop(width, height, format, std::move(backdrop))) { +std::unique_ptr CFX_RenderDevice::CreateWithDriver( + std::unique_ptr driver) { + if (!driver) { return nullptr; } - return device; -} - -#if defined(PDF_USE_SKIA) -// static -std::unique_ptr CFX_RenderDevice::CreateForSkiaCanvas( - SkCanvas& canvas) { // Private ctor. auto device = pdfium::WrapUnique(new CFX_RenderDevice()); - if (!device->AttachCanvas(canvas)) { - return nullptr; - } + device->SetDeviceDriver(std::move(driver)); return device; } -#endif diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h index 62fd2b6686..2e3dd76ec9 100644 --- a/core/fxge/cfx_renderdevice.h +++ b/core/fxge/cfx_renderdevice.h @@ -16,15 +16,11 @@ #include "core/fxcrt/span.h" #include "core/fxcrt/unowned_ptr.h" #include "core/fxge/cfx_path.h" +#include "core/fxge/dib/cfx_dibitmap.h" #include "core/fxge/dib/fx_dib.h" #include "core/fxge/renderdevicedriver_iface.h" -#if BUILDFLAG(IS_WIN) -#include -#endif - class CFX_DIBBase; -class CFX_DIBitmap; class CFX_Font; class CFX_GraphStateData; class PauseIndicatorIface; @@ -35,10 +31,6 @@ struct TextCharPos; enum class BorderStyle { kSolid, kDash, kBeveled, kInset, kUnderline }; -#if BUILDFLAG(IS_WIN) -class CFX_PSFontTracker; -#endif - #if defined(PDF_USE_SKIA) class SkCanvas; #endif @@ -56,32 +48,17 @@ class CFX_RenderDevice final { static std::unique_ptr CreateForBitmap( RetainPtr bitmap, + RetainPtr backdrop_bitmap = nullptr, bool rgb_byte_order = false); - static std::unique_ptr CreateForBitmapWithBackdrop( - RetainPtr bitmap, - RetainPtr backdrop_bitmap); - - static std::unique_ptr - CreateForNewBitmap(int width, int height, FXDIB_Format format); - - static std::unique_ptr CreateForNewBitmapWithBackdrop( - int width, - int height, - FXDIB_Format format, - RetainPtr backdrop); - -#if BUILDFLAG(IS_WIN) - static std::unique_ptr CreateForWindowsDC( - HDC hdc, - CFX_PSFontTracker* ps_font_tracker); -#endif - #if defined(PDF_USE_SKIA) static std::unique_ptr CreateForSkiaCanvas( SkCanvas& canvas); #endif + static std::unique_ptr CreateWithDriver( + std::unique_ptr driver); + static CFX_Matrix GetFlipMatrix(float width, float height, float left, @@ -111,6 +88,9 @@ class CFX_RenderDevice final { #endif RetainPtr GetBitmap(); RetainPtr GetBitmap() const; + RenderDeviceDriverIface* GetDeviceDriver() const { + return device_driver_.get(); + } [[nodiscard]] bool CreateCompatibleBitmap(const RetainPtr& pDIB, int width, int height) const; @@ -256,32 +236,14 @@ class CFX_RenderDevice final { private: CFX_RenderDevice(); -#if BUILDFLAG(IS_WIN) - CFX_RenderDevice(HDC hdc, CFX_PSFontTracker* ps_font_tracker); -#endif - [[nodiscard]] bool Attach(RetainPtr pBitmap); - [[nodiscard]] bool AttachWithRgbByteOrder(RetainPtr pBitmap, - bool bRgbByteOrder); - [[nodiscard]] bool AttachWithBackdrop( - RetainPtr pBitmap, - RetainPtr pBackdropBitmap); -#if defined(PDF_USE_SKIA) - [[nodiscard]] bool AttachCanvas(SkCanvas& canvas); -#endif - - [[nodiscard]] bool Create(int width, int height, FXDIB_Format format); - [[nodiscard]] bool CreateWithBackdrop(int width, - int height, - FXDIB_Format format, - RetainPtr backdrop); + [[nodiscard]] bool Attach(RetainPtr bitmap, + RetainPtr backdrop_bitmap = nullptr, + bool rgb_byte_order = false); void SetBitmap(RetainPtr bitmap); void SetDeviceDriver(std::unique_ptr pDriver); - RenderDeviceDriverIface* GetDeviceDriver() const { - return device_driver_.get(); - } void InitDeviceInfo(); void UpdateClipBox(); @@ -302,21 +264,11 @@ class CFX_RenderDevice final { uint32_t fill_color, uint8_t fill_alpha); - bool AttachImpl(RetainPtr pBitmap, - bool bRgbByteOrder, - RetainPtr pBackdropBitmap); - #if defined(PDF_USE_AGG) // Implemented in agg/cfx_agg_devicedriver.cpp bool AttachAggImpl(RetainPtr pBitmap, bool bRgbByteOrder, RetainPtr pBackdropBitmap); - - // Implemented in agg/cfx_agg_devicedriver.cpp - bool CreateAgg(int width, - int height, - FXDIB_Format format, - RetainPtr pBackdropBitmap); #endif #if defined(PDF_USE_SKIA) @@ -324,12 +276,6 @@ class CFX_RenderDevice final { bool AttachSkiaImpl(RetainPtr pBitmap, bool bRgbByteOrder, RetainPtr pBackdropBitmap); - - // Implemented in skia/fx_skia_device.cpp - bool CreateSkia(int width, - int height, - FXDIB_Format format, - RetainPtr pBackdropBitmap); #endif RetainPtr bitmap_; diff --git a/core/fxge/cfx_renderdevice_unittest.cpp b/core/fxge/cfx_renderdevice_unittest.cpp index 7103b8ff86..0ba066bc57 100644 --- a/core/fxge/cfx_renderdevice_unittest.cpp +++ b/core/fxge/cfx_renderdevice_unittest.cpp @@ -4,6 +4,9 @@ #include "build/build_config.h" +#include +#include + #include "core/fxcrt/fx_coordinates.h" #include "core/fxcrt/fx_coordinates_test_support.h" #include "core/fxcrt/retain_ptr.h" @@ -13,21 +16,111 @@ #include "core/fxge/cfx_renderdevice.h" #include "core/fxge/dib/cfx_dibitmap.h" #include "core/fxge/dib/fx_dib.h" +#include "core/fxge/renderdevicedriver_iface.h" #include "testing/gtest/include/gtest/gtest.h" #if BUILDFLAG(IS_WIN) #include -#include #include #include "core/fxge/cfx_gemodule.h" #include "core/fxge/win32/cfx_psfonttracker.h" +#include "core/fxge/win32/cgdi_device_driver.h" #endif -TEST(CFXRenderDeviceTest, GetClipBoxDefault) { +namespace { + +class FakeDeviceDriver : public RenderDeviceDriverIface { + public: + FakeDeviceDriver(int width, int height) : width_(width), height_(height) {} + ~FakeDeviceDriver() override = default; + + DeviceType GetDeviceType() const override { return DeviceType::kDisplay; } + int GetPixelWidth() const override { return width_; } + int GetPixelHeight() const override { return height_; } + int GetBitsPerPixel() const override { return 32; } + void Clear(uint32_t color) override {} + void SaveState() override {} + void RestoreState(bool bKeepSaved) override {} + bool SetClip_PathFill(const CFX_Path& path, + const CFX_Matrix* pObject2Device, + const CFX_FillRenderOptions& fill_options) override { + return true; + } + bool DrawPath(const CFX_Path& path, + const CFX_Matrix* pObject2Device, + const CFX_GraphStateData* pGraphState, + uint32_t fill_color, + uint32_t stroke_color, + bool group_knockout, + const CFX_FillRenderOptions& fill_options) override { + return true; + } + FX_RECT GetClipBox() const override { return FX_RECT(0, 0, width_, height_); } + bool SetDIBits(RetainPtr bitmap, + uint32_t color, + const FX_RECT& src_rect, + int dest_left, + int dest_top, + BlendMode blend_type) override { + return true; + } + bool StretchDIBits(RetainPtr bitmap, + uint32_t color, + int dest_left, + int dest_top, + int dest_width, + int dest_height, + const FX_RECT* pClipRect, + const FXDIB_ResampleOptions& options, + BlendMode blend_type) override { + return true; + } + StartResult StartDIBits(RetainPtr bitmap, + float alpha, + uint32_t color, + const CFX_Matrix& matrix, + const FXDIB_ResampleOptions& options, + BlendMode blend_type) override { + return StartResult(Result::kFailure, nullptr); + } + bool MultiplyAlpha(float alpha) override { return true; } + bool MultiplyAlphaMask(RetainPtr mask) override { + return true; + } + + private: + const int width_; + const int height_; +}; + +std::unique_ptr CreateDeviceForBitmap(int width, int height) { + auto bitmap = pdfium::MakeRetain(); + if (!bitmap->Create(width, height, FXDIB_Format::kBgra)) { + return nullptr; + } + return CFX_RenderDevice::CreateForBitmap(std::move(bitmap)); +} + +} // namespace + +TEST(CFXRenderDeviceTest, CreateWithDriver) { + EXPECT_FALSE(CFX_RenderDevice::CreateWithDriver(nullptr)); + + auto driver = std::make_unique(20, 30); + RenderDeviceDriverIface* driver_ptr = driver.get(); std::unique_ptr device = - CFX_RenderDevice::CreateForNewBitmap(16, 16, FXDIB_Format::kBgra); + CFX_RenderDevice::CreateWithDriver(std::move(driver)); + ASSERT_TRUE(device); + EXPECT_EQ(device->GetDeviceDriver(), driver_ptr); + EXPECT_EQ(device->GetWidth(), 20); + EXPECT_EQ(device->GetHeight(), 30); + EXPECT_EQ(device->GetClipBox(), FX_RECT(0, 0, 20, 30)); +} + +TEST(CFXRenderDeviceTest, GetClipBoxDefault) { + std::unique_ptr device = CreateDeviceForBitmap(16, 16); ASSERT_TRUE(device); EXPECT_EQ(FX_RECT(0, 0, 16, 16), device->GetClipBox()); @@ -41,8 +134,7 @@ TEST(CFXRenderDeviceTest, GetClipBoxPathFill) { const CFX_FillRenderOptions fill_options( CFX_FillRenderOptions::FillType::kEvenOdd); - std::unique_ptr device = - CFX_RenderDevice::CreateForNewBitmap(16, 16, FXDIB_Format::kBgra); + std::unique_ptr device = CreateDeviceForBitmap(16, 16); ASSERT_TRUE(device); CFX_Path path; @@ -59,8 +151,7 @@ TEST(CFXRenderDeviceTest, GetClipBoxPathStroke) { // Default line width is 1. const CFX_GraphStateData graphics_state; - std::unique_ptr device = - CFX_RenderDevice::CreateForNewBitmap(16, 16, FXDIB_Format::kBgra); + std::unique_ptr device = CreateDeviceForBitmap(16, 16); ASSERT_TRUE(device); CFX_Path path; @@ -72,8 +163,7 @@ TEST(CFXRenderDeviceTest, GetClipBoxPathStroke) { } TEST(CFXRenderDeviceTest, GetClipBoxRect) { - std::unique_ptr device = - CFX_RenderDevice::CreateForNewBitmap(16, 16, FXDIB_Format::kBgra); + std::unique_ptr device = CreateDeviceForBitmap(16, 16); ASSERT_TRUE(device); EXPECT_TRUE(device->SetClip_Rect({2, 4, 14, 12})); @@ -82,8 +172,7 @@ TEST(CFXRenderDeviceTest, GetClipBoxRect) { } TEST(CFXRenderDeviceTest, GetClipBoxEmpty) { - std::unique_ptr device = - CFX_RenderDevice::CreateForNewBitmap(16, 16, FXDIB_Format::kBgra); + std::unique_ptr device = CreateDeviceForBitmap(16, 16); ASSERT_TRUE(device); EXPECT_TRUE(device->SetClip_Rect({2, 8, 14, 8})); @@ -131,8 +220,8 @@ class CFXWindowsRenderDeviceTest : public testing::Test { // Get a device context with Windows GDI. dc_handle_ = CreateCompatibleDC(nullptr); ASSERT_TRUE(dc_handle_); - device_ = - CFX_RenderDevice::CreateForWindowsDC(dc_handle_, &psfont_tracker_); + device_ = CFX_RenderDevice::CreateWithDriver( + CGdiDeviceDriver::CreateDriver(dc_handle_, &psfont_tracker_)); ASSERT_TRUE(device_); device_->SaveState(); } @@ -212,8 +301,8 @@ TEST(CFXRenderDeviceTest, WindowsEmfPostScriptClipBox) { const FX_RECT large_clip_rect(0, 0, horz_res * 2, vert_res * 2); CFX_PSFontTracker font_tracker; - std::unique_ptr device = - CFX_RenderDevice::CreateForWindowsDC(dc_handle.get(), &font_tracker); + std::unique_ptr device = CFX_RenderDevice::CreateWithDriver( + CGdiDeviceDriver::CreateDriver(dc_handle.get(), &font_tracker)); ASSERT_TRUE(device); EXPECT_TRUE(device->SetClip_Rect(large_clip_rect)); @@ -238,8 +327,8 @@ TEST(CFXRenderDeviceTest, WindowsEmfPostScriptClipRgn) { EXPECT_NE(ERROR, ::SelectClipRgn(dc_handle.get(), clip_rgn.get())); CFX_PSFontTracker font_tracker; - std::unique_ptr device = - CFX_RenderDevice::CreateForWindowsDC(dc_handle.get(), &font_tracker); + std::unique_ptr device = CFX_RenderDevice::CreateWithDriver( + CGdiDeviceDriver::CreateDriver(dc_handle.get(), &font_tracker)); ASSERT_TRUE(device); // TODO(crbug.com/553140224): Clip box should be `large_clip_rect`. diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp index 02539d7624..c9369e998e 100644 --- a/core/fxge/skia/fx_skia_device.cpp +++ b/core/fxge/skia/fx_skia_device.cpp @@ -1699,31 +1699,3 @@ bool CFX_RenderDevice::AttachSkiaImpl(RetainPtr pBitmap, return true; } -bool CFX_RenderDevice::AttachCanvas(SkCanvas& canvas) { - auto driver = CFX_SkiaDeviceDriver::Create(canvas); - if (!driver) { - return false; - } - SetDeviceDriver(std::move(driver)); - return true; -} - -bool CFX_RenderDevice::CreateSkia(int width, - int height, - FXDIB_Format format, - RetainPtr pBackdropBitmap) { - auto pBitmap = pdfium::MakeRetain(); - if (!pBitmap->Create(width, height, format)) { - return false; - } - - SetBitmap(pBitmap); - auto driver = CFX_SkiaDeviceDriver::Create(std::move(pBitmap), false, - std::move(pBackdropBitmap)); - if (!driver) { - return false; - } - - SetDeviceDriver(std::move(driver)); - return true; -} diff --git a/core/fxge/win32/cgdi_device_driver.cpp b/core/fxge/win32/cgdi_device_driver.cpp index b959186e89..504e0ad7b2 100644 --- a/core/fxge/win32/cgdi_device_driver.cpp +++ b/core/fxge/win32/cgdi_device_driver.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include "core/fxcrt/check.h" @@ -26,6 +27,10 @@ #include "core/fxge/cfx_path.h" #include "core/fxge/dib/cfx_dibbase.h" #include "core/fxge/dib/cfx_dibitmap.h" +#include "core/fxge/win32/cgdi_display_driver.h" +#include "core/fxge/win32/cgdi_printer_driver.h" +#include "core/fxge/win32/cps_printer_driver.h" +#include "core/fxge/win32/ctext_only_printer_driver.h" #include "core/fxge/win32/cwin32_platform.h" #if defined(PDF_USE_AGG) @@ -108,8 +113,8 @@ HBRUSH CreateBrush(uint32_t argb) { return CreateSolidBrush(ArgbToColorRef(argb)); } -void SetPathToDC(HDC hDC, const CFX_Path& path, const CFX_Matrix* pMatrix) { - BeginPath(hDC); +void SetPathToDC(HDC hdc, const CFX_Path& path, const CFX_Matrix* pMatrix) { + BeginPath(hdc); pdfium::span points = path.GetPoints(); for (size_t i = 0; i < points.size(); ++i) { @@ -121,13 +126,13 @@ void SetPathToDC(HDC hDC, const CFX_Path& path, const CFX_Matrix* pMatrix) { CFX_Point screen(FXSYS_roundf(pos.x), FXSYS_roundf(pos.y)); CFX_Path::Point::Type point_type = points[i].type_; if (point_type == CFX_Path::Point::Type::kMove) { - MoveToEx(hDC, screen.x, screen.y, nullptr); + MoveToEx(hdc, screen.x, screen.y, nullptr); } else if (point_type == CFX_Path::Point::Type::kLine) { if (points[i].point_ == points[i - 1].point_) { screen.x++; } - LineTo(hDC, screen.x, screen.y); + LineTo(hdc, screen.x, screen.y); } else if (point_type == CFX_Path::Point::Type::kBezier) { POINT lppt[3]; lppt[0].x = screen.x; @@ -148,14 +153,14 @@ void SetPathToDC(HDC hDC, const CFX_Path& path, const CFX_Matrix* pMatrix) { lppt[2].x = FXSYS_roundf(pos.x); lppt[2].y = FXSYS_roundf(pos.y); - PolyBezierTo(hDC, lppt, 3); + PolyBezierTo(hdc, lppt, 3); i += 2; } if (points[i].close_figure_) { - CloseFigure(hDC); + CloseFigure(hdc); } } - EndPath(hDC); + EndPath(hdc); } FixedSizeDataVector GetBitmapInfoHeader( @@ -354,8 +359,36 @@ unsigned LineClip(float w, } // namespace -CGdiDeviceDriver::CGdiDeviceDriver(HDC hDC, DeviceType device_type) - : dc_handle_(hDC), device_type_(device_type) { +// static +std::unique_ptr CGdiDeviceDriver::CreateDriver( + HDC hdc, + CFX_PSFontTracker* ps_font_tracker) { + int device_type = ::GetDeviceCaps(hdc, TECHNOLOGY); + int obj_type = ::GetObjectType(hdc); + const bool use_printer = + device_type == DT_RASPRINTER || device_type == DT_PLOTTER || + device_type == DT_CHARSTREAM || obj_type == OBJ_ENHMETADC; + + if (!use_printer) { + return std::make_unique(hdc); + } + + WindowsPrintMode print_mode = CFX_GEModule::Get()->GetPrintMode(); + if (print_mode == WindowsPrintMode::kEmf || + print_mode == WindowsPrintMode::kEmfImageMasks) { + return std::make_unique(hdc); + } + + if (print_mode == WindowsPrintMode::kTextOnly) { + return std::make_unique(hdc); + } + + return std::make_unique( + hdc, print_mode, ps_font_tracker, CFX_GEModule::Get()->GetEncoderIface()); +} + +CGdiDeviceDriver::CGdiDeviceDriver(HDC hdc, DeviceType device_type) + : dc_handle_(hdc), device_type_(device_type) { SetStretchBltMode(dc_handle_, HALFTONE); DWORD obj_type = GetObjectType(dc_handle_); metafile_dctype_ = obj_type == OBJ_ENHMETADC || obj_type == OBJ_ENHMETAFILE; diff --git a/core/fxge/win32/cgdi_device_driver.h b/core/fxge/win32/cgdi_device_driver.h index 75bb021401..a3cd39f983 100644 --- a/core/fxge/win32/cgdi_device_driver.h +++ b/core/fxge/win32/cgdi_device_driver.h @@ -9,16 +9,23 @@ #include +#include #include #include "core/fxcrt/retain_ptr.h" #include "core/fxge/renderdevicedriver_iface.h" class CFX_DIBBase; +class CFX_PSFontTracker; class CGdiDeviceDriver : public RenderDeviceDriverIface { + public: + static std::unique_ptr CreateDriver( + HDC hdc, + CFX_PSFontTracker* ps_font_tracker); + protected: - CGdiDeviceDriver(HDC hDC, DeviceType device_type); + CGdiDeviceDriver(HDC hdc, DeviceType device_type); ~CGdiDeviceDriver() override; // RenderDeviceDriverIface: diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp index 5e01cde1a7..6fc2aac8b2 100644 --- a/fpdfsdk/fpdf_formfill.cpp +++ b/fpdfsdk/fpdf_formfill.cpp @@ -253,8 +253,9 @@ void FFLCommon(FPDF_FORMHANDLE hHandle, std::unique_ptr pDevice; if (dest_is_bitmap) { - pDevice = CFX_RenderDevice::CreateForBitmap( - holder, !!(flags & FPDF_REVERSE_BYTE_ORDER)); + pDevice = + CFX_RenderDevice::CreateForBitmap(holder, /*backdrop_bitmap=*/nullptr, + !!(flags & FPDF_REVERSE_BYTE_ORDER)); } else { #if defined(PDF_USE_SKIA) pDevice = CFX_RenderDevice::CreateForSkiaCanvas(*canvas); diff --git a/fpdfsdk/fpdf_progressive.cpp b/fpdfsdk/fpdf_progressive.cpp index 0bfed0fb70..dcb201ff7c 100644 --- a/fpdfsdk/fpdf_progressive.cpp +++ b/fpdfsdk/fpdf_progressive.cpp @@ -76,8 +76,9 @@ FPDF_RenderPageBitmapWithColorScheme_Start(FPDF_BITMAP bitmap, } #endif - auto device = CFX_RenderDevice::CreateForBitmap( - pBitmap, !!(flags & FPDF_REVERSE_BYTE_ORDER)); + auto device = + CFX_RenderDevice::CreateForBitmap(pBitmap, /*backdrop_bitmap=*/nullptr, + !!(flags & FPDF_REVERSE_BYTE_ORDER)); if (!device) { #if defined(PDF_USE_SKIA) if (CFX_GEModule::IsSkiaRenderer() && !context->return_premultiplied_) { diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp index 93d1308c48..ac2052ab01 100644 --- a/fpdfsdk/fpdf_view.cpp +++ b/fpdfsdk/fpdf_view.cpp @@ -75,6 +75,7 @@ #if BUILDFLAG(IS_WIN) #include "core/fpdfapi/render/cpdf_progressiverenderer.h" +#include "core/fxge/win32/cgdi_device_driver.h" #include "public/fpdf_edit.h" #if defined(PDF_USE_SKIA) @@ -660,8 +661,8 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_RenderPage(HDC dc, const bool bHasMask = pPage->HasImageMask() && !bNewBitmap; auto* render_data = CPDF_DocRenderData::FromDocument(pPage->GetDocument()); if (!bNewBitmap && !bHasMask) { - context->device_ = CFX_RenderDevice::CreateForWindowsDC( - dc, render_data->GetPSFontTracker()); + context->device_ = CFX_RenderDevice::CreateWithDriver( + CGdiDeviceDriver::CreateDriver(dc, render_data->GetPSFontTracker())); if (!context->device_) { return false; } @@ -699,8 +700,8 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_RenderPage(HDC dc, if (!bHasMask) { std::unique_ptr win_dc = - CFX_RenderDevice::CreateForWindowsDC(dc, - render_data->GetPSFontTracker()); + CFX_RenderDevice::CreateWithDriver(CGdiDeviceDriver::CreateDriver( + dc, render_data->GetPSFontTracker())); if (!win_dc) { return false; } @@ -740,8 +741,8 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_RenderPage(HDC dc, owned_context = std::make_unique(); context = owned_context.get(); pPage->SetRenderContext(std::move(owned_context)); - context->device_ = - CFX_RenderDevice::CreateForWindowsDC(dc, render_data->GetPSFontTracker()); + context->device_ = CFX_RenderDevice::CreateWithDriver( + CGdiDeviceDriver::CreateDriver(dc, render_data->GetPSFontTracker())); if (!context->device_) { return false; } @@ -796,7 +797,8 @@ FPDF_EXPORT void FPDF_CALLCONV FPDF_RenderPageBitmap(FPDF_BITMAP bitmap, CFX_DIBitmap::ScopedPremultiplier scoped_premultiplier(pBitmap); #endif auto device = CFX_RenderDevice::CreateForBitmap( - std::move(pBitmap), !!(flags & FPDF_REVERSE_BYTE_ORDER)); + std::move(pBitmap), /*backdrop_bitmap=*/nullptr, + !!(flags & FPDF_REVERSE_BYTE_ORDER)); if (!device) { return; } @@ -834,7 +836,8 @@ FPDF_RenderPageBitmapWithMatrix(FPDF_BITMAP bitmap, CFX_DIBitmap::ScopedPremultiplier scoped_premultiplier(pBitmap); #endif auto device = CFX_RenderDevice::CreateForBitmap( - std::move(pBitmap), !!(flags & FPDF_REVERSE_BYTE_ORDER)); + std::move(pBitmap), /*backdrop_bitmap=*/nullptr, + !!(flags & FPDF_REVERSE_BYTE_ORDER)); if (!device) { return; } From 2b23f4de364ea1df100a90df77fda5f3d57a6f28 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 9 Oct 2026 15:53:31 -0700 Subject: [PATCH 63/72] Enforce non-null bitmap in CFX_RenderDevice::AttachSkiaImpl() The change at https://pdfium-review.googlesource.com/150952 eliminated two-stage initialization of CFX_RenderDevice and routed FPDF_FFLDrawSkia() to CFX_RenderDevice::CreateForSkiaCanvas(). Consequently, AttachSkiaImpl() is no longer invoked with a null bitmap pointer during canvas recording. Replace the dead null-check in AttachSkiaImpl() with a CHECK(pBitmap), matching AttachAggImpl(). Remove the now-obsolete comments regarding null bitmaps in both AttachSkiaImpl() and AttachAggImpl(). Change-Id: Ib213880b0d231b95b0e13758722f1b549581205b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160361 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxge/agg/cfx_agg_devicedriver.cpp | 1 - core/fxge/skia/fx_skia_device.cpp | 6 +----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/core/fxge/agg/cfx_agg_devicedriver.cpp b/core/fxge/agg/cfx_agg_devicedriver.cpp index 6712982276..0e5465eb30 100644 --- a/core/fxge/agg/cfx_agg_devicedriver.cpp +++ b/core/fxge/agg/cfx_agg_devicedriver.cpp @@ -1415,7 +1415,6 @@ bool CFX_AggDeviceDriver::ContinueDIBits( bool CFX_RenderDevice::AttachAggImpl(RetainPtr pBitmap, bool bRgbByteOrder, RetainPtr pBackdropBitmap) { - // Unlike the Skia version, all callers pass in a non-null `pBitmap`. CHECK(pBitmap); SetBitmap(pBitmap); SetDeviceDriver(std::make_unique( diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp index c9369e998e..144d7469b2 100644 --- a/core/fxge/skia/fx_skia_device.cpp +++ b/core/fxge/skia/fx_skia_device.cpp @@ -1683,11 +1683,7 @@ CFX_SkiaDeviceDriver::CharDetail::~CharDetail() = default; bool CFX_RenderDevice::AttachSkiaImpl(RetainPtr pBitmap, bool bRgbByteOrder, RetainPtr pBackdropBitmap) { - // FPDF_FFLDrawSkia() ends up calling this method with a deliberately null - // `pBitmap`. - if (!pBitmap) { - return false; - } + CHECK(pBitmap); SetBitmap(pBitmap); auto driver = CFX_SkiaDeviceDriver::Create(std::move(pBitmap), bRgbByteOrder, std::move(pBackdropBitmap)); From cf00ae882dcd53f5835b5d8c4d0f673e90d77119 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 9 Oct 2026 16:36:32 -0700 Subject: [PATCH 64/72] Avoid repeated needless scaling loop in CPDF_ScaledRenderBuffer Stop attempting to scale down CPDF_ScaledRenderBuffer dimensions once both width and height reach 1. Subsequent scalings cannot reduce the integer bounds further and cause the loop to spin until floating-point underflow eventually collapses dimensions to 0.0 exactly. Then, termination via CFX_DIBitmap::CalculatePitchAndSize() failure is an incidental quirk of its implementation. Change-Id: I9676e5ffe57ed3fe1aef6309fd1ee32c8517c320 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160410 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp index 88a7506246..6203a0e718 100644 --- a/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp +++ b/core/fpdfapi/render/cpdf_scaledrenderbuffer.cpp @@ -40,8 +40,9 @@ bool CPDF_ScaledRenderBuffer::Initialize(CPDF_RenderContext* context, matrix_.TransformRect(CFX_FloatRect(rect_)).GetOuterRect(); int32_t width = bitmap_rect.Width(); int32_t height = bitmap_rect.Height(); + // Set to 0 to make CalculatePitchAndSize() calculate it. - static constexpr uint32_t kNoPitch = 0; + constexpr uint32_t kNoPitch = 0; std::optional pitch_size = CFX_DIBitmap::CalculatePitchAndSize(width, height, dibFormat, kNoPitch); if (!pitch_size.has_value()) { @@ -59,6 +60,11 @@ bool CPDF_ScaledRenderBuffer::Initialize(CPDF_RenderContext* context, } } } + + // Once dimensions are at a minimum, further scaling cannot help. + if (width <= 1 && height <= 1) { + return false; + } matrix_.Scale(0.5f, 0.5f); } } From ceea6879c01d83dd4e924b491549fb71f5d96c92 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 9 Oct 2026 16:43:35 -0700 Subject: [PATCH 65/72] Use ByteString initializer list constructor for simple substitutions Replace calls to ByteString::Format() that only perform string substitution with the ByteString constructor taking an initializer list of ByteStringViews. Change-Id: I3a21c18693df2cacff37d679061c55cb95d081da Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160310 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fpdfdoc/cpdf_filespec.cpp | 13 ++---- core/fpdfdoc/cpdf_formfield.cpp | 3 +- core/fpdfdoc/cpdf_generateap.cpp | 7 ++-- core/fpdfdoc/cpdf_interactiveform.cpp | 9 ++-- core/fxcrt/fx_folder_posix.cpp | 2 +- core/fxcrt/xml/cfx_xmlelement.cpp | 17 +++----- core/fxge/cfx_fontmapper.cpp | 4 +- core/fxge/win32/cfx_psrenderer.cpp | 12 +++--- fpdfsdk/cpdfsdk_appstream.cpp | 23 +++++++--- fpdfsdk/fpdf_flatten.cpp | 11 +++-- fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp | 5 +-- fxjs/js_resources.cpp | 11 +++-- fxjs/xfa/cfxjse_class.cpp | 3 +- fxjs/xfa/cfxjse_formcalc_context.cpp | 49 +++++++++------------- xfa/fxfa/cxfa_eventparam.cpp | 4 +- xfa/fxfa/cxfa_fftextedit.cpp | 9 ++-- xfa/fxfa/parser/cxfa_node.cpp | 27 ++++++------ 17 files changed, 101 insertions(+), 108 deletions(-) diff --git a/core/fpdfdoc/cpdf_filespec.cpp b/core/fpdfdoc/cpdf_filespec.cpp index 814e9f1cec..49fad3a6ec 100644 --- a/core/fpdfdoc/cpdf_filespec.cpp +++ b/core/fpdfdoc/cpdf_filespec.cpp @@ -82,16 +82,11 @@ WideString CPDF_FileSpec::DecodeFileName(const WideString& filepath) { return ChangeSlashToPlatform(view.Substr(1)); } if (view[2] == L'/') { - WideString result; - result += view[1]; - result += L':'; - result += ChangeSlashToPlatform(view.Substr(2)); - return result; + WideString platform_path = ChangeSlashToPlatform(view.Substr(2)); + return WideString({view.Substr(1, 1), L':', platform_path.AsStringView()}); } - WideString result; - result += L'\\'; - result += ChangeSlashToPlatform(view); - return result; + WideString platform_path = ChangeSlashToPlatform(view); + return WideString({L'\\', platform_path.AsStringView()}); #else return filepath; #endif diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp index a43252bfc3..b0306db431 100644 --- a/core/fpdfdoc/cpdf_formfield.cpp +++ b/core/fpdfdoc/cpdf_formfield.cpp @@ -101,7 +101,8 @@ WideString CPDF_FormField::GetFullNameForDict( if (full_name.IsEmpty()) { full_name = std::move(short_name); } else { - full_name = short_name + L'.' + full_name; + full_name = WideString( + {short_name.AsStringView(), L'.', full_name.AsStringView()}); } } pLevel = pLevel->GetDictFor(pdfium::form_fields::kParent).Get(); diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp index 8c920b63d0..67ee96c595 100644 --- a/core/fpdfdoc/cpdf_generateap.cpp +++ b/core/fpdfdoc/cpdf_generateap.cpp @@ -601,9 +601,10 @@ ByteString GetPopupContentsString(CPDF_Document* doc, const CPDF_Dictionary& annot_dict, RetainPtr default_font, const ByteString& font_name) { - WideString value(annot_dict.GetUnicodeTextFor(pdfium::form_fields::kT)); - value += L'\n'; - value += annot_dict.GetUnicodeTextFor(pdfium::annotation::kContents); + WideString title = annot_dict.GetUnicodeTextFor(pdfium::form_fields::kT); + WideString contents = + annot_dict.GetUnicodeTextFor(pdfium::annotation::kContents); + WideString value({title.AsStringView(), L'\n', contents.AsStringView()}); CPVT_FontMap map(doc, nullptr, std::move(default_font), font_name); CPVT_VariableText::Provider prd(&map); diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp index 961d8f0d53..9ae70de4ff 100644 --- a/core/fpdfdoc/cpdf_interactiveform.cpp +++ b/core/fpdfdoc/cpdf_interactiveform.cpp @@ -324,11 +324,10 @@ RetainPtr InitDict(CPDF_Document* document) { } } } - ByteString default_appearance; - if (font) { - default_appearance = "/" + PDF_NameEncode(base_name) + " 12 Tf "; - } - default_appearance += "0 g"; + ByteString default_appearance = + font ? ByteString( + {'/', PDF_NameEncode(base_name).AsStringView(), " 12 Tf 0 g"}) + : ByteString("0 g"); form_dict->SetNewFor("DA", std::move(default_appearance)); return form_dict; } diff --git a/core/fxcrt/fx_folder_posix.cpp b/core/fxcrt/fx_folder_posix.cpp index 29888e153f..edbb68d747 100644 --- a/core/fxcrt/fx_folder_posix.cpp +++ b/core/fxcrt/fx_folder_posix.cpp @@ -57,7 +57,7 @@ bool FX_PosixFolder::GetNextFile(ByteString* filename, bool* bFolder) { return false; } - ByteString fullpath = path_ + "/" + de->d_name; + ByteString fullpath({path_.AsStringView(), '/', de->d_name}); struct stat deStat; if (stat(fullpath.c_str(), &deStat) < 0) { return false; diff --git a/core/fxcrt/xml/cfx_xmlelement.cpp b/core/fxcrt/xml/cfx_xmlelement.cpp index 00c57575ae..3201d54e2d 100644 --- a/core/fxcrt/xml/cfx_xmlelement.cpp +++ b/core/fxcrt/xml/cfx_xmlelement.cpp @@ -48,12 +48,10 @@ WideString CFX_XMLElement::GetNamespacePrefix() const { } WideString CFX_XMLElement::GetNamespaceURI() const { - WideString attr(L"xmlns"); WideString wsPrefix = GetNamespacePrefix(); - if (!wsPrefix.IsEmpty()) { - attr += L":"; - attr += wsPrefix; - } + WideString attr = wsPrefix.IsEmpty() + ? WideString(L"xmlns") + : WideString({L"xmlns:", wsPrefix.AsStringView()}); const CFX_XMLNode* pNode = this; while (pNode && pNode->GetType() == Type::kElement) { auto* pElement = static_cast(pNode); @@ -148,10 +146,7 @@ void CFX_XMLElement::RemoveAttribute(const WideString& name) { WideString CFX_XMLElement::AttributeToString(const WideString& name, const WideString& value) { - WideString ret = L" "; - ret += name; - ret += L"=\""; - ret += value.EncodeEntities(); - ret += L"\""; - return ret; + WideString encoded_value = value.EncodeEntities(); + return WideString( + {L' ', name.AsStringView(), L"=\"", encoded_value.AsStringView(), L'"'}); } diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp index 73cfdd9ac5..77eb37ce6f 100644 --- a/core/fxge/cfx_fontmapper.cpp +++ b/core/fxge/cfx_fontmapper.cpp @@ -281,8 +281,8 @@ ByteString GetFontNameFromFace(const CFX_Face& face) { ByteString style_name = face.GetStyleName(); if (!style_name.IsEmpty() && style_name != "Regular") { - family_name += ' '; - family_name += style_name; + return ByteString( + {family_name.AsStringView(), ' ', style_name.AsStringView()}); } return family_name; } diff --git a/core/fxge/win32/cfx_psrenderer.cpp b/core/fxge/win32/cfx_psrenderer.cpp index ccd63f4789..74ff44fc25 100644 --- a/core/fxge/win32/cfx_psrenderer.cpp +++ b/core/fxge/win32/cfx_psrenderer.cpp @@ -184,13 +184,11 @@ ByteString GenerateType42FontData(const CFX_Font* font) { return ByteString(); } - ByteString output = "%%BeginResource: font "; - output += psname; - output += "\n"; - output += sfnt_data.value(); - output += GenerateType42FontDictionary(psname, font->GetRawBBox().value(), - num_glyphs, kGlyphsPerDescendantFont); - return output; + ByteString font_dict = GenerateType42FontDictionary( + psname, font->GetRawBBox().value(), num_glyphs, kGlyphsPerDescendantFont); + return ByteString({"%%BeginResource: font ", psname.AsStringView(), '\n', + sfnt_data.value().AsStringView(), + font_dict.AsStringView()}); } } // namespace diff --git a/fpdfsdk/cpdfsdk_appstream.cpp b/fpdfsdk/cpdfsdk_appstream.cpp index 6afe55baea..44f4e0625e 100644 --- a/fpdfsdk/cpdfsdk_appstream.cpp +++ b/fpdfsdk/cpdfsdk_appstream.cpp @@ -633,7 +633,8 @@ ByteString GetWordRenderString(ByteStringView strWords) { if (strWords.IsEmpty()) { return ByteString(); } - return PDF_EncodeString(strWords) + " " + kShowTextOperator + "\n"; + ByteString encoded = PDF_EncodeString(strWords); + return ByteString({encoded.AsStringView(), ' ', kShowTextOperator, '\n'}); } ByteString GetEditAppStream(CPWL_EditImpl* pEdit, @@ -1596,8 +1597,12 @@ void CPDFSDK_AppStream::SetAsComboBox(std::optional sValue) { } sBody << GetDropButtonAppStream(rcButton); + ByteString background = GetBackgroundAppStream(); + ByteString border = GetBorderAppStream(); + ByteString body(sBody); Write("N", - GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sBody), + ByteString({background.AsStringView(), border.AsStringView(), + body.AsStringView()}), ByteString()); } @@ -1678,8 +1683,12 @@ void CPDFSDK_AppStream::SetAsListBox() { << kEndPathNoFillOrStrokeOperator << "\n" << sList.str(); } + ByteString background = GetBackgroundAppStream(); + ByteString border = GetBorderAppStream(); + ByteString body(sBody); Write("N", - GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sBody), + ByteString({background.AsStringView(), border.AsStringView(), + body.AsStringView()}), ByteString()); } @@ -1824,9 +1833,13 @@ void CPDFSDK_AppStream::SetAsTextField(std::optional sValue) { } } + ByteString background = GetBackgroundAppStream(); + ByteString border = GetBorderAppStream(); + ByteString lines(sLines); + ByteString body(sBody); Write("N", - GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sLines) + - ByteString(sBody), + ByteString({background.AsStringView(), border.AsStringView(), + lines.AsStringView(), body.AsStringView()}), ByteString()); } diff --git a/fpdfsdk/fpdf_flatten.cpp b/fpdfsdk/fpdf_flatten.cpp index d66d2bbfba..1a20587e9a 100644 --- a/fpdfsdk/fpdf_flatten.cpp +++ b/fpdfsdk/fpdf_flatten.cpp @@ -207,7 +207,7 @@ CFX_FloatRect CalculateRect(std::vector* pRectArray) { } ByteString GenerateFlattenedContent(const ByteString& key) { - return "q 1 0 0 1 0 0 cm /" + key + " Do Q"; + return ByteString({"q 1 0 0 1 0 0 cm /", key.AsStringView(), " Do Q"}); } RetainPtr NewIndirectContentsStreamReference( @@ -241,12 +241,11 @@ void SetPageContents(const ByteString& key, NewIndirectContentsStreamReference(document, "q")); pContentsArray->Append(NewIndirectContentsStreamReference(document, "Q")); } else { - ByteString sStream = "q\n"; + ByteString sStream; { auto pAcc = pdfium::MakeRetain(pContentsStream); pAcc->LoadAllDataFiltered(); - sStream += ByteStringView(pAcc->GetSpan()); - sStream += "\nQ"; + sStream = ByteString({"q\n", ByteStringView(pAcc->GetSpan()), "\nQ"}); } pContentsStream->SetDataAndRemoveFilter(sStream.unsigned_span()); pContentsArray = document->NewIndirect(); @@ -619,8 +618,8 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { fxcrt::ostringstream buf; WriteMatrix(buf, m); ByteString str(buf); - sStream += ByteString::Format("q %s cm /%s Do Q\n", str.c_str(), - sFormName.c_str()); + sStream += ByteString({"q ", str.AsStringView(), " cm /", + sFormName.AsStringView(), " Do Q\n"}); pNewXObject->SetDataAndRemoveFilter(sStream.unsigned_span()); } RemoveFlattenedFields(document, pPageDict.Get()); diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp index 15c3e4a2a6..062c387dfa 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp @@ -566,9 +566,8 @@ void CPDFXFA_DocEnvironment::ExportData(CXFA_FFDoc* hDoc, if (i == pArray->size() - 1) { WideString wPath = WideString::FromUTF16LE(bs.unsigned_span()); ByteString bPath = wPath.ToUTF8(); - static const char kFormat[] = - "\n"; - ByteString content = ByteString::Format(kFormat, bPath.c_str()); + ByteString content({"\n"}); fileWrite->WriteString(content.AsStringView()); } auto pAcc = pdfium::MakeRetain(std::move(pStream)); diff --git a/fxjs/js_resources.cpp b/fxjs/js_resources.cpp index 5c054fd876..73de16cbae 100644 --- a/fxjs/js_resources.cpp +++ b/fxjs/js_resources.cpp @@ -97,12 +97,11 @@ WideString JSGetStringFromID(JSMessage msg) { WideString JSFormatErrorString(const char* class_name, const char* property_name, const WideString& details) { - WideString result = WideString::FromUTF8(class_name); + WideString class_str = WideString::FromUTF8(class_name); if (property_name) { - result += L"."; - result += WideString::FromUTF8(property_name); + WideString prop_str = WideString::FromUTF8(property_name); + return WideString({class_str.AsStringView(), L'.', prop_str.AsStringView(), + L": ", details.AsStringView()}); } - result += L": "; - result += details; - return result; + return WideString({class_str.AsStringView(), L": ", details.AsStringView()}); } diff --git a/fxjs/xfa/cfxjse_class.cpp b/fxjs/xfa/cfxjse_class.cpp index 2e3790a5d5..c56c2e9628 100644 --- a/fxjs/xfa/cfxjse_class.cpp +++ b/fxjs/xfa/cfxjse_class.cpp @@ -84,8 +84,7 @@ void Context_GlobalObjToString( } if (pClassDescriptor->name) { - ByteString szStringVal = - ByteString::Format("[object %s]", pClassDescriptor->name); + ByteString szStringVal({"[object ", pClassDescriptor->name, "]"}); info.GetReturnValue().Set( fxv8::NewStringHelper(info.GetIsolate(), szStringVal.AsStringView())); return; diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp index b4ab540a5f..b0684df65c 100644 --- a/fxjs/xfa/cfxjse_formcalc_context.cpp +++ b/fxjs/xfa/cfxjse_formcalc_context.cpp @@ -3579,24 +3579,22 @@ void CFXJSE_FormCalcContext::Format( info.GetReturnValue().SetEmptyString(); return; } - auto wsDatePattern = WideString::FromASCII("date{"); - wsDatePattern += wsPattern.First(iTChar.value()) + L"} "; - - auto wsTimePattern = WideString::FromASCII("time{"); - wsTimePattern += wsPattern.Substr(iTChar.value() + 1) + L"}"; - wsPattern = wsDatePattern + wsTimePattern; + wsPattern = WideString( + {L"date{", wsPattern.AsStringView().First(iTChar.value()), + L"} time{", wsPattern.AsStringView().Substr(iTChar.value() + 1), + L'}'}); } break; case CXFA_LocaleValue::ValueType::kDate: { - wsPattern = L"date{" + wsPattern + L"}"; + wsPattern = WideString({L"date{", wsPattern.AsStringView(), L'}'}); } break; case CXFA_LocaleValue::ValueType::kTime: { - wsPattern = L"time{" + wsPattern + L"}"; + wsPattern = WideString({L"time{", wsPattern.AsStringView(), L'}'}); } break; case CXFA_LocaleValue::ValueType::kText: { - wsPattern = L"text{" + wsPattern + L"}"; + wsPattern = WideString({L"text{", wsPattern.AsStringView(), L'}'}); } break; case CXFA_LocaleValue::ValueType::kFloat: { - wsPattern = L"num{" + wsPattern + L"}"; + wsPattern = WideString({L"num{", wsPattern.AsStringView(), L'}'}); } break; default: { WideString wsTestPattern = L"num{" + wsPattern + L"}"; @@ -3766,11 +3764,9 @@ void CFXJSE_FormCalcContext::Parse( info.GetReturnValue().SetEmptyString(); return; } - WideString wsDatePattern(L"date{" + wsPattern.First(iTChar.value()) + - L"} "); - WideString wsTimePattern(L"time{" + wsPattern.Substr(iTChar.value() + 1) + - L"}"); - wsPattern = wsDatePattern + wsTimePattern; + wsPattern = WideString( + {L"date{", wsPattern.AsStringView().First(iTChar.value()), L"} time{", + wsPattern.AsStringView().Substr(iTChar.value() + 1), L'}'}); CXFA_LocaleValue localeValue(dwPatternType, wsValue, wsPattern, pLocale, pMgr); if (!localeValue.IsValid()) { @@ -3783,7 +3779,7 @@ void CFXJSE_FormCalcContext::Parse( return; } case CXFA_LocaleValue::ValueType::kDate: { - wsPattern = L"date{" + wsPattern + L"}"; + wsPattern = WideString({L"date{", wsPattern.AsStringView(), L'}'}); CXFA_LocaleValue localeValue(dwPatternType, wsValue, wsPattern, pLocale, pMgr); if (!localeValue.IsValid()) { @@ -3796,7 +3792,7 @@ void CFXJSE_FormCalcContext::Parse( return; } case CXFA_LocaleValue::ValueType::kTime: { - wsPattern = L"time{" + wsPattern + L"}"; + wsPattern = WideString({L"time{", wsPattern.AsStringView(), L'}'}); CXFA_LocaleValue localeValue(dwPatternType, wsValue, wsPattern, pLocale, pMgr); if (!localeValue.IsValid()) { @@ -3809,7 +3805,7 @@ void CFXJSE_FormCalcContext::Parse( return; } case CXFA_LocaleValue::ValueType::kText: { - wsPattern = L"text{" + wsPattern + L"}"; + wsPattern = WideString({L"text{", wsPattern.AsStringView(), L'}'}); CXFA_LocaleValue localeValue(CXFA_LocaleValue::ValueType::kText, wsValue, wsPattern, pLocale, pMgr); if (!localeValue.IsValid()) { @@ -3822,7 +3818,7 @@ void CFXJSE_FormCalcContext::Parse( return; } case CXFA_LocaleValue::ValueType::kFloat: { - wsPattern = L"num{" + wsPattern + L"}"; + wsPattern = WideString({L"num{", wsPattern.AsStringView(), L'}'}); CXFA_LocaleValue localeValue(CXFA_LocaleValue::ValueType::kFloat, wsValue, wsPattern, pLocale, pMgr); if (!localeValue.IsValid()) { @@ -5596,8 +5592,7 @@ void CFXJSE_FormCalcContext::ApplyToObject( void CFXJSE_FormCalcContext::ThrowNoDefaultPropertyException( ByteStringView name) const { - ByteString msg(name); - msg += " doesn't have a default property."; + ByteString msg({name, " doesn't have a default property."}); ThrowException(msg.AsStringView()); } @@ -5616,19 +5611,15 @@ void CFXJSE_FormCalcContext::ThrowServerDeniedException() const { void CFXJSE_FormCalcContext::ThrowPropertyNotInObjectException( ByteStringView name, ByteStringView exp) const { - ByteString msg("An attempt was made to reference property '"); - msg += name; - msg += "' of a non-object in SOM expression "; - msg += exp; - msg += "."; + ByteString msg({"An attempt was made to reference property '", name, + "' of a non-object in SOM expression ", exp, '.'}); ThrowException(msg.AsStringView()); } void CFXJSE_FormCalcContext::ThrowParamCountMismatchException( ByteStringView method) const { - ByteString msg("Incorrect number of parameters calling method '"); - msg += method; - msg += "'."; + ByteString msg( + {"Incorrect number of parameters calling method '", method, "'."}); ThrowException(msg.AsStringView()); } diff --git a/xfa/fxfa/cxfa_eventparam.cpp b/xfa/fxfa/cxfa_eventparam.cpp index 1edd1c71e4..334ad21bd8 100644 --- a/xfa/fxfa/cxfa_eventparam.cpp +++ b/xfa/fxfa/cxfa_eventparam.cpp @@ -19,5 +19,7 @@ CXFA_EventParam& CXFA_EventParam::operator=(CXFA_EventParam&& other) noexcept = default; WideString CXFA_EventParam::GetNewText() const { - return prev_text_.First(sel_start_) + change_ + prev_text_.Substr(sel_end_); + return WideString({prev_text_.AsStringView().First(sel_start_), + change_.AsStringView(), + prev_text_.AsStringView().Substr(sel_end_)}); } diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp index e2451a092c..843e5196fb 100644 --- a/xfa/fxfa/cxfa_fftextedit.cpp +++ b/xfa/fxfa/cxfa_fftextedit.cpp @@ -226,10 +226,11 @@ void CXFA_FFTextEdit::ValidateNumberField(const WideString& wsText) { } WideString wsSomField = GetNode()->GetSOMExpression(); - pAppProvider->MsgBox( - wsText + WideString::FromASCII(" can not contain ") + wsSomField, - pAppProvider->GetAppTitle(), static_cast(AlertIcon::kError), - static_cast(AlertButton::kOK)); + pAppProvider->MsgBox(WideString({wsText.AsStringView(), L" can not contain ", + wsSomField.AsStringView()}), + pAppProvider->GetAppTitle(), + static_cast(AlertIcon::kError), + static_cast(AlertButton::kOK)); } bool CXFA_FFTextEdit::IsDataChanged() { diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp index cff2ebbc97..f7e2475138 100644 --- a/xfa/fxfa/parser/cxfa_node.cpp +++ b/xfa/fxfa/parser/cxfa_node.cpp @@ -1595,10 +1595,9 @@ WideString CXFA_Node::GetNameExpression() { WideString wsName = GetNameExpressionSinglePath(this); CXFA_Node* parent = GetParent(); while (parent) { - WideString wsParent = GetNameExpressionSinglePath(parent); - wsParent += L"."; - wsParent += wsName; - wsName = std::move(wsParent); + WideString parent_path = GetNameExpressionSinglePath(parent); + wsName = + WideString({parent_path.AsStringView(), L'.', wsName.AsStringView()}); parent = parent->GetParent(); } return wsName; @@ -2794,9 +2793,10 @@ XFA_EventError CXFA_Node::ProcessNullTestValidate(CXFA_FFDocView* pDocView, if (wsNullMsg.IsEmpty()) { wsCaptionName = GetValidateCaptionName(bVersionFlag); - wsNullMsg = wsCaptionName + - L" cannot be blank. To ignore validations for " + - wsCaptionName + L", click Ignore."; + wsNullMsg = + WideString({wsCaptionName.AsStringView(), + L" cannot be blank. To ignore validations for ", + wsCaptionName.AsStringView(), L", click Ignore."}); } if (pAppProvider->MsgBox(wsNullMsg, wsTitle, static_cast(AlertIcon::kWarning), @@ -2884,15 +2884,16 @@ WideString CXFA_Node::GetValidateCaptionName(bool bVersionFlag) { WideString CXFA_Node::GetValidateMessage(bool bError, bool bVersionFlag) { WideString wsCaptionName = GetValidateCaptionName(bVersionFlag); if (bVersionFlag) { - return wsCaptionName + L" validation failed"; + return WideString({wsCaptionName.AsStringView(), L" validation failed"}); } - WideString result = - L"The value you entered for " + wsCaptionName + L" is invalid."; if (!bError) { - result += - L" To ignore validations for " + wsCaptionName + L", click Ignore."; + return WideString({L"The value you entered for ", + wsCaptionName.AsStringView(), + L" is invalid. To ignore validations for ", + wsCaptionName.AsStringView(), L", click Ignore."}); } - return result; + return WideString({L"The value you entered for ", + wsCaptionName.AsStringView(), L" is invalid."}); } XFA_EventError CXFA_Node::ExecuteScript(CXFA_FFDocView* pDocView, From f51279699cb59754d1f49aef10eb8e825fe56532 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 9 Oct 2026 17:08:33 -0700 Subject: [PATCH 66/72] Avoid nullptr crash in CXFA_FFField::SetEditScrollOffset() Bug: 570068745 Change-Id: I2aed2f81118f78a47f3266d9275d3c80ebdb5a41 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160430 Commit-Queue: Lei Zhang Reviewed-by: Tom Sepez --- xfa/fxfa/cxfa_fffield.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp index 4f8dc3e844..3b51d360bf 100644 --- a/xfa/fxfa/cxfa_fffield.cpp +++ b/xfa/fxfa/cxfa_fffield.cpp @@ -146,6 +146,10 @@ bool CXFA_FFField::LoadWidget() { } void CXFA_FFField::SetEditScrollOffset() { + if (!GetNormalWidget()) { + return; + } + XFA_FFWidgetType eType = node_->GetFFWidgetType(); if (eType != XFA_FFWidgetType::kTextEdit && eType != XFA_FFWidgetType::kNumericEdit && From b4f59421714ffe2d227e64edf15003623e6326b9 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 9 Oct 2026 18:02:15 -0700 Subject: [PATCH 67/72] Add test-only DisplayListDeviceDriver and use in EmbedderTest Introduce DisplayListDeviceDriver, an implementation of RenderDeviceDriverIface for testing that accumulates semantic drawing commands directly into a string display list without pixel rasterization. The intent is to avoid needing platform-specific .png files when some higher level function is all that is being tested. Add Render*ToDisplayList methods to EmbedderTest to render pages and forms to display lists for semantic verification. Add a test in fpdf_view_embeddertest.cpp verifying output on rectangles.pdf. -- Add --dump flag to pdfium_test. -- Retire the fake driver. Change-Id: Ibc77e853f7fe97bc3d8258f85f11d38144c1869b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/159394 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxge/BUILD.gn | 14 + core/fxge/cfx_renderdevice_unittest.cpp | 69 +---- core/fxge/display_list_device_driver.cpp | 339 +++++++++++++++++++++++ core/fxge/display_list_device_driver.h | 110 ++++++++ fpdfsdk/BUILD.gn | 23 ++ fpdfsdk/display_list_renderer.cpp | 98 +++++++ fpdfsdk/display_list_renderer.h | 43 +++ fpdfsdk/fpdf_view_embeddertest.cpp | 91 ++++++ testing/BUILD.gn | 3 + testing/embedder_test.cpp | 36 +++ testing/embedder_test.h | 26 ++ testing/pdfium_test/BUILD.gn | 6 + testing/pdfium_test/pdfium_test.cc | 44 +++ testing/pdfium_test/write.cc | 13 + testing/pdfium_test/write.h | 4 + 15 files changed, 853 insertions(+), 66 deletions(-) create mode 100644 core/fxge/display_list_device_driver.cpp create mode 100644 core/fxge/display_list_device_driver.h create mode 100644 fpdfsdk/display_list_renderer.cpp create mode 100644 fpdfsdk/display_list_renderer.h diff --git a/core/fxge/BUILD.gn b/core/fxge/BUILD.gn index 92c15eda9d..e0b518f82b 100644 --- a/core/fxge/BUILD.gn +++ b/core/fxge/BUILD.gn @@ -266,6 +266,19 @@ if (pdf_enable_fontations) { } } +source_set("test_support") { + testonly = true + sources = [ + "display_list_device_driver.cpp", + "display_list_device_driver.h", + ] + configs += [ "../../:pdfium_strict_config" ] + deps = [ + ":fxge", + "../fxcrt", + ] +} + pdfium_unittest_source_set("unittests") { sources = [ "cfx_color_unittest.cpp", @@ -288,6 +301,7 @@ pdfium_unittest_source_set("unittests") { ] deps = [ ":fxge", + ":test_support", "../../testing:path_service", "../../testing:test_support", "../fpdfapi/page", diff --git a/core/fxge/cfx_renderdevice_unittest.cpp b/core/fxge/cfx_renderdevice_unittest.cpp index 0ba066bc57..c2fb7b2c99 100644 --- a/core/fxge/cfx_renderdevice_unittest.cpp +++ b/core/fxge/cfx_renderdevice_unittest.cpp @@ -16,6 +16,7 @@ #include "core/fxge/cfx_renderdevice.h" #include "core/fxge/dib/cfx_dibitmap.h" #include "core/fxge/dib/fx_dib.h" +#include "core/fxge/display_list_device_driver.h" #include "core/fxge/renderdevicedriver_iface.h" #include "testing/gtest/include/gtest/gtest.h" @@ -27,74 +28,10 @@ #include "core/fxge/cfx_gemodule.h" #include "core/fxge/win32/cfx_psfonttracker.h" #include "core/fxge/win32/cgdi_device_driver.h" -#endif +#endif // BUILDFLAG(IS_WIN) namespace { -class FakeDeviceDriver : public RenderDeviceDriverIface { - public: - FakeDeviceDriver(int width, int height) : width_(width), height_(height) {} - ~FakeDeviceDriver() override = default; - - DeviceType GetDeviceType() const override { return DeviceType::kDisplay; } - int GetPixelWidth() const override { return width_; } - int GetPixelHeight() const override { return height_; } - int GetBitsPerPixel() const override { return 32; } - void Clear(uint32_t color) override {} - void SaveState() override {} - void RestoreState(bool bKeepSaved) override {} - bool SetClip_PathFill(const CFX_Path& path, - const CFX_Matrix* pObject2Device, - const CFX_FillRenderOptions& fill_options) override { - return true; - } - bool DrawPath(const CFX_Path& path, - const CFX_Matrix* pObject2Device, - const CFX_GraphStateData* pGraphState, - uint32_t fill_color, - uint32_t stroke_color, - bool group_knockout, - const CFX_FillRenderOptions& fill_options) override { - return true; - } - FX_RECT GetClipBox() const override { return FX_RECT(0, 0, width_, height_); } - bool SetDIBits(RetainPtr bitmap, - uint32_t color, - const FX_RECT& src_rect, - int dest_left, - int dest_top, - BlendMode blend_type) override { - return true; - } - bool StretchDIBits(RetainPtr bitmap, - uint32_t color, - int dest_left, - int dest_top, - int dest_width, - int dest_height, - const FX_RECT* pClipRect, - const FXDIB_ResampleOptions& options, - BlendMode blend_type) override { - return true; - } - StartResult StartDIBits(RetainPtr bitmap, - float alpha, - uint32_t color, - const CFX_Matrix& matrix, - const FXDIB_ResampleOptions& options, - BlendMode blend_type) override { - return StartResult(Result::kFailure, nullptr); - } - bool MultiplyAlpha(float alpha) override { return true; } - bool MultiplyAlphaMask(RetainPtr mask) override { - return true; - } - - private: - const int width_; - const int height_; -}; - std::unique_ptr CreateDeviceForBitmap(int width, int height) { auto bitmap = pdfium::MakeRetain(); if (!bitmap->Create(width, height, FXDIB_Format::kBgra)) { @@ -108,7 +45,7 @@ std::unique_ptr CreateDeviceForBitmap(int width, int height) { TEST(CFXRenderDeviceTest, CreateWithDriver) { EXPECT_FALSE(CFX_RenderDevice::CreateWithDriver(nullptr)); - auto driver = std::make_unique(20, 30); + auto driver = std::make_unique(20, 30); RenderDeviceDriverIface* driver_ptr = driver.get(); std::unique_ptr device = CFX_RenderDevice::CreateWithDriver(std::move(driver)); diff --git a/core/fxge/display_list_device_driver.cpp b/core/fxge/display_list_device_driver.cpp new file mode 100644 index 0000000000..c24f62ecbf --- /dev/null +++ b/core/fxge/display_list_device_driver.cpp @@ -0,0 +1,339 @@ +// Copyright 2026 The PDFium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/fxge/display_list_device_driver.h" + +#include + +#include + +#include "core/fxcrt/bytestring.h" +#include "core/fxcrt/check_op.h" +#include "core/fxcrt/fx_coordinates.h" +#include "core/fxcrt/span.h" +#include "core/fxge/cfx_fillrenderoptions.h" +#include "core/fxge/cfx_font.h" +#include "core/fxge/cfx_graphstatedata.h" +#include "core/fxge/cfx_path.h" +#include "core/fxge/dib/cfx_dibbase.h" +#include "core/fxge/dib/cfx_dibitmap.h" +#include "core/fxge/text_char_pos.h" + +namespace { + +ByteString FormatFloat(float val) { + if (fabs(val) < 0.00005f) { + val = 0.0f; + } + return ByteString::Format("%.4f", val); +} + +ByteString FormatColor(uint32_t color) { + return ByteString::Format("0x%08x", color); +} + +ByteString FormatPoint(const CFX_PointF& pt) { + return ByteString({'(', FormatFloat(pt.x).AsStringView(), ',', + FormatFloat(pt.y).AsStringView(), ')'}); +} + +ByteString FormatGlyph(const TextCharPos& cp) { + ByteString prefix = + cp.unicode_ != 0 + ? ByteString::Format("(idx=%u,u=U+%04X,origin=", cp.glyph_index_, + cp.unicode_) + : ByteString::Format("(idx=%u,origin=", cp.glyph_index_); + return ByteString( + {prefix.AsStringView(), FormatPoint(cp.origin_).AsStringView(), ')'}); +} + +ByteString FormatDIBInfo(const CFX_DIBBase& bitmap) { + return ByteString::Format("size=[%d,%d] bpp=%d", bitmap.GetWidth(), + bitmap.GetHeight(), bitmap.GetBPP()); +} + +ByteString FormatMatrix(const CFX_Matrix& m) { + return ByteString({'[', FormatFloat(m.a).AsStringView(), ',', + FormatFloat(m.b).AsStringView(), ',', + FormatFloat(m.c).AsStringView(), ',', + FormatFloat(m.d).AsStringView(), ',', + FormatFloat(m.e).AsStringView(), ',', + FormatFloat(m.f).AsStringView(), ']'}); +} + +ByteString FormatPath(const CFX_Path& path) { + ByteString res; + for (size_t i = 0; i < path.GetPoints().size(); ++i) { + if (i > 0) { + res += " "; + } + const CFX_Path::Point& pt = path.GetPoints()[i]; + const char* type_str; + if (pt.type_ == CFX_Path::Point::Type::kMove) { + type_str = "move"; + } else if (pt.type_ == CFX_Path::Point::Type::kBezier) { + type_str = "bezier"; + } else { + CHECK_EQ(pt.type_, CFX_Path::Point::Type::kLine); + type_str = "line"; + } + res += ByteString({type_str, '(', FormatFloat(pt.point_.x).AsStringView(), + ',', FormatFloat(pt.point_.y).AsStringView(), + pt.close_figure_ ? ",close" : "", ')'}); + } + return res; +} + +const char* FormatFillType(CFX_FillRenderOptions::FillType fill_type) { + if (fill_type == CFX_FillRenderOptions::FillType::kEvenOdd) { + return "even-odd"; + } + if (fill_type == CFX_FillRenderOptions::FillType::kWinding) { + return "winding"; + } + CHECK_EQ(fill_type, CFX_FillRenderOptions::FillType::kNoFill); + return "no-fill"; +} + +const char* FormatLineCap(CFX_GraphStateData::LineCap line_cap) { + if (line_cap == CFX_GraphStateData::LineCap::kRound) { + return "round"; + } + if (line_cap == CFX_GraphStateData::LineCap::kSquare) { + return "square"; + } + CHECK_EQ(line_cap, CFX_GraphStateData::LineCap::kButt); + return "butt"; +} + +const char* FormatLineJoin(CFX_GraphStateData::LineJoin line_join) { + if (line_join == CFX_GraphStateData::LineJoin::kRound) { + return "round"; + } + if (line_join == CFX_GraphStateData::LineJoin::kBevel) { + return "bevel"; + } + CHECK_EQ(line_join, CFX_GraphStateData::LineJoin::kMiter); + return "miter"; +} + +} // namespace + +DisplayListDeviceDriver::DisplayListDeviceDriver(int width, int height) + : width_(width), height_(height), clip_box_(0, 0, width, height) {} + +DisplayListDeviceDriver::~DisplayListDeviceDriver() = default; + +DeviceType DisplayListDeviceDriver::GetDeviceType() const { + return DeviceType::kDisplay; +} + +int DisplayListDeviceDriver::GetPixelWidth() const { + return width_; +} + +int DisplayListDeviceDriver::GetPixelHeight() const { + return height_; +} + +int DisplayListDeviceDriver::GetBitsPerPixel() const { + return 32; +} + +bool DisplayListDeviceDriver::RenderCapAlphaOutput() const { + return true; +} + +#if defined(PDF_USE_SKIA) +bool DisplayListDeviceDriver::RenderCapFillStrokePath() const { + return true; +} +#endif + +void DisplayListDeviceDriver::Clear(uint32_t color) { + display_list_ += ByteString::Format("Clear color=0x%08x\n", color); +} + +void DisplayListDeviceDriver::SaveState() { + clip_stack_.push_back(clip_box_); + display_list_ += "SaveState\n"; +} + +void DisplayListDeviceDriver::RestoreState(bool bKeepSaved) { + if (!clip_stack_.empty()) { + clip_box_ = clip_stack_.back(); + if (!bKeepSaved) { + clip_stack_.pop_back(); + } + } + display_list_ += "RestoreState\n"; +} + +void DisplayListDeviceDriver::SetBaseClip(const FX_RECT& rect) { + clip_box_ = rect; + display_list_ += ByteString::Format("SetBaseClip [%d,%d,%d,%d]\n", rect.left, + rect.top, rect.right, rect.bottom); +} + +bool DisplayListDeviceDriver::SetClip_PathFill( + const CFX_Path& path, + const CFX_Matrix* pObject2Device, + const CFX_FillRenderOptions& fill_options) { + const char* rule = FormatFillType(fill_options.fill_type); + ByteString mat_str = + pObject2Device ? FormatMatrix(*pObject2Device) : ByteString("none"); + display_list_ += ByteString({"SetClip_PathFill rule=", rule, + " matrix=", mat_str.AsStringView(), " points=[", + FormatPath(path).AsStringView(), "]\n"}); + return true; +} + +bool DisplayListDeviceDriver::SetClip_PathStroke( + const CFX_Path& path, + const CFX_Matrix* pObject2Device, + const CFX_GraphStateData* pGraphState) { + ByteString mat_str = + pObject2Device ? FormatMatrix(*pObject2Device) : ByteString("none"); + display_list_ += + ByteString({"SetClip_PathStroke matrix=", mat_str.AsStringView(), + " points=[", FormatPath(path).AsStringView(), "]\n"}); + return true; +} + +bool DisplayListDeviceDriver::DrawPath( + const CFX_Path& path, + const CFX_Matrix* pObject2Device, + const CFX_GraphStateData* pGraphState, + uint32_t fill_color, + uint32_t stroke_color, + bool group_knockout, + const CFX_FillRenderOptions& fill_options) { + ByteString mat_str = + pObject2Device ? FormatMatrix(*pObject2Device) : ByteString("none"); + ByteString stroke_str; + if (pGraphState) { + const char* cap = FormatLineCap(pGraphState->line_cap()); + const char* join = FormatLineJoin(pGraphState->line_join()); + stroke_str = ByteString::Format("width=%.4f cap=%s join=%s miter=%.4f", + pGraphState->line_width(), cap, join, + pGraphState->miter_limit()); + } else { + stroke_str = "none"; + } + const char* rule = FormatFillType(fill_options.fill_type); + display_list_ += + ByteString({"DrawPath fill=", FormatColor(fill_color).AsStringView(), + " stroke=", FormatColor(stroke_color).AsStringView(), + " rule=", rule, " stroke_state=[", stroke_str.AsStringView(), + "] matrix=", mat_str.AsStringView(), " points=[", + FormatPath(path).AsStringView(), "]\n"}); + return true; +} + +bool DisplayListDeviceDriver::FillRect(const FX_RECT& rect, + uint32_t fill_color) { + display_list_ += + ByteString::Format("FillRect [%d,%d,%d,%d] color=0x%08x\n", rect.left, + rect.top, rect.right, rect.bottom, fill_color); + return true; +} + +bool DisplayListDeviceDriver::DrawCosmeticLine(const CFX_PointF& ptMoveTo, + const CFX_PointF& ptLineTo, + uint32_t color) { + display_list_ += ByteString::Format( + "DrawCosmeticLine (%.4f,%.4f)->(%.4f,%.4f) color=0x%08x\n", ptMoveTo.x, + ptMoveTo.y, ptLineTo.x, ptLineTo.y, color); + return true; +} + +FX_RECT DisplayListDeviceDriver::GetClipBox() const { + return clip_box_; +} + +bool DisplayListDeviceDriver::SetDIBits(RetainPtr bitmap, + uint32_t color, + const FX_RECT& src_rect, + int left, + int top, + BlendMode blend_type) { + display_list_ += ByteString::Format( + "SetDIBits size=[%d,%d] bpp=%d dest=(%d,%d) src=[%d,%d,%d,%d] " + "color=0x%08x\n", + bitmap->GetWidth(), bitmap->GetHeight(), bitmap->GetBPP(), left, top, + src_rect.left, src_rect.top, src_rect.right, src_rect.bottom, color); + return true; +} + +bool DisplayListDeviceDriver::StretchDIBits( + RetainPtr bitmap, + uint32_t color, + int dest_left, + int dest_top, + int dest_width, + int dest_height, + const FX_RECT* pClipRect, + const FXDIB_ResampleOptions& options, + BlendMode blend_type) { + display_list_ += ByteString::Format( + "StretchDIBits size=[%d,%d] bpp=%d dest=[%d,%d,%d,%d] color=0x%08x\n", + bitmap->GetWidth(), bitmap->GetHeight(), bitmap->GetBPP(), dest_left, + dest_top, dest_width, dest_height, color); + return true; +} + +RenderDeviceDriverIface::StartResult DisplayListDeviceDriver::StartDIBits( + RetainPtr bitmap, + float alpha, + uint32_t color, + const CFX_Matrix& matrix, + const FXDIB_ResampleOptions& options, + BlendMode blend_type) { + display_list_ += + ByteString({"StartDIBits ", FormatDIBInfo(*bitmap).AsStringView(), + " matrix=", FormatMatrix(matrix).AsStringView(), + " alpha=", FormatFloat(alpha).AsStringView(), + " color=", FormatColor(color).AsStringView(), "\n"}); + return StartResult(Result::kSuccess, nullptr); +} + +bool DisplayListDeviceDriver::DrawDeviceText( + pdfium::span pCharPos, + CFX_Font* font, + const CFX_Matrix& mtObject2Device, + float font_size, + uint32_t color, + const CFX_TextRenderOptions& options) { + ByteString font_name = font ? font->GetFamilyName() : ByteString(); + if (font_name.IsEmpty() && font) { + font_name = font->GetPsName(); + } + display_list_ += ByteString( + {"DrawDeviceText font=\"", font_name.AsStringView(), + "\" size=", FormatFloat(font_size).AsStringView(), + " color=", FormatColor(color).AsStringView(), + " matrix=", FormatMatrix(mtObject2Device).AsStringView(), " glyphs=["}); + + for (size_t i = 0; i < pCharPos.size(); ++i) { + if (i > 0) { + display_list_ += ' '; + } + display_list_ += FormatGlyph(pCharPos[i]); + } + display_list_ += "]\n"; + return true; +} + +bool DisplayListDeviceDriver::MultiplyAlpha(float alpha) { + display_list_ += ByteString::Format("MultiplyAlpha alpha=%.4f\n", alpha); + return true; +} + +bool DisplayListDeviceDriver::MultiplyAlphaMask( + RetainPtr mask) { + display_list_ += ByteString::Format("MultiplyAlphaMask size=[%d,%d]\n", + mask ? mask->GetWidth() : 0, + mask ? mask->GetHeight() : 0); + return true; +} diff --git a/core/fxge/display_list_device_driver.h b/core/fxge/display_list_device_driver.h new file mode 100644 index 0000000000..9587cc9bf5 --- /dev/null +++ b/core/fxge/display_list_device_driver.h @@ -0,0 +1,110 @@ +// Copyright 2026 The PDFium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CORE_FXGE_DISPLAY_LIST_DEVICE_DRIVER_H_ +#define CORE_FXGE_DISPLAY_LIST_DEVICE_DRIVER_H_ + +#include + +#include +#include + +#include "core/fxcrt/bytestring.h" +#include "core/fxcrt/fx_coordinates.h" +#include "core/fxcrt/retain_ptr.h" +#include "core/fxcrt/span.h" +#include "core/fxge/renderdevicedriver_iface.h" + +class CFX_DIBBase; +class CFX_DIBitmap; +class CFX_Font; +class CFX_GraphStateData; +class CFX_Matrix; +class CFX_Path; +struct CFX_FillRenderOptions; +struct CFX_TextRenderOptions; +struct FX_RECT; +struct TextCharPos; + +class DisplayListDeviceDriver final : public RenderDeviceDriverIface { + public: + DisplayListDeviceDriver(int width, int height); + ~DisplayListDeviceDriver() override; + + const ByteString& display_list() const { return display_list_; } + void ClearDisplayList() { display_list_.clear(); } + + // RenderDeviceDriverIface: + DeviceType GetDeviceType() const override; + int GetPixelWidth() const override; + int GetPixelHeight() const override; + int GetBitsPerPixel() const override; + bool RenderCapAlphaOutput() const override; +#if defined(PDF_USE_SKIA) + bool RenderCapFillStrokePath() const override; +#endif + + void Clear(uint32_t color) override; + void SaveState() override; + void RestoreState(bool bKeepSaved) override; + + void SetBaseClip(const FX_RECT& rect) override; + bool SetClip_PathFill(const CFX_Path& path, + const CFX_Matrix* pObject2Device, + const CFX_FillRenderOptions& fill_options) override; + bool SetClip_PathStroke(const CFX_Path& path, + const CFX_Matrix* pObject2Device, + const CFX_GraphStateData* pGraphState) override; + bool DrawPath(const CFX_Path& path, + const CFX_Matrix* pObject2Device, + const CFX_GraphStateData* pGraphState, + uint32_t fill_color, + uint32_t stroke_color, + bool group_knockout, + const CFX_FillRenderOptions& fill_options) override; + bool FillRect(const FX_RECT& rect, uint32_t fill_color) override; + bool DrawCosmeticLine(const CFX_PointF& ptMoveTo, + const CFX_PointF& ptLineTo, + uint32_t color) override; + + FX_RECT GetClipBox() const override; + bool SetDIBits(RetainPtr bitmap, + uint32_t color, + const FX_RECT& src_rect, + int left, + int top, + BlendMode blend_type) override; + bool StretchDIBits(RetainPtr bitmap, + uint32_t color, + int dest_left, + int dest_top, + int dest_width, + int dest_height, + const FX_RECT* pClipRect, + const FXDIB_ResampleOptions& options, + BlendMode blend_type) override; + StartResult StartDIBits(RetainPtr bitmap, + float alpha, + uint32_t color, + const CFX_Matrix& matrix, + const FXDIB_ResampleOptions& options, + BlendMode blend_type) override; + bool DrawDeviceText(pdfium::span pCharPos, + CFX_Font* font, + const CFX_Matrix& mtObject2Device, + float font_size, + uint32_t color, + const CFX_TextRenderOptions& options) override; + bool MultiplyAlpha(float alpha) override; + bool MultiplyAlphaMask(RetainPtr mask) override; + + private: + const int width_; + const int height_; + FX_RECT clip_box_; + std::vector clip_stack_; + ByteString display_list_; +}; + +#endif // CORE_FXGE_DISPLAY_LIST_DEVICE_DRIVER_H_ diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn index 8f55351069..5ba44e82d3 100644 --- a/fpdfsdk/BUILD.gn +++ b/fpdfsdk/BUILD.gn @@ -102,6 +102,29 @@ source_set("fpdfsdk") { } } +source_set("test_support") { + testonly = true + sources = [ + "display_list_renderer.cpp", + "display_list_renderer.h", + ] + configs += [ + "../:pdfium_strict_config", + "../:pdfium_noshorten_config", + ] + deps = [ + ":fpdfsdk", + "../:pdfium_public_headers", + "../core/fpdfapi/page", + "../core/fpdfapi/parser", + "../core/fpdfapi/render", + "../core/fxcrt", + "../core/fxge", + "../core/fxge:test_support", + ] + visibility = [ "../*" ] +} + pdfium_unittest_source_set("unittests") { sources = [ "cpdfsdk_helpers_unittest.cpp", diff --git a/fpdfsdk/display_list_renderer.cpp b/fpdfsdk/display_list_renderer.cpp new file mode 100644 index 0000000000..3400d24537 --- /dev/null +++ b/fpdfsdk/display_list_renderer.cpp @@ -0,0 +1,98 @@ +// Copyright 2026 The PDFium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "fpdfsdk/display_list_renderer.h" + +#include + +#include "core/fpdfapi/page/cpdf_occontext.h" +#include "core/fpdfapi/page/cpdf_page.h" +#include "core/fpdfapi/parser/cpdf_document.h" +#include "core/fpdfapi/render/cpdf_pagerendercontext.h" +#include "core/fpdfapi/render/cpdf_renderoptions.h" +#include "core/fxcrt/bytestring.h" +#include "core/fxcrt/fx_coordinates.h" +#include "core/fxcrt/retain_ptr.h" +#include "core/fxge/cfx_renderdevice.h" +#include "core/fxge/display_list_device_driver.h" +#include "fpdfsdk/cpdfsdk_formfillenvironment.h" +#include "fpdfsdk/cpdfsdk_helpers.h" +#include "fpdfsdk/cpdfsdk_pageview.h" +#include "fpdfsdk/cpdfsdk_renderpage.h" +#include "public/fpdfview.h" + +// static +std::string DisplayListRenderer::RenderPage(FPDF_PAGE page, + FPDF_FORMHANDLE form, + int flags) { + int width = static_cast(FPDF_GetPageWidthF(page)); + int height = static_cast(FPDF_GetPageHeightF(page)); + DisplayListRenderer renderer(page, width, height, flags); + if (!renderer.Start()) { + return std::string(); + } + renderer.Finish(form); + return renderer.GetDisplayList(); +} + +DisplayListRenderer::DisplayListRenderer(FPDF_PAGE page, + int width, + int height, + int flags) + : page_(page), width_(width), height_(height), flags_(flags) { + auto driver = std::make_unique(width, height); + driver_ = driver.get(); + device_ = CFX_RenderDevice::CreateWithDriver(std::move(driver)); +} + +DisplayListRenderer::~DisplayListRenderer() = default; + +bool DisplayListRenderer::Start() { + if (!device_) { + return false; + } + CPDF_Page* cpdf_page = CPDFPageFromFPDFPage(page_); + if (!cpdf_page) { + return false; + } + context_ = std::make_unique(); + context_->device_ = std::move(device_); + CPDFSDK_RenderPageWithContext(context_.get(), cpdf_page, /*start_x=*/0, + /*start_y=*/0, /*size_x=*/width_, + /*size_y=*/height_, /*rotate=*/0, + /*flags=*/flags_, nullptr, + /*need_to_restore=*/true, nullptr); + return true; +} + +void DisplayListRenderer::Finish(FPDF_FORMHANDLE form) { + if (form && context_ && context_->device_) { + CPDFSDK_FormFillEnvironment* form_fill_env = + CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form); + IPDF_Page* ipdf_page = IPDFPageFromFPDFPage(page_); + if (form_fill_env && ipdf_page) { + CPDFSDK_PageView* page_view = + form_fill_env->GetOrCreatePageView(ipdf_page); + if (page_view) { + CPDF_Page* cpdf_page = CPDFPageFromFPDFPage(page_); + const FX_RECT rect(0, 0, width_, height_); + CFX_Matrix matrix = cpdf_page->GetDisplayMatrixForRect(rect, 0); + CPDF_RenderOptions options; + options.GetOptions().bClearType = !!(flags_ & FPDF_LCD_TEXT); + if (flags_ & FPDF_GRAYSCALE) { + options.SetColorMode(CPDF_RenderOptions::kGray); + } + options.SetDrawAnnots(flags_ & FPDF_ANNOT); + options.SetOCContext(pdfium::MakeRetain( + cpdf_page->GetDocument(), CPDF_OCContext::kView)); + page_view->PageView_OnDraw(context_->device_.get(), matrix, &options, + rect); + } + } + } +} + +std::string DisplayListRenderer::GetDisplayList() const { + return std::string(driver_->display_list().c_str()); +} diff --git a/fpdfsdk/display_list_renderer.h b/fpdfsdk/display_list_renderer.h new file mode 100644 index 0000000000..e597d00900 --- /dev/null +++ b/fpdfsdk/display_list_renderer.h @@ -0,0 +1,43 @@ +// Copyright 2026 The PDFium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef FPDFSDK_DISPLAY_LIST_RENDERER_H_ +#define FPDFSDK_DISPLAY_LIST_RENDERER_H_ + +#include +#include + +#include "core/fxcrt/unowned_ptr.h" +#include "public/fpdfview.h" + +class CFX_RenderDevice; +class CPDF_PageRenderContext; +class DisplayListDeviceDriver; + +class DisplayListRenderer { + public: + // Convenience method for one-shot synchronous rendering of a page. + static std::string RenderPage(FPDF_PAGE page, + FPDF_FORMHANDLE form, + int flags); + + DisplayListRenderer(FPDF_PAGE page, int width, int height, int flags); + ~DisplayListRenderer(); + + bool Start(); + void Finish(FPDF_FORMHANDLE form); + + std::string GetDisplayList() const; + + private: + FPDF_PAGE const page_; + const int width_; + const int height_; + const int flags_; + std::unique_ptr context_; // must outlive `driver_` + std::unique_ptr device_; // must outlive `driver_` + UnownedPtr driver_; +}; + +#endif // FPDFSDK_DISPLAY_LIST_RENDERER_H_ diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp index 6a85d9f57a..42bbd3394f 100644 --- a/fpdfsdk/fpdf_view_embeddertest.cpp +++ b/fpdfsdk/fpdf_view_embeddertest.cpp @@ -2231,3 +2231,94 @@ TEST_F(FPDFViewEmbedderTest, DocumentVersionInCatalog) { EXPECT_TRUE(FPDF_GetFileVersion(document(), &version)); EXPECT_EQ(16, version); } + +TEST_F(FPDFViewEmbedderTest, RenderPageToDisplayList) { + static const char kExpectedDisplayList[] = + "SaveState\n" + "SetBaseClip [0,0,200,300]\n" + "SetClip_PathFill rule=winding matrix=none " + "points=[move(0.0000,300.0000) line(0.0000,0.0000) line(200.0000,0.0000) " + "line(200.0000,300.0000) line(0.0000,300.0000,close)]\n" + "SaveState\n" + "DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd " + "stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] " + "matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] " + "points=[move(0.0000,290.0000) line(10.0000,290.0000) " + "line(10.0000,300.0000) " + "line(0.0000,300.0000) line(0.0000,290.0000,close)]\n" + "DrawPath fill=0xff000000 stroke=0xff000000 rule=even-odd " + "stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] " + "matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] " + "points=[move(10.0000,150.0000) line(60.0000,150.0000) " + "line(60.0000,180.0000) " + "line(10.0000,180.0000) line(10.0000,150.0000,close)]\n" + "DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd " + "stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] " + "matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] " + "points=[move(190.0000,290.0000) line(200.0000,290.0000) " + "line(200.0000,300.0000) " + "line(190.0000,300.0000) line(190.0000,290.0000,close)]\n" + "DrawPath fill=0xff0000ff stroke=0xff000000 rule=even-odd " + "stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] " + "matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] " + "points=[move(70.0000,232.0000) line(120.0000,232.0000) " + "line(120.0000,262.0000) " + "line(70.0000,262.0000) line(70.0000,232.0000,close)]\n" + "DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd " + "stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] " + "matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] " + "points=[move(190.0000,0.0000) line(200.0000,0.0000) " + "line(200.0000,10.0000) " + "line(190.0000,10.0000) line(190.0000,0.0000,close)]\n" + "DrawPath fill=0xff00ff00 stroke=0xff000000 rule=even-odd " + "stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] " + "matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] " + "points=[move(130.0000,150.0000) line(180.0000,150.0000) " + "line(180.0000,180.0000) " + "line(130.0000,180.0000) line(130.0000,150.0000,close)]\n" + "DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd " + "stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] " + "matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] " + "points=[move(0.0000,0.0000) line(10.0000,0.0000) line(10.0000,10.0000) " + "line(0.0000,10.0000) line(0.0000,0.0000,close)]\n" + "DrawPath fill=0xffff0000 stroke=0xff000000 rule=even-odd " + "stroke_state=[width=1.0000 cap=butt join=miter miter=10.0000] " + "matrix=[1.0000,0.0000,0.0000,-1.0000,0.0000,300.0000] " + "points=[move(70.0000,67.0000) line(120.0000,67.0000) " + "line(120.0000,97.0000) " + "line(70.0000,97.0000) line(70.0000,67.0000,close)]\n" + "RestoreState\n" + "RestoreState\n"; + + ASSERT_TRUE(OpenDocument("rectangles.pdf")); + ScopedPage page = LoadScopedPage(0); + ASSERT_TRUE(page); + + std::string display_list = RenderPageToDisplayList(page.get()); + EXPECT_EQ(kExpectedDisplayList, display_list); +} + +TEST_F(FPDFViewEmbedderTest, RenderHelloWorldToDisplayList) { + ASSERT_TRUE(OpenDocument("hello_world.pdf")); + ScopedPage page = LoadScopedPage(0); + ASSERT_TRUE(page); + + std::string display_list = RenderPageToDisplayList(page.get()); + EXPECT_NE(std::string::npos, + display_list.find("DrawDeviceText font=\"Tinos\" size=12.0000")); + EXPECT_NE(std::string::npos, + display_list.find("DrawDeviceText font=\"Arimo\" size=16.0000")); + EXPECT_NE(std::string::npos, display_list.find("idx=43,u=U+0048")); +} + +TEST_F(FPDFViewEmbedderTest, RenderImageToDisplayList) { + ASSERT_TRUE(OpenDocument("embedded_images.pdf")); + ScopedPage page = LoadScopedPage(0); + ASSERT_TRUE(page); + + std::string display_list = RenderPageToDisplayList(page.get()); + EXPECT_NE(std::string::npos, + display_list.find("StartDIBits size=[109,88] bpp=24")); + EXPECT_NE(std::string::npos, + display_list.find("StartDIBits size=[92,68] bpp=1")); +} diff --git a/testing/BUILD.gn b/testing/BUILD.gn index 45d768c7ce..6d17e66e25 100644 --- a/testing/BUILD.gn +++ b/testing/BUILD.gn @@ -42,10 +42,12 @@ source_set("test_support") { ":path_service", "../:pdfium_public_headers", "../core/fxcrt", + "../core/fxge:test_support", "//third_party/test_fonts", ] deps = [ "../core/fdrm", + "../core/fxcrt", "../core/fxge", "../fpdfsdk", "png_codec", @@ -242,6 +244,7 @@ source_set("embedder_test_support") { "../core/fdrm", "../core/fxge", "../fpdfsdk", + "../fpdfsdk:test_support", "png_codec", "//third_party/simdutf", ] diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp index 9e3c2d5168..a3a37a6bbc 100644 --- a/testing/embedder_test.cpp +++ b/testing/embedder_test.cpp @@ -26,6 +26,7 @@ #include "core/fxge/cfx_gemodule.h" #include "core/fxge/dib/fx_dib.h" #include "fpdfsdk/cpdfsdk_helpers.h" +#include "fpdfsdk/display_list_renderer.h" #include "public/cpp/fpdf_scopers.h" #include "public/fpdf_dataavail.h" #include "public/fpdf_edit.h" @@ -935,6 +936,41 @@ ScopedFPDFBitmap EmbedderTest::RenderPage(FPDF_PAGE page) { return RenderPageWithFlags(page, nullptr, 0); } +std::string EmbedderTest::RenderLoadedPageToDisplayList(FPDF_PAGE page) { + return RenderLoadedPageWithFlagsToDisplayList(page, 0); +} + +std::string EmbedderTest::RenderLoadedPageWithFlagsToDisplayList(FPDF_PAGE page, + int flags) { + int page_index = GetPageNumberForLoadedPage(page); + CHECK_GE(page_index, 0); + return RenderPageWithFlagsToDisplayList(page, form_handle(), flags); +} + +std::string EmbedderTest::RenderSavedPageToDisplayList(FPDF_PAGE page) { + return RenderSavedPageWithFlagsToDisplayList(page, 0); +} + +std::string EmbedderTest::RenderSavedPageWithFlagsToDisplayList(FPDF_PAGE page, + int flags) { + int page_index = GetPageNumberForSavedPage(page); + CHECK_GE(page_index, 0); + return RenderPageWithFlagsToDisplayList(page, saved_form_handle(), flags); +} + +// static +std::string EmbedderTest::RenderPageWithFlagsToDisplayList( + FPDF_PAGE page, + FPDF_FORMHANDLE handle, + int flags) { + return DisplayListRenderer::RenderPage(page, handle, flags); +} + +// static +std::string EmbedderTest::RenderPageToDisplayList(FPDF_PAGE page) { + return RenderPageWithFlagsToDisplayList(page, nullptr, 0); +} + #if BUILDFLAG(IS_WIN) // static std::vector EmbedderTest::RenderPageWithFlagsToEmf(FPDF_PAGE page, diff --git a/testing/embedder_test.h b/testing/embedder_test.h index 368997c27e..8236ede7ad 100644 --- a/testing/embedder_test.h +++ b/testing/embedder_test.h @@ -293,6 +293,32 @@ class EmbedderTest : public ::testing::Test, // Simplified form of RenderPageWithFlags() with no handle and no flags. static ScopedFPDFBitmap RenderPage(FPDF_PAGE page); + // RenderLoadedPageWithFlagsToDisplayList() with no flags. + std::string RenderLoadedPageToDisplayList(FPDF_PAGE page); + + // Convert `page` loaded via LoadPage() into a display list string with the + // specified page rendering `flags`. + std::string RenderLoadedPageWithFlagsToDisplayList(FPDF_PAGE page, int flags); + + // RenderSavedPageWithFlagsToDisplayList() with no flags. + std::string RenderSavedPageToDisplayList(FPDF_PAGE page); + + // Convert `page` loaded via LoadSavedPage() into a display list string with + // the specified page rendering `flags`. + std::string RenderSavedPageWithFlagsToDisplayList(FPDF_PAGE page, int flags); + + // Convert `page` into a display list string with the specified page rendering + // `flags`. The form handle associated with `page` should be passed in via + // `handle`. If `handle` is nullptr, then forms on the page will not be + // rendered. + static std::string RenderPageWithFlagsToDisplayList(FPDF_PAGE page, + FPDF_FORMHANDLE handle, + int flags); + + // Simplified form of RenderPageWithFlagsToDisplayList() with no handle and no + // flags. + static std::string RenderPageToDisplayList(FPDF_PAGE page); + #if BUILDFLAG(IS_WIN) // Convert `page` into EMF with the specified page rendering `flags`. static std::vector RenderPageWithFlagsToEmf(FPDF_PAGE page, diff --git a/testing/pdfium_test/BUILD.gn b/testing/pdfium_test/BUILD.gn index 55295b64ea..b5ef49f2e9 100644 --- a/testing/pdfium_test/BUILD.gn +++ b/testing/pdfium_test/BUILD.gn @@ -26,8 +26,14 @@ executable("pdfium_test") { deps = [ "../:path_service", "../:test_support", + "../../:pdfium_public_headers", + "../../core/fpdfapi/page", + "../../core/fpdfapi/parser", + "../../core/fpdfapi/render", "../../core/fxcrt", + "../../core/fxge", "../../fpdfsdk", + "../../fpdfsdk:test_support", "../png_codec", "//build/win:default_exe_manifest", ] diff --git a/testing/pdfium_test/pdfium_test.cc b/testing/pdfium_test/pdfium_test.cc index 509588df58..ba62536d58 100644 --- a/testing/pdfium_test/pdfium_test.cc +++ b/testing/pdfium_test/pdfium_test.cc @@ -23,6 +23,7 @@ #include "core/fxcrt/compiler_specific.h" #include "core/fxcrt/fx_memcpy_wrappers.h" #include "core/fxcrt/span.h" +#include "fpdfsdk/display_list_renderer.h" #include "public/cpp/fpdf_scopers.h" #include "public/fpdf_annot.h" #include "public/fpdf_attachment.h" @@ -153,6 +154,7 @@ enum class OutputFormat { kPpm, kPng, kAnnot, + kDisplayList, #ifdef _WIN32 kBmp, kEmf, @@ -670,6 +672,12 @@ bool ParseCommandLine(const std::vector& args, return false; } options->output_format = OutputFormat::kAnnot; + } else if (cur_arg == "--dump") { + if (options->output_format != OutputFormat::kNone) { + fprintf(stderr, "Duplicate or conflicting --dump argument\n"); + return false; + } + options->output_format = OutputFormat::kDisplayList; #ifdef PDF_USE_SKIA } else if (cur_arg == "--skp") { if (options->output_format != OutputFormat::kNone) { @@ -1495,6 +1503,35 @@ class SkDocumentPageRenderer final : public SkCanvasPageRenderer { }; #endif // PDF_USE_SKIA +class DisplayListPageRenderer final : public PageRenderer { + public: + DisplayListPageRenderer(FPDF_PAGE page, int width, int height, int flags) + : PageRenderer(page, width, height, flags), + renderer_(page, width, height, flags) {} + + bool HasOutput() const override { return has_output_; } + + bool Start() override { return renderer_.Start(); } + + void Finish(FPDF_FORMHANDLE form) override { + renderer_.Finish(form); + has_output_ = true; + } + + bool Write(const std::string& name, int page_index, bool /*md5*/) override { + if (!has_output_) { + return false; + } + std::string filename = + WriteDisplayList(name.c_str(), page_index, renderer_.GetDisplayList()); + return !filename.empty(); + } + + private: + DisplayListRenderer renderer_; + bool has_output_ = false; +}; + bool PdfProcessor::ProcessPage(const int page_index) { FPDF_PAGE page = GetPage(page_index); if (!page) { @@ -1622,6 +1659,11 @@ bool PdfProcessor::ProcessPage(const int page_index) { #endif // _WIN32 #endif // PDF_USE_SKIA + case OutputFormat::kDisplayList: + renderer = std::make_unique( + page, /*width=*/width, /*height=*/height, /*flags=*/flags); + break; + default: // Other formats won't write the output to a file, but still rasterize. break; @@ -1991,6 +2033,8 @@ constexpr char kUsageString[] = " --png - write page images ..png\n" " --ppm - write page images ..ppm\n" " --annot - write annotation info ..annot.txt\n" + " --dump - write page drawing commands " + "..dump.txt\n" #ifdef PDF_USE_SKIA " --skp - write page images ..skp\n" #ifdef _WIN32 diff --git a/testing/pdfium_test/write.cc b/testing/pdfium_test/write.cc index 6ed697b755..bfafd7e9e1 100644 --- a/testing/pdfium_test/write.cc +++ b/testing/pdfium_test/write.cc @@ -930,3 +930,16 @@ void WriteThumbnail(FPDF_PAGE page, const char* pdf_name, int page_num) { WriteBufferToFile(&png_encoding.front(), png_encoding.size(), filename, "thumbnail"); } + +std::string WriteDisplayList(const char* pdf_name, + int num, + const std::string& display_list) { + std::string filename = GeneratePageOutputFilename(pdf_name, num, "dump.txt"); + if (filename.empty()) { + return std::string(); + } + + WriteBufferToFile(display_list.data(), display_list.size(), filename.c_str(), + "dump"); + return filename; +} diff --git a/testing/pdfium_test/write.h b/testing/pdfium_test/write.h index b80b92122e..cd6f272695 100644 --- a/testing/pdfium_test/write.h +++ b/testing/pdfium_test/write.h @@ -61,6 +61,10 @@ std::unique_ptr WriteToSkWStream(const std::string& pdf_name, std::string WriteSkp(const char* pdf_name, int num, const SkPicture& picture); #endif // PDF_USE_SKIA +std::string WriteDisplayList(const char* pdf_name, + int num, + const std::string& display_list); + void WriteAttachments(FPDF_DOCUMENT doc, const std::string& name); void WriteImages(FPDF_PAGE page, const char* pdf_name, int page_num); void WriteRenderedImages(FPDF_DOCUMENT doc, From d3321fbc5858db139d2657b92984b3e91cb8eb2f Mon Sep 17 00:00:00 2001 From: Aryan Date: Fri, 9 Oct 2026 18:21:43 -0700 Subject: [PATCH 68/72] Update Brotli config behaviour in library initialization This CL updates library initialisation in fpdf_view.cpp to disable Brotli when the configuration version is less than 6 or when m_BrotliEnabled is not set to true by the embedder. Change-Id: I9ebe03a91d0f8b7d292cc7d44e98de394b9f57bb Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/158910 Reviewed-by: Tom Sepez Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- fpdfsdk/fpdf_view.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp index ac2052ab01..1c7abd348e 100644 --- a/fpdfsdk/fpdf_view.cpp +++ b/fpdfsdk/fpdf_view.cpp @@ -242,9 +242,8 @@ FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* config) { #error "Neither FreeType nor Fontations enabled" #endif #if defined(PDF_ENABLE_BROTLI) - if (config && config->version >= 6) { - BrotliDecoder::SetBrotliEnabled(config->m_BrotliEnabled); - } + BrotliDecoder::SetBrotliEnabled(config && config->version >= 6 && + config->m_BrotliEnabled); #endif std::optional> user_font_paths_opt; From 686814d06630e1684d302d1629580a991e28d3e5 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 9 Oct 2026 21:41:52 -0700 Subject: [PATCH 69/72] Avoid integer overflows in FaxG4GetRow() Change some signed integer math operations to use FX_SAFE_INT32 and avoid UB. Bug: 570876470 Change-Id: I9ecc7b1520420424d2d8f7bb5d62dfb967387c3f Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160390 Commit-Queue: Lei Zhang Reviewed-by: Tom Sepez --- core/fxcodec/fax/faxmodule.cpp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/core/fxcodec/fax/faxmodule.cpp b/core/fxcodec/fax/faxmodule.cpp index 047ad32a33..20418c37e1 100644 --- a/core/fxcodec/fax/faxmodule.cpp +++ b/core/fxcodec/fax/faxmodule.cpp @@ -26,6 +26,7 @@ #include "core/fxcrt/fx_2d_size.h" #include "core/fxcrt/fx_ceil_div.h" #include "core/fxcrt/fx_memory.h" +#include "core/fxcrt/fx_safe_types.h" #include "core/fxcrt/numerics/safe_conversions.h" #include "core/fxcrt/raw_span.h" #include "core/fxcrt/span.h" @@ -363,7 +364,13 @@ void FaxG4GetRow(pdfium::span src_buf, ++run_len1; } - a1 = a0 + run_len1; + FX_SAFE_INT32 safe_a1 = a0; + safe_a1 += run_len1; + if (!safe_a1.IsValid()) { + return; + } + + a1 = safe_a1.ValueOrDie(); if (!a0color) { FaxFillBits(dest_buf, columns, a0, a1); } @@ -392,7 +399,14 @@ void FaxG4GetRow(pdfium::span src_buf, break; } } - a2 = a1 + run_len2; + + FX_SAFE_INT32 safe_a2 = a1; + safe_a2 += run_len2; + if (!safe_a2.IsValid()) { + return; + } + + a2 = safe_a2.ValueOrDie(); if (a0color) { FaxFillBits(dest_buf, columns, a1, a2); } @@ -468,7 +482,13 @@ void FaxG4GetRow(pdfium::span src_buf, int b2; FaxG4FindB1B2(ref_buf, columns, a0, a0color, &b1, &b2); - a1 = b1 + v_delta; + FX_SAFE_INT32 safe_a1 = b1; + safe_a1 += v_delta; + if (!safe_a1.IsValid()) { + return; + } + + a1 = safe_a1.ValueOrDie(); if (!a0color) { FaxFillBits(dest_buf, columns, a0, a1); } From 97ab661d8ced24a5eed4c9650d6c42d6a274a88c Mon Sep 17 00:00:00 2001 From: Jan Wytze Zuidema Date: Sat, 10 Oct 2026 13:24:28 -0700 Subject: [PATCH 70/72] Recognize rectangles with collinear edge points in CFX_Path GetNormalizedPoints() only drops points that repeat the previous point, so a rectangle with an extra vertex in the middle of an edge, such as: x1 y1 m x2 y1 l x2 y2 l xm y2 l x1 y2 l h is not a rectangle to CFX_Path::IsRect() and GetRect(). Some PDF generators (seen in Amyuni PDF Converter output) clip every image strip of a rasterized page with such a page-sized rectangle. CFX_AggDeviceDriver::SetClip_PathFill() then rasterizes a full clip mask for each strip instead of intersecting a rectangle. A page with 10,000 such clips takes 9.1 s to render at 200 DPI with pdfium_test, and 0.3 s with this change. Also skip a line point that lies strictly between the previous point and the next point on a horizontal or vertical line. Removing it does not change the shape of the path, for either fill rule. The "re" writers already handle such rectangles since https://pdfium-review.googlesource.com/160011. Filled rectangles with such points now take the FillRect() fast path in CFX_RenderDevice::DrawPathWithBlend(), just like the same rectangles written without the extra points. This changes the rendering of the tiny rectangles in the 1751_1 corpus test, so also roll DEPS to pick up the new corpus test expectations in https://pdfium-review.googlesource.com/c/pdfium_tests/+/160230 and https://pdfium-review.googlesource.com/c/pdfium_tests/+/160270. Bug: 570363704 Change-Id: I7d0c57c8137331bd1fc4068bfe215e557622012d Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160010 Commit-Queue: Lei Zhang Reviewed-by: Lei Zhang Reviewed-by: Tom Sepez --- DEPS | 2 +- .../cpdf_pagecontentgenerator_unittest.cpp | 17 ++++ core/fxge/cfx_path.cpp | 35 +++++++- core/fxge/cfx_path_unittest.cpp | 84 +++++++++++++++++++ 4 files changed, 133 insertions(+), 5 deletions(-) diff --git a/DEPS b/DEPS index d66606a499..34ffdf01be 100644 --- a/DEPS +++ b/DEPS @@ -228,7 +228,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling pdfium_tests # and whatever else without interference from each other. - 'pdfium_tests_revision': '141d7ba49d797e856f57fd7e76a9b7f73468988e', + 'pdfium_tests_revision': '86219637fec25a23f5f87252b3bd156ff9ca848e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling result_adapter_revision # and whatever else without interference from each other. diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp index 1074d87aba..6ee064113b 100644 --- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp +++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp @@ -89,6 +89,23 @@ TEST_F(CPDFPageContentGeneratorTest, ProcessRect) { buf.str(""); TestProcessPath(&generator, &buf, pPathObj.get()); EXPECT_EQ("q 0 0 2 1 re n Q\n", ByteString(buf)); + + // A rectangle with an extra point in the middle of its first edge, so its + // third point is not the opposite corner either. + pPathObj = std::make_unique(); + pPathObj->path().AppendPoint(CFX_PointF(0, 0), CFX_Path::Point::Type::kMove); + pPathObj->path().AppendPoint(CFX_PointF(50, 0), CFX_Path::Point::Type::kLine); + pPathObj->path().AppendPoint(CFX_PointF(100, 0), + CFX_Path::Point::Type::kLine); + pPathObj->path().AppendPoint(CFX_PointF(100, 100), + CFX_Path::Point::Type::kLine); + pPathObj->path().AppendPoint(CFX_PointF(0, 100), + CFX_Path::Point::Type::kLine); + pPathObj->path().AppendPointAndClose(CFX_PointF(0, 0), + CFX_Path::Point::Type::kLine); + buf.str(""); + TestProcessPath(&generator, &buf, pPathObj.get()); + EXPECT_EQ("q 0 0 100 100 re n Q\n", ByteString(buf)); } TEST_F(CPDFPageContentGeneratorTest, Bug937) { diff --git a/core/fxge/cfx_path.cpp b/core/fxge/cfx_path.cpp index d444a7aa4e..e67fd4b9b7 100644 --- a/core/fxge/cfx_path.cpp +++ b/core/fxge/cfx_path.cpp @@ -71,6 +71,22 @@ bool PathPointsNeedNormalization(const std::vector& points) { return points.size() > 5; } +// Returns whether `point` lies strictly between `prev` and `next` on a +// horizontal or vertical line, so dropping it does not change the path shape. +bool IsBetweenOnAxisAlignedLine(const CFX_PointF& prev, + const CFX_PointF& point, + const CFX_PointF& next) { + if (prev.y == point.y && point.y == next.y) { + return (prev.x < point.x && point.x < next.x) || + (prev.x > point.x && point.x > next.x); + } + if (prev.x == point.x && point.x == next.x) { + return (prev.y < point.y && point.y < next.y) || + (prev.y > point.y && point.y > next.y); + } + return false; +} + std::vector GetNormalizedPoints( const std::vector& points) { DCHECK(PathPointsNeedNormalization(points)); @@ -89,12 +105,23 @@ std::vector GetNormalizedPoints( break; } - // If the line does not move, skip this point. const auto& point = *it; if (point.type_ == CFX_Path::Point::Type::kLine && !point.close_figure_ && - !normalized.back().close_figure_ && - point.point_ == normalized.back().point_) { - continue; + !normalized.back().close_figure_) { + // If the line does not move, skip this point. + if (point.point_ == normalized.back().point_) { + continue; + } + + // If the line continues straight on along the same edge, skip this + // point. Some PDF generators emit a rectangle with an extra vertex in + // the middle of an edge. + const auto next = std::next(it); + if (next != points.end() && next->type_ == CFX_Path::Point::Type::kLine && + IsBetweenOnAxisAlignedLine(normalized.back().point_, point.point_, + next->point_)) { + continue; + } } normalized.push_back(point); diff --git a/core/fxge/cfx_path_unittest.cpp b/core/fxge/cfx_path_unittest.cpp index 1dc55ff108..fd8b3894bd 100644 --- a/core/fxge/cfx_path_unittest.cpp +++ b/core/fxge/cfx_path_unittest.cpp @@ -265,6 +265,17 @@ TEST(CFXPath, GetRectOppositeCorner) { ASSERT_EQ(CFX_PointF(2, 0), path.GetPoints()[2].point_); EXPECT_EQ(CFX_PointF(2, 1), path.GetRectOppositeCorner()); + // So does an extra point in the middle of the first edge. + path.Clear(); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); + path.AppendPoint({1, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({0, 1}, CFX_Path::Point::Type::kLine); + path.AppendPointAndClose({0, 0}, CFX_Path::Point::Type::kLine); + ASSERT_EQ(CFX_PointF(2, 0), path.GetPoints()[2].point_); + EXPECT_EQ(CFX_PointF(2, 1), path.GetRectOppositeCorner()); + path.Clear(); path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); path.AppendPoint({2, 0}, CFX_Path::Point::Type::kLine); @@ -273,6 +284,79 @@ TEST(CFXPath, GetRectOppositeCorner) { EXPECT_FALSE(path.GetRectOppositeCorner().has_value()); } +TEST(CFXPath, SixPlusPointRectWithCollinearPoints) { + // A rectangle with an extra point in the middle of its bottom edge, closed + // with "h". This is how some PDF generators emit rectangular clip paths. + CFX_Path path; + path.AppendPoint({0, 1}, CFX_Path::Point::Type::kMove); + path.AppendPoint({2, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({1, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kLine); + path.AppendPointAndClose({0, 1}, CFX_Path::Point::Type::kLine); + ASSERT_EQ(6u, path.GetPoints().size()); + EXPECT_TRUE(path.IsRect()); + std::optional rect = path.GetRect(nullptr); + ASSERT_TRUE(rect.has_value()); + EXPECT_EQ(CFX_FloatRect(0, 0, 2, 1), rect.value()); + + constexpr CFX_Matrix kScaleMatrix(1, 0, 0, 2, 60, 70); + rect = path.GetRect(&kScaleMatrix); + ASSERT_TRUE(rect.has_value()); + EXPECT_EQ(CFX_FloatRect(60, 70, 62, 72), rect.value()); + + // An extra point on a vertical edge. + path.Clear(); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); + path.AppendPoint({2, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 0.5f}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({0, 1}, CFX_Path::Point::Type::kLine); + path.AppendPointAndClose({0, 0}, CFX_Path::Point::Type::kLine); + EXPECT_TRUE(path.IsRect()); + rect = path.GetRect(nullptr); + ASSERT_TRUE(rect.has_value()); + EXPECT_EQ(CFX_FloatRect(0, 0, 2, 1), rect.value()); + + // Extra points on two edges. + path.Clear(); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); + path.AppendPoint({1, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({1, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({0, 1}, CFX_Path::Point::Type::kLine); + path.AppendPointAndClose({0, 0}, CFX_Path::Point::Type::kLine); + ASSERT_EQ(7u, path.GetPoints().size()); + EXPECT_TRUE(path.IsRect()); + rect = path.GetRect(&kScaleMatrix); + ASSERT_TRUE(rect.has_value()); + EXPECT_EQ(CFX_FloatRect(60, 70, 62, 72), rect.value()); + + // A point that goes past the corner and back is not in between its + // neighbors, so the path is not a rectangle. + path.Clear(); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); + path.AppendPoint({3, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 0}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({0, 1}, CFX_Path::Point::Type::kLine); + path.AppendPointAndClose({0, 0}, CFX_Path::Point::Type::kLine); + EXPECT_FALSE(path.IsRect()); + EXPECT_FALSE(path.GetRect(nullptr).has_value()); + + // Collinear points on a diagonal line are not dropped. + path.Clear(); + path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); + path.AppendPoint({1, 1}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 2}, CFX_Path::Point::Type::kLine); + path.AppendPoint({2, 3}, CFX_Path::Point::Type::kLine); + path.AppendPoint({0, 3}, CFX_Path::Point::Type::kLine); + path.AppendPointAndClose({0, 0}, CFX_Path::Point::Type::kLine); + EXPECT_FALSE(path.IsRect()); + EXPECT_FALSE(path.GetRect(nullptr).has_value()); +} + TEST(CFXPath, NotRect) { CFX_Path path; path.AppendPoint({0, 0}, CFX_Path::Point::Type::kMove); From 06fbf69b3a7d13a1faed654e02220806b98623d3 Mon Sep 17 00:00:00 2001 From: Copybara Date: Sat, 10 Oct 2026 14:12:38 -0700 Subject: [PATCH 71/72] CPDF_TextPage: Ignore non-finite page objects. Ensure the rectangle coordinates of page objects are finite before processing them, avoiding potential issues when clamping and converting non-finite float values to integers. Also reuse the retrieved rectangle to avoid redundant calls to GetRect(). Fixes UBSan `float-cast-overflow` bug: ``` CRASH LOG: SUMMARY: UndefinedBehaviorSanitizer: float-cast-overflow third_party/pdfium/HEAD/core/fpdftext/cpdf_textpage.cpp:674:9 (REDACTED) ``` PiperOrigin-RevId: 995805511 Change-Id: I1bff4d6a9019bcd337d3707616b1efb6dc893292 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/160330 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- core/fpdftext/cpdf_textpage.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp index a6133e9999..118051bd29 100644 --- a/core/fpdftext/cpdf_textpage.cpp +++ b/core/fpdftext/cpdf_textpage.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -670,14 +671,22 @@ CPDF_TextPage::TextOrientation CPDF_TextPage::FindTextlineFlowOrientation() continue; } + const CFX_FloatRect& rect = page_obj->GetRect(); + if (!std::isfinite(rect.left) || + !std::isfinite(rect.right) || + !std::isfinite(rect.bottom) || + !std::isfinite(rect.top)) { + continue; + } + int32_t minH = static_cast( - std::clamp(page_obj->GetRect().left, 0.0f, nPageWidth)); + std::clamp(rect.left, 0.0f, nPageWidth)); int32_t maxH = static_cast( - std::clamp(page_obj->GetRect().right, 0.0f, nPageWidth)); + std::clamp(rect.right, 0.0f, nPageWidth)); int32_t minV = static_cast( - std::clamp(page_obj->GetRect().bottom, 0.0f, nPageHeight)); + std::clamp(rect.bottom, 0.0f, nPageHeight)); int32_t maxV = static_cast( - std::clamp(page_obj->GetRect().top, 0.0f, nPageHeight)); + std::clamp(rect.top, 0.0f, nPageHeight)); if (minH >= maxH || minV >= maxV) { continue; } @@ -695,7 +704,7 @@ CPDF_TextPage::TextOrientation CPDF_TextPage::FindTextlineFlowOrientation() nEndV = std::max(nEndV, maxV); if (fLineHeight <= 0.0f) { - fLineHeight = page_obj->GetRect().Height(); + fLineHeight = rect.Height(); } } const int32_t nDoubleLineHeight = 2 * fLineHeight; From 9d16cd0019a83bb8e812030af1353b42c2b7935e Mon Sep 17 00:00:00 2001 From: Bob Singor Date: Tue, 13 Oct 2026 11:23:32 +0300 Subject: [PATCH 72/72] Disable libyuv for linuxmusl-arm64 The linuxmusl-arm64 target was failing because libyuv arm64 sources require dot-product, SVE2, and SME instructions that the musl GCC toolchain rejects. This disables libyuv for that target by setting pdf_use_libyuv=false in build-target.sh and documents the reason in the sync notes alongside the related build findings. --- docs/embedpdf/syncs/2026-10-13-06fbf69b3.md | 5 +++++ scripts/embedpdf-runtime/build-target.sh | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/embedpdf/syncs/2026-10-13-06fbf69b3.md b/docs/embedpdf/syncs/2026-10-13-06fbf69b3.md index 546d12c1e6..66c98ad009 100644 --- a/docs/embedpdf/syncs/2026-10-13-06fbf69b3.md +++ b/docs/embedpdf/syncs/2026-10-13-06fbf69b3.md @@ -99,6 +99,11 @@ guard is a debug check). wasm32 build on a Mac stopped in `gn gen`. `build-target.sh` passes `use_system_xcode=true` for wasm32 on a macOS host (what the darwin builds compute on the same machine). CI builds wasm32 on Ubuntu and never reads it. +- linuxmusl-arm64 builds without libyuv (`pdf_use_libyuv=false` in `build-target.sh`): the PR's + CI failed in libyuv's `compare_neon64.cc`, whose `udot` (dot product) the musl GCC toolchain's + assembler rejects, even with libyuv's `-march=armv8-a+dotprod+i8mm`; libyuv's SVE2 and SME + files ask for newer extensions still. PDFium keeps its own loops for that setting, which is the + code this target ran before S9. The clang targets keep libyuv. - The other patches apply (dry-run against the new `build/`): `win/build.patch` (S7's Windows SDK fix), `wasm/build.patch`, `musl/build.patch`, `musl/pdfium.patch`, `shared-library.patch`, `skia/geometry-only-stroke.patch`. darwin-arm64 and wasm32 applied and built. diff --git a/scripts/embedpdf-runtime/build-target.sh b/scripts/embedpdf-runtime/build-target.sh index ae9746aa6c..3a55676881 100755 --- a/scripts/embedpdf-runtime/build-target.sh +++ b/scripts/embedpdf-runtime/build-target.sh @@ -58,7 +58,10 @@ case "$TARGET" in linuxmusl-arm64) GN_TARGET_OS="linux" GN_TARGET_CPU="arm64" - EXTRA_ARGS=$'\nis_musl=true\nis_clang=false\nuse_sysroot=false\nuse_custom_libcxx=false\nuse_custom_libcxx_for_host=false\nuse_glib=false' + # No libyuv: its arm64 sources use dot-product, SVE2 and SME instructions, + # and the musl GCC toolchain's assembler rejects them. PDFium keeps its own + # loops for pdf_use_libyuv=false. + EXTRA_ARGS=$'\nis_musl=true\nis_clang=false\nuse_sysroot=false\nuse_custom_libcxx=false\nuse_custom_libcxx_for_host=false\nuse_glib=false\npdf_use_libyuv=false' ;; win32-x64) GN_TARGET_OS="win"

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 diff --git a/testing/resources/embedder_tests/annotation_stamp_with_ap_new_annot_skia.png b/testing/resources/embedder_tests/annotation_stamp_with_ap_new_annot_skia.png index cba0a705408b49378463360c0025b90432c38863..7ded6a38465add50598965b2820f1feeaa086bb0 100644 GIT binary patch literal 55437 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