Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package chromium for openSUSE:Factory 
checked in at 2026-11-04 19:45:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/chromium (Old)
 and      /work/SRC/openSUSE:Factory/.chromium.new.3759290 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "chromium"

Wed Nov  4 19:45:05 2026 rev:559 rq:1394800 version:157.0.8103.38

Changes:
--------
--- /work/SRC/openSUSE:Factory/chromium/chromium.changes        2026-10-31 
23:08:17.594730921 +0100
+++ /work/SRC/openSUSE:Factory/.chromium.new.3759290/chromium.changes   
2026-11-04 19:48:11.820278314 +0100
@@ -1,0 +2,266 @@
+Tue Nov  3 21:39:13 UTC 2026 - Andreas Stieger <[email protected]>
+
+- Chromium 157 (157.0.8103.38) promoted to stable (boo#1289268):
+  * CVE-2026-121156: Buffer overflow in Dawn
+  * CVE-2026-121229: Memory corruption in ANGLE
+  * CVE-2026-121246: Use after free in WebGL
+  * CVE-2026-121035: Use after free in Prerender
+  * CVE-2026-121247: Buffer overflow in Dawn
+  * CVE-2026-121203: Use after free in Geometry
+  * CVE-2026-121126: Use after free in Core
+  * CVE-2026-121107: Incorrect authorization in BackgroundFetch
+  * CVE-2026-121197: Out of bounds read in ANGLE
+  * CVE-2026-121112: Out of bounds read in Permissions
+  * CVE-2026-121174: Missing authorization in BackgroundFetch
+  * CVE-2026-121098: Improper state validation in GPU
+  * CVE-2026-121074: Memory corruption in GPU
+  * CVE-2026-121173: Uninitialized resource in WebGL
+  * CVE-2026-121233: Type confusion in CacheStorage
+  * CVE-2026-121140: Out of bounds read in Internals
+  * CVE-2026-121095: Uninitialized resource in WebGL
+  * CVE-2026-121071: Incorrect authorization in FileSystem
+  * CVE-2026-121207: Uninitialized resource in Dawn
+  * CVE-2026-121185: Use after free in PictureInPicture
+  * CVE-2026-121166: Type confusion in PDFium
+  * CVE-2026-121047: Buffer overflow in Media
+  * CVE-2026-121124: Improper adherence to coding standards in XML
+  * CVE-2026-121118: Use after free in SVG
+  * CVE-2026-121188: Use after free in PerformanceAPIs
+  * CVE-2026-121113: Buffer overflow in PDFium
+  * CVE-2026-121082: Type confusion in V8
+  * CVE-2026-121083: Use after free in Compositing
+  * CVE-2026-121179: Use after free in PDFium
+  * CVE-2026-121180: Buffer overflow in Media
+  * CVE-2026-121181: Use after free in Editing
+  * CVE-2026-121228: Type confusion in V8
+  * CVE-2026-121080: Use after free in Codecs
+  * CVE-2026-121044: Use after free in Layout
+  * CVE-2026-121051: UI misrepresentation in iOSWeb
+  * CVE-2026-121038: Information leak in Compositing
+  * CVE-2026-121090: Improper privilege management in Navigation
+  * CVE-2026-121052: Use after free in GPU
+  * CVE-2026-121037: Out of bounds write in ANGLE
+  * CVE-2026-121086: Buffer overflow in Skia
+  * CVE-2026-121131: Use after free in Mobile
+  * CVE-2026-121087: Improper input validation in Mobile
+  * CVE-2026-121178: Use after free in Aura
+  * CVE-2026-121100: Use after free in DOM
+  * CVE-2026-121148: Use after free in ANGLE
+  * CVE-2026-121089: Use after free in WebGPU
+  * CVE-2026-121250: Use after free in Extensions
+  * CVE-2026-121032: Out of bounds read in Skia
+  * CVE-2026-121114: Use after free in TabStrip
+  * CVE-2026-121127: Use after free in WebAudio
+  * CVE-2026-121210: Type confusion in V8
+  * CVE-2026-121057: Type confusion in V8
+  * CVE-2026-121201: Use after free in Animation
+  * CVE-2026-121084: Out of bounds read in Skia
+  * CVE-2026-121094: Type confusion in V8
+  * CVE-2026-121079: Race condition in V8
+  * CVE-2026-121143: Uninitialized resource in GPU
+  * CVE-2026-121097: Use after free in Printing
+  * CVE-2026-121214: Use after free in Passwords
+  * CVE-2026-121133: Incorrect reference resolution in Images
+  * CVE-2026-121249: Buffer overflow in ANGLE
+  * CVE-2026-121213: Uninitialized resource in Images
+  * CVE-2026-121241: Use after free in Navigation
+  * CVE-2026-121224: Security issue in Desktop
+  * CVE-2026-121117: Use after free in Paint
+  * CVE-2026-121123: Use after free in Canvas
+  * CVE-2026-121182: Use after free in DOM
+  * CVE-2026-121061: Use after free in Modularization
+  * CVE-2026-121227: Uninitialized resource in Skia
+  * CVE-2026-121226: Type confusion in V8
+  * CVE-2026-121068: Type confusion in V8
+  * CVE-2026-121137: Type confusion in DevTools
+  * CVE-2026-121160: Out of bounds read in Skia
+  * CVE-2026-121036: Use after free in CSS
+  * CVE-2026-121104: Incorrect authorization in FileSystem
+  * CVE-2026-121034: Use after free in Views
+  * CVE-2026-121208: Out of bounds read in Media
+  * CVE-2026-121129: Use after free in WebRTC
+  * CVE-2026-121211: Use after free in PowerBookmarks
+  * CVE-2026-121078: Type confusion in V8
+  * CVE-2026-121060: Incorrect authorization in FileSystem
+  * CVE-2026-121076: Use after free in WebXR
+  * CVE-2026-121221: Type confusion in V8
+  * CVE-2026-121119: Use after free in Controls
+  * CVE-2026-121244: UI misrepresentation in FileAPI
+  * CVE-2026-121242: Improper input validation in WebPackaging
+  * CVE-2026-121105: Information leak in Network
+  * CVE-2026-121237: Improper state validation in FileSystem
+  * CVE-2026-121102: Missing authorization in BackgroundFetch
+  * CVE-2026-121120: Improper input validation in Prerender
+  * CVE-2026-121161: Information leak in BackgroundFetch
+  * CVE-2026-121062: Incorrect authorization in API
+  * CVE-2026-121031: Missing authorization in PDF
+  * CVE-2026-121063: Incorrect authorization in CacheStorage
+  * CVE-2026-121108: Confused deputy in BackgroundFetch
+  * CVE-2026-121199: Missing authorization in Chromoting
+  * CVE-2026-121099: Information leak in PrivateTokens
+  * CVE-2026-121196: Privilege elevation in Mobile
+  * CVE-2026-121066: Incorrect authorization in Extensions
+  * CVE-2026-121256: Use of released resource in GPU
+  * CVE-2026-121115: Improper input validation in Shopping
+  * CVE-2026-121234: Privilege elevation in Contacts
+  * CVE-2026-121177: UI misrepresentation in PageInfo
+  * CVE-2026-121193: Incorrect authorization in Extensions
+  * CVE-2026-121248: Incorrect authorization in API
+  * CVE-2026-121106: Information leak in Omnibox
+  * CVE-2026-121200: Incorrect reference resolution in DevTools
+  * CVE-2026-121039: Incorrect authorization in Proxy Auth
+  * CVE-2026-121122: UI misrepresentation in Prompts
+  * CVE-2026-121219: Integer overflow in GPU
+  * CVE-2026-121255: Incorrect authorization in Autofill AI
+  * CVE-2026-121231: Incorrect authorization in DevTools
+  * CVE-2026-121183: Incorrect authorization in Extensions
+  * CVE-2026-121072: Uninitialized resource in Skia
+  * CVE-2026-121103: Incorrect authorization in Extensions
+  * CVE-2026-121136: Missing authorization in DevTools
+  * CVE-2026-121040: Incorrect authorization in Core
+  * CVE-2026-121030: Incorrect authorization in DevTools
+  * CVE-2026-121075: Missing authorization in DevTools
+  * CVE-2026-121220: Incorrect authorization in Core
+  * CVE-2026-121170: Improper resource control in WebCodecs
+  * CVE-2026-121059: Information leak in Core
+  * CVE-2026-121163: Improper input validation in Browser
+  * CVE-2026-121088: Missing authorization in PerformanceAPIs
+  * CVE-2026-121033: Uninitialized resource in GPU
+  * CVE-2026-121254: Information leak in Select
+  * CVE-2026-121065: Incorrect authorization in DevTools
+  * CVE-2026-121171: Confused deputy in DevTools
+  * CVE-2026-121116: Missing authorization in WebView
+  * CVE-2026-121239: Information leak in Core
+  * CVE-2026-121187: Observable discrepancy in Paint
+  * CVE-2026-121132: Information leak in V8
+  * CVE-2026-121067: UI misrepresentation in PermissionElement
+  * CVE-2026-121096: Incomplete cleanup in V8
+  * CVE-2026-121184: Out of bounds read in Media
+  * CVE-2026-121215: UI misrepresentation in Bluetooth
+  * CVE-2026-121212: Incorrect authorization in Core
+  * CVE-2026-121194: Missing authorization in SiteIsolation
+  * CVE-2026-121202: Use after free in Autofill
+  * CVE-2026-121048: Race condition in V8
+  * CVE-2026-121070: Use after free in WTF
+  * CVE-2026-121257: Use after free in TabStrip
+  * CVE-2026-121218: Type confusion in V8
+  * CVE-2026-121164: Incorrect authorization in Views
+  * CVE-2026-121223: Observable discrepancy in Media
+  * CVE-2026-121186: UI misrepresentation in Passwords
+  * CVE-2026-121176: Uninitialized resource in Media
+  * CVE-2026-121128: Use after free in Scheduling
+  * CVE-2026-121216: UI misrepresentation in UI
+  * CVE-2026-121158: Information leak in Paint
+  * CVE-2026-121110: UI misrepresentation in Shopping
+  * CVE-2026-121042: Incorrect authorization in Permissions
+  * CVE-2026-121238: Use after free in Source
+  * CVE-2026-121077: Use after free in Mobile
+  * CVE-2026-121245: Race condition in Autofill
+  * CVE-2026-121049: Out of bounds read in V8
+  * CVE-2026-121091: Incorrect authorization in Permissions
+  * CVE-2026-121167: Incorrect authorization in Permissions
+  * CVE-2026-121135: Security issue in Platform
+  * CVE-2026-121209: UI misrepresentation in Input
+  * CVE-2026-121134: Information loss in BackgroundFetch
+  * CVE-2026-121217: Use after free in Streaming
+  * CVE-2026-121109: Inadequate encryption strength in SSL
+  * CVE-2026-121243: Information leak in Frames
+  * CVE-2026-121053: UI misrepresentation in Transactions Platform
+  * CVE-2026-121190: UI misrepresentation in Extensions
+  * CVE-2026-121125: Information leak in ServiceWorker
+  * CVE-2026-121046: Incorrect authorization in WebAppInstalls
+  * CVE-2026-121222: Incorrect authorization in Forms
+  * CVE-2026-121157: Incorrect authorization in Chromoting
+  * CVE-2026-121235: Information leak in Paint
+  * CVE-2026-121252: Incorrect authorization in Core
+  * CVE-2026-121168: Improper resource exposure in DevTools
+  * CVE-2026-121043: UI misrepresentation in Payments
+  * CVE-2026-121111: Incorrect authorization in HID
+  * CVE-2026-121138: Observable discrepancy in CORS
+  * CVE-2026-121055: Incomplete cleanup in DevTools
+  * CVE-2026-121101: Missing authorization in DevTools
+  * CVE-2026-121236: Improper input validation in Network
+  * CVE-2026-121165: UI misrepresentation in Mobile
+  * CVE-2026-121253: Missing authorization in DevTools
+  * CVE-2026-121172: Incorrect authorization in Isolated
+  * CVE-2026-121206: UI misrepresentation in Isolated
+  * CVE-2026-121189: Use after free in Browser
+  * CVE-2026-121121: UI misrepresentation in PageInfo
+  * CVE-2026-121130: Observable discrepancy in Forms
+  * CVE-2026-121251: Missing authorization in V8
+  * CVE-2026-121085: Incorrect authorization in WebUI
+  * CVE-2026-121159: Incorrect authorization in History
+  * CVE-2026-121204: Incomplete cleanup in DevTools
+  * CVE-2026-121205: Incorrect authorization in CORS
+  * CVE-2026-121050: Race condition in Mobile
+  * CVE-2026-121081: UI misrepresentation in Passwords
+  * CVE-2026-121240: Improper input validation in Variations
+  * CVE-2026-121198: Confused deputy in WebUI
+  * CVE-2026-121225: Incorrect authorization in Permissions
+  * CVE-2026-121162: UI misrepresentation in Notifications
+  * CVE-2026-121045: UI misrepresentation in Browser
+  * CVE-2026-121029: Incorrect authorization in ORB
+  * CVE-2026-121054: Improper state validation in XML
+  * CVE-2026-121175: Improper resource exposure in ORB
+  * CVE-2026-121092: Uncontrolled recursion in SVG
+  * CVE-2026-121073: Use after free in Network
+  * CVE-2026-121230: Race condition in ANGLE
+  * CVE-2026-121093: Out of bounds read in Animation
+  * CVE-2026-121041: Missing authorization in Input
+  * CVE-2026-121232: Incorrect authorization in Core
+  * CVE-2026-121142: Incorrect authorization in Network
+  * CVE-2026-121069: Use after free in Track
+  * CVE-2026-121169: Missing authorization in DevTools
+  * CVE-2026-121064: Improper input validation in Performance
+  * CVE-2026-121195: Incorrect authorization in TrustedTypes
+  * CVE-2026-121141: Improper input validation in Editing
+
+-------------------------------------------------------------------
+Sat Oct 31 22:34:34 UTC 2026 - Ruediger Oertel <[email protected]>
+
+- disable v8 metagen
+
+-------------------------------------------------------------------
+Sat Oct 31 19:04:41 UTC 2026 - Ruediger Oertel <[email protected]>
+
+- Chromium 157.0.8103.15 (beta released 2026-10-22) 
+- modified patches:
+  * chromium-127-bindgen.patch
+  * chromium-127-rust-clanglib.patch
+  * chromium-141-csss_style_sheet.patch
+  * chromium-143-libpng-unbundle.patch
+  * chromium-148-no_dep_on_intree_rustc_binary.patch
+  * chromium-148-only_address_sanitizer.patch
+  * chromium-152-no-eula.patch
+  * chromium-154-revert-crubit_web_package.patch
+  * chromium-154-verification-tokens.patch
+  * chromium-155-v8-clang-path.patch
+  * chromium-156-revert_ift_patcher.patch
+  * chromium-162dc276a85b4f7d353adbe312d05d8e7a4c28e3.patch
+  * ppc-fedora-0001-Add-PPC64-support-for-boringssl.patch
+  * ppc-fedora-0002-Add-PPC64-generated-files-for-boringssl.patch
+  * ppc-fedora-0002-regenerate-xnn-buildgn.patch
+  * ppc-fedora-skia-vsx-instructions.patch
+- added patches:
+  * chromium-e0f704daa316a959feb165460602f4ed982e718f.patch
+    (applied reversed)
+  * chromium-7d76145781dca8ca4b26ee412360bf9e9c0a3b70.patch
+    (applied reversed)
+  * chromium-72777c30be767d4f192f2a3ca94e838e0b83550e.patch
+    (applied reversed)
+  * chromium-157-revert_ift_patcher.patch
+  * chromium-157-drop-distinct_counter.patch
+- require at least llvm21 to build and drop llvm19 patches
+- dropped patches:
+  * chromium-146-clang-19-crash.patch
+  * chromium-146-static-assert.patch
+  * chromium-148-revert_std_ranges_iota.patch
+  * chromium-150-i18n-builder-enum.patch
+  * chromium-151-constexpr.patch
+  * chromium-151-privatefriends.patch
+  * chromium-152-no-warning-suppression-map.patch
+- keeplibs:
+  added: third_party/sframe
+  added: third_party/openscreen/src/third_party/simple_dns/src
+
+-------------------------------------------------------------------

Old:
----
  chromium-146-clang-19-crash.patch
  chromium-146-static-assert.patch
  chromium-148-revert_std_ranges_iota.patch
  chromium-150-i18n-builder-enum.patch
  chromium-151-constexpr.patch
  chromium-151-privatefriends.patch
  chromium-152-no-warning-suppression-map.patch
  chromium-156.0.8078.73-linux.tar.xz
  chromium-156.0.8078.79-linux.tar.xz

New:
----
  chromium-157-drop-distinct_counter.patch
  chromium-157-revert_ift_patcher.patch
  chromium-157.0.8103.38-linux.tar.xz
  chromium-72777c30be767d4f192f2a3ca94e838e0b83550e.patch
  chromium-7d76145781dca8ca4b26ee412360bf9e9c0a3b70.patch
  chromium-e0f704daa316a959feb165460602f4ed982e718f.patch

----------(Old B)----------
  Old:- dropped patches:
  * chromium-146-clang-19-crash.patch
  * chromium-146-static-assert.patch
  Old:  * chromium-146-clang-19-crash.patch
  * chromium-146-static-assert.patch
  * chromium-148-revert_std_ranges_iota.patch
  Old:  * chromium-146-static-assert.patch
  * chromium-148-revert_std_ranges_iota.patch
  * chromium-150-i18n-builder-enum.patch
  Old:  * chromium-148-revert_std_ranges_iota.patch
  * chromium-150-i18n-builder-enum.patch
  * chromium-151-constexpr.patch
  Old:  * chromium-150-i18n-builder-enum.patch
  * chromium-151-constexpr.patch
  * chromium-151-privatefriends.patch
  Old:  * chromium-151-constexpr.patch
  * chromium-151-privatefriends.patch
  * chromium-152-no-warning-suppression-map.patch
  Old:  * chromium-151-privatefriends.patch
  * chromium-152-no-warning-suppression-map.patch
- keeplibs:
----------(Old E)----------

----------(New B)----------
  New:  * chromium-157-revert_ift_patcher.patch
  * chromium-157-drop-distinct_counter.patch
- require at least llvm21 to build and drop llvm19 patches
  New:    (applied reversed)
  * chromium-157-revert_ift_patcher.patch
  * chromium-157-drop-distinct_counter.patch
  New:    (applied reversed)
  * chromium-72777c30be767d4f192f2a3ca94e838e0b83550e.patch
    (applied reversed)
  New:    (applied reversed)
  * chromium-7d76145781dca8ca4b26ee412360bf9e9c0a3b70.patch
    (applied reversed)
  New:- added patches:
  * chromium-e0f704daa316a959feb165460602f4ed982e718f.patch
    (applied reversed)
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ chromium.spec ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:49.835868080 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:49.840868289 +0100
@@ -66,16 +66,13 @@
 %define llvm_version 23
 %define llvm_version_long 23.1
 %define llvm_version_long_plus 23.2
-# RUST version
-%define rust_version 1.94
 %else
-# LLVM version
-%define llvm_version 19
-%define llvm_version_long 19.1
-%define llvm_version_long_plus 19.2
-# RUST version
-%define rust_version 1.92
+%define llvm_version 21
+%define llvm_version_long 21.1
+%define llvm_version_long_plus 22.2
 %endif
+# RUST version
+%define rust_version 1.94
 # GCC version
 %define gcc_version 14
 # minimal esbuild version
@@ -139,7 +136,7 @@
 %global official_build 1
 
 Name:           chromium%{n_suffix}
-Version:        156.0.8078.79
+Version:        157.0.8103.38
 Release:        0
 Summary:        Google's open source browser project
 License:        BSD-3-Clause AND LGPL-2.1-or-later
@@ -227,6 +224,8 @@
 Patch414:       chromium-156-revert_ift_patcher.patch
 Patch415:       chromium-156-verification-tokens.patch
 Patch416:       chromium-156-blink_static_cast.patch
+Patch417:       chromium-157-revert_ift_patcher.patch
+Patch418:       chromium-157-drop-distinct_counter.patch
 # conditionally applied patches ppc64le only
 # where applicable patch numbers from fedora specfile + 100
 Patch452:       ppc-fedora-memory-allocator-dcheck-assert-fix.patch
@@ -307,26 +306,21 @@
 # only in ffmpeg avutil >= 60.31
 Patch1051:      chromium-150-ffmpeg_no_agtm.patch
 Patch1052:      chromium-162dc276a85b4f7d353adbe312d05d8e7a4c28e3.patch
-Patch1061:       chromium-146-static-assert.patch
-# llvm19 segfaults in
-# 
../services/network/public/cpp/permissions_policy/origin_with_possible_wildcards.cc:99:1:
 current parser token 'std'
-Patch1062:       chromium-146-clang-19-crash.patch
+Patch1053:      chromium-e0f704daa316a959feb165460602f4ed982e718f.patch
 # error:  [44980s] 
../components/enterprise/client_certificates/core/private_key_factory.cc:126:14:
 error: expression is not assignable
 Patch1064:       chromium-146-keyfactory.patch
-Patch1065:       chromium-150-i18n-builder-enum.patch
 # error with llvm < 23
 # clang++: error: unknown argument: 
'-fsanitize-ignore-for-ubsan-feature=array-bounds'
 Patch1066:       chromium-146-ignore-for-ubsan.patch
 Patch1067:       chromium-146-bytemuck.patch
 Patch1068:       chromium-148-only_address_sanitizer.patch
-# error: no member named 'iota' in namespace 'std::ranges'
-Patch1069:       chromium-148-revert_std_ranges_iota.patch
 Patch1071:       chromium-150-raw-ref-map-find.patch
-Patch1072:       chromium-151-privatefriends.patch
-Patch1073:       chromium-151-constexpr.patch
 Patch1074:       chromium-152-no-lifetime-checks.patch 
-Patch1075:       chromium-152-no-warning-suppression-map.patch
 Patch1080:       rollup.patch
+# next crubit revert
+Patch1081:       chromium-7d76145781dca8ca4b26ee412360bf9e9c0a3b70.patch
+# revert, none of our llvm versions accepts this
+Patch1082:       chromium-72777c30be767d4f192f2a3ca94e838e0b83550e.patch
 # end conditionally applied patches
 BuildRequires:  SDL-devel
 BuildRequires:  bison
@@ -592,6 +586,11 @@
 %autopatch -p1 -m 450 -M 599
 %endif
 
+# more crubit reverts
+%patch -p1 -R -P 1081
+# revert, not even llvm23 accepts this
+%patch -p1 -R -P 1082
+
 %if %{without libxml2_2_12}
 %patch -p1 -P 1010
 %endif
@@ -611,22 +610,14 @@
 
 # GetAgtmSideData is only in libavutil >= 60.31, ffmpeg > 8.1
 %if %{with system_ffmpeg}
+%patch -p1 -R -P 1053
 %patch -p1 -R -P 1052
 %patch -p1 -P 1051
 %endif
 
-clang_version="$(clang-%{llvm_version} --version | sed -n 's/clang version 
//p')"
-if [[ $(echo ${clang_version} | cut -d. -f1) -lt 21 ]]; then
-%patch -p1 -P 1061
-%patch -p1 -P 1062
-%patch -p1 -P 1065
-%patch -p1 -P 1069
-%patch -p1 -P 1072
-%patch -p1 -P 1073
-%patch -p1 -P 1075
-fi
 %patch -p1 -P 1064
 
+clang_version="$(clang-%{llvm_version} --version | sed -n 's/clang version 
//p')"
 if [[ $(echo ${clang_version} | cut -d. -f1) -lt 23 ]]; then
 %patch -p1 -P 1066
 %patch -p1 -P 1067
@@ -667,6 +658,11 @@
 
 %build
 
+ccache -o compression=true
+ccache -o compression_level=3
+ccache -o max_size=30G
+ccache -o sloppiness=gcno_cwd
+ccache -o hash_dir=false
 ccache --show-config
 # Zero out the hit/miss stats from previous runs to have data from this build
 ccache --zero-stats
@@ -924,6 +920,7 @@
     third_party/omnibox_proto
     third_party/one_euro_filter
     third_party/openscreen
+    third_party/openscreen/src/third_party/simple_dns/src
     third_party/openscreen/src/third_party/tinycbor/src/src
     third_party/ots
     third_party/pdfium
@@ -960,6 +957,7 @@
     third_party/selenium-atoms
     third_party/sentencepiece
     third_party/sentencepiece/src/third_party/darts_clone
+    third_party/sframe
     third_party/shell-encryption
     third_party/simdutf
     third_party/simplejson
@@ -1272,8 +1270,10 @@
 %endif
 myconf_gn+=" use_v8_context_snapshot=true"
 myconf_gn+=" v8_use_external_startup_data=true"
-myconf_gn+=" v8_metagen_libclang_so=\"%{_prefix}/lib64/libclang.so\""
-myconf_gn+=" 
v8_metagen_libclang_bindings_dir=\"$RPM_BUILD_DIR/%{?buildsubdir}/python-clang\""
+# new flag as of 20261006
+myconf_gn+=" v8_use_metagen=false"
+# flag until 20261006
+myconf_gn+=" v8_use_metagen_instance_types=false"
 myconf_gn+=" rust_sysroot_absolute=\"%{_prefix}\""
 myconf_gn+=" rust_bindgen_root=\"%{_prefix}\""
 myconf_gn+=" rustc_version=\"$rustc_version\""

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:50.271886345 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:50.278886638 +0100
@@ -1,7 +1,7 @@
-mtime: 1793337678
-commit: cf2187aed68248c277b8b3dd1b905626cf3a6d5c44abcd58d8c308691dbbfca8
+mtime: 1793743932
+commit: 857c7bf44d1390a0c732f88ab2499dd95e8e902d5f1c6ce34e72b66bf6497884
 url: https://src.opensuse.org/chromium/chromium
-revision: cf2187aed68248c277b8b3dd1b905626cf3a6d5c44abcd58d8c308691dbbfca8
+revision: 857c7bf44d1390a0c732f88ab2499dd95e8e902d5f1c6ce34e72b66bf6497884
 trackingbranch: main
 projectscmsync: https://src.opensuse.org/chromium/_ObsPrj.git
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-11-03 23:12:12.000000000 +0100
@@ -0,0 +1,4 @@
+.osc
+*.patch~
+*-build/
+.*.swp

++++++ chromium-127-bindgen.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:50.575899080 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:50.580899290 +0100
@@ -8,17 +8,17 @@
 fix should probably go upstream.
 
 
-Index: chromium-144.0.7524.0/build/rust/rust_bindgen.gni
+Index: chromium-157.0.8103.15/build/rust/rust_bindgen_generator.gni
 ===================================================================
---- chromium-144.0.7524.0.orig/build/rust/rust_bindgen.gni
-+++ chromium-144.0.7524.0/build/rust/rust_bindgen.gni
-@@ -19,7 +19,7 @@ if (host_os == "win") {
+--- chromium-157.0.8103.15.orig/build/rust/rust_bindgen_generator.gni
++++ chromium-157.0.8103.15/build/rust/rust_bindgen_generator.gni
+@@ -22,7 +22,7 @@ if (!use_chromium_rust_toolchain &&
  
  # On Windows, the libclang.dll is beside the bindgen.exe, otherwise it is in
  # ../lib.
 -_libclang_path = rust_bindgen_root
 +_libclang_path = clang_base_path
  if (!use_chromium_rust_toolchain &&
-     (current_cpu == "ppc64" || current_cpu == "s390x")) {
+     (host_cpu == "ppc64" || host_cpu == "s390x")) {
    _libclang_path = rust_sysroot_absolute + "/lib64"
 

++++++ chromium-127-rust-clanglib.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:50.606900379 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:50.614900714 +0100
@@ -1,17 +1,8 @@
-Index: chromium-144.0.7524.0/build/rust/rust_bindgen.gni
+Index: chromium-157.0.8103.15/build/rust/rust_bindgen.gni
 ===================================================================
---- chromium-144.0.7524.0.orig/build/rust/rust_bindgen.gni
-+++ chromium-144.0.7524.0/build/rust/rust_bindgen.gni
-@@ -26,7 +26,7 @@ if (!use_chromium_rust_toolchain &&
- } else if (host_os == "win") {
-   _libclang_path += "/bin"
- } else {
--  _libclang_path += "/lib"
-+  _libclang_path += "/lib64"
- }
- 
- # Template to build Rust/C bindings with bindgen.
-@@ -135,6 +135,13 @@
+--- chromium-157.0.8103.15.orig/build/rust/rust_bindgen.gni
++++ chromium-157.0.8103.15/build/rust/rust_bindgen.gni
+@@ -136,6 +136,13 @@ template("rust_bindgen") {
        deps += [ ":${_rust_bindgen_generator_target_name}_static_fns" ]
      }
  
@@ -25,11 +16,11 @@
      rustflags = [
        # Don't warn about unused code in the generated bindings.
        "-Adead_code",
-Index: chromium-144.0.7524.0/build/rust/rust_bindgen_generator.gni
+Index: chromium-157.0.8103.15/build/rust/rust_bindgen_generator.gni
 ===================================================================
---- chromium-144.0.7524.0.orig/build/rust/rust_bindgen_generator.gni
-+++ chromium-144.0.7524.0/build/rust/rust_bindgen_generator.gni
-@@ -33,7 +33,7 @@ if (!use_chromium_rust_toolchain &&
+--- chromium-157.0.8103.15.orig/build/rust/rust_bindgen_generator.gni
++++ chromium-157.0.8103.15/build/rust/rust_bindgen_generator.gni
+@@ -29,7 +29,7 @@ if (!use_chromium_rust_toolchain &&
  } else if (host_os == "win") {
    _libclang_path += "/bin"
  } else {
@@ -38,13 +29,13 @@
  }
  
  # Template to build Rust/C bindings with bindgen.
-@@ -269,6 +269,8 @@ template("rust_bindgen_generator") {
+@@ -223,6 +223,8 @@ template("rust_bindgen_generator") {
      # causes bindgen not to emit function bindings. Override it.
      if (!is_win) {
        args += [ "-fvisibility=default" ]
 +      args += [ "-I/usr/include/c++/v1" ]
 +      args += [ "-I/usr/lib64/clang/" + clang_version + "/include" ]
      }
- 
-     if (is_win) {
+     if (!defined(_library_name) || !_wrap_static_fns) {
+       not_needed([ _bindgen_target_name ])
 

++++++ chromium-141-csss_style_sheet.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:50.698904233 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:50.703904442 +0100
@@ -3,15 +3,16 @@
 v8/include/cppgc/visitor.h:440:19: error: invalid application of 'sizeof' to 
an incomplete type 'blink::CSSStyleSheet'
   440 |     static_assert(sizeof(T), "Pointee type must be fully defined.");
 
-diff -up 
chromium-141.0.7390.37/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py.ftbfs-csss_style_sheet
 
chromium-141.0.7390.37/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py
---- 
chromium-141.0.7390.37/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py.ftbfs-csss_style_sheet
     2025-09-23 22:21:14.000000000 +0200
-+++ 
chromium-141.0.7390.37/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py
    2025-10-01 17:55:51.303926035 +0200
-@@ -433,6 +433,7 @@ def generate_observable_array(observable
-     header_node.accumulator.add_include_headers([
-         component_export_header(api_component, for_testing),
-         "third_party/blink/renderer/bindings/core/v8/idl_types.h",
-+        "third_party/blink/renderer/core/css/css_style_sheet.h",
-         "third_party/blink/renderer/platform/bindings/observable_array.h",
-     ])
-     source_node.accumulator.add_include_headers([
+Index: 
chromium-157.0.8103.15/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py
+===================================================================
+--- 
chromium-157.0.8103.15.orig/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py
++++ 
chromium-157.0.8103.15/third_party/blink/renderer/bindings/scripts/bind_gen/observable_array.py
+@@ -531,6 +531,7 @@ def generate_observable_array(observable
+         [
+             component_export_header(api_component, for_testing),
+             "third_party/blink/renderer/bindings/core/v8/idl_types.h",
++            "third_party/blink/renderer/core/css/css_style_sheet.h",
+             "third_party/blink/renderer/platform/bindings/observable_array.h",
+         ]
+     )
 

++++++ chromium-143-libpng-unbundle.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:50.758906747 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:50.763906956 +0100
@@ -1,8 +1,8 @@
-Index: chromium-152.0.7977.8/testing/libfuzzer/fuzzers/BUILD.gn
+Index: chromium-157.0.8103.15/testing/libfuzzer/fuzzers/BUILD.gn
 ===================================================================
---- chromium-152.0.7977.8.orig/testing/libfuzzer/fuzzers/BUILD.gn
-+++ chromium-152.0.7977.8/testing/libfuzzer/fuzzers/BUILD.gn
-@@ -166,7 +166,7 @@ fuzzer_test("libpng_progressive_read_fuz
+--- chromium-157.0.8103.15.orig/testing/libfuzzer/fuzzers/BUILD.gn
++++ chromium-157.0.8103.15/testing/libfuzzer/fuzzers/BUILD.gn
+@@ -139,7 +139,7 @@ fuzzer_test("libpng_progressive_read_fuz
    deps = [
      "//base",
      "//testing/libfuzzer:libfuzzer_base_wrappers",
@@ -11,10 +11,10 @@
    ]
    dict = "dicts/png.dict"
    seed_corpuses = libpng_seed_corpuses
-Index: chromium-152.0.7977.8/tools/imagediff/BUILD.gn
+Index: chromium-157.0.8103.15/tools/imagediff/BUILD.gn
 ===================================================================
---- chromium-152.0.7977.8.orig/tools/imagediff/BUILD.gn
-+++ chromium-152.0.7977.8/tools/imagediff/BUILD.gn
+--- chromium-157.0.8103.15.orig/tools/imagediff/BUILD.gn
++++ chromium-157.0.8103.15/tools/imagediff/BUILD.gn
 @@ -48,7 +48,7 @@ if (current_toolchain == imagediff_toolc
      deps = [
        "//base",
@@ -24,11 +24,11 @@
        "//third_party/zlib",
      ]
    }
-Index: chromium-152.0.7977.8/chrome/test/BUILD.gn
+Index: chromium-157.0.8103.15/chrome/test/BUILD.gn
 ===================================================================
---- chromium-152.0.7977.8.orig/chrome/test/BUILD.gn
-+++ chromium-152.0.7977.8/chrome/test/BUILD.gn
-@@ -8459,7 +8459,7 @@ if (!is_android) {
+--- chromium-157.0.8103.15.orig/chrome/test/BUILD.gn
++++ chromium-157.0.8103.15/chrome/test/BUILD.gn
+@@ -4319,7 +4319,7 @@ if (!is_android) {
          "//testing/gtest",
          "//third_party/hunspell",
          "//third_party/icu",
@@ -37,16 +37,7 @@
          "//ui/base:test_support",
          "//ui/events:test_support",
          "//ui/ozone",
-@@ -8848,7 +8848,7 @@ if (!is_android && !is_chromeos_device)
-       "//testing/gtest",
-       "//third_party/hunspell",
-       "//third_party/icu",
--      "//third_party/libpng:libpng_for_testonly",
-+      "//third_party/libpng",
-       "//ui/base:base_interactive_ui_tests",
-       "//ui/base:ozone_buildflags",
-       "//ui/base:test_support",
-@@ -9784,7 +9784,7 @@ if (!is_android) {
+@@ -4951,7 +4951,7 @@ if (!is_android) {
        "//testing/gtest",
        "//third_party/hunspell",
        "//third_party/icu",
@@ -55,11 +46,11 @@
        "//ui/base:test_support",
        "//ui/resources:ui_test_pak",
        "//ui/views",
-Index: chromium-152.0.7977.8/ui/gfx/BUILD.gn
+Index: chromium-157.0.8103.15/ui/gfx/BUILD.gn
 ===================================================================
---- chromium-152.0.7977.8.orig/ui/gfx/BUILD.gn
-+++ chromium-152.0.7977.8/ui/gfx/BUILD.gn
-@@ -897,7 +897,7 @@ test("gfx_unittests") {
+--- chromium-157.0.8103.15.orig/ui/gfx/BUILD.gn
++++ chromium-157.0.8103.15/ui/gfx/BUILD.gn
+@@ -899,7 +899,7 @@ test("gfx_unittests") {
      "//skia:skcms",
      "//testing/gtest",
      "//third_party/icu:icuuc",

++++++ chromium-148-no_dep_on_intree_rustc_binary.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:50.867911313 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:50.874911606 +0100
@@ -1,6 +1,8 @@
---- chromium-148.0.7778.5/build/rust/cargo_crate.gni   2026/04/08 21:57:34     
1.1
-+++ chromium-148.0.7778.5/build/rust/cargo_crate.gni   2026/04/08 21:57:43
-@@ -456,12 +456,6 @@
+Index: chromium-157.0.8103.15/build/rust/cargo_crate.gni
+===================================================================
+--- chromium-157.0.8103.15.orig/build/rust/cargo_crate.gni
++++ chromium-157.0.8103.15/build/rust/cargo_crate.gni
+@@ -481,12 +481,6 @@ template("cargo_crate") {
          rustc_print_cfg_path,
        ]
  
@@ -13,9 +15,11 @@
        build_script_target = ":${_build_script_name}($rust_macro_toolchain)"
        deps = [
          ":${_build_script_name}_write_rustflags",
---- chromium-148.0.7778.5/build/rust/std/BUILD.gn      2026/04/08 21:57:55     
1.1
-+++ chromium-148.0.7778.5/build/rust/std/BUILD.gn      2026/04/08 21:58:01
-@@ -267,12 +267,6 @@
+Index: chromium-157.0.8103.15/build/rust/std/BUILD.gn
+===================================================================
+--- chromium-157.0.8103.15.orig/build/rust/std/BUILD.gn
++++ chromium-157.0.8103.15/build/rust/std/BUILD.gn
+@@ -309,12 +309,6 @@ if (toolchain_has_rust) {
        out_libdir = rebase_path(target_out_dir, root_build_dir)
        out_depfile = rebase_path(depfile, root_build_dir)
  
@@ -27,10 +31,12 @@
 -
        # For the rustc sysroot we must include even the rlibs we don't pass to
        # the C++ linker.
-       all_stdlibs_to_copy = stdlib_files + skip_stdlib_files
---- chromium-149.0.7808.0/build/config/rust.gni        2026/04/30 12:44:06     
1.1
-+++ chromium-149.0.7808.0/build/config/rust.gni        2026/04/30 12:44:23
-@@ -435,8 +435,3 @@
+       all_stdlibs_to_copy = stdlib_files + skip_stdlib_files + 
stdlib_test_files
+Index: chromium-157.0.8103.15/build/config/rust.gni
+===================================================================
+--- chromium-157.0.8103.15.orig/build/config/rust.gni
++++ chromium-157.0.8103.15/build/config/rust.gni
+@@ -452,8 +452,3 @@ rustc_wrapper_inputs = [
    "//build/rust/gni_impl/rustc_wrapper.py",
  ]
  

++++++ chromium-148-only_address_sanitizer.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:50.906912947 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:50.915913324 +0100
@@ -12,15 +12,6 @@
  }
  
  void ForwardToOldHandler(int signal, siginfo_t* info, void* context) {
-@@ -1457,7 +1457,7 @@
-   // violation that needs to be investigated.
-   PrintToStderr("\n## V8 sandbox violation detected!\n\n");
- }
--#endif  // V8_USE_ANY_SANITIZER
-+#endif  // V8_USE_ADDRESS_SANITIZER
- 
- void InstallCrashFilter() {
-   // Register an alternate stack for signal delivery so that signal handlers
 @@ -1480,14 +1480,14 @@
    }
    CHECK(success);

++++++ chromium-152-no-eula.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.011917346 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.016917555 +0100
@@ -1,14 +1,14 @@
-Index: chromium-152.0.7977.64/chrome/browser/first_run/first_run.h
+Index: chromium-157.0.8103.15/chrome/browser/first_run/first_run.h
 ===================================================================
---- chromium-152.0.7977.64.orig/chrome/browser/first_run/first_run.h
-+++ chromium-152.0.7977.64/chrome/browser/first_run/first_run.h
-@@ -74,7 +74,7 @@ struct MasterPrefs {
-   bool confirm_to_quit;
+--- chromium-157.0.8103.15.orig/chrome/browser/first_run/first_run.h
++++ chromium-157.0.8103.15/chrome/browser/first_run/first_run.h
+@@ -76,7 +76,7 @@ struct MasterPrefs {
  #endif
  #if BUILDFLAG(IS_LINUX)
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
 -  bool eula_required = true;
 +  bool eula_required = false;
- #endif
- };
- 
+ #else
+   bool eula_required = false;
+ #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
 

++++++ chromium-154-revert-crubit_web_package.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.115921702 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.124922079 +0100
@@ -95,7 +95,7 @@
  }  // namespace web_package
 --- a/components/web_package/signed_web_bundles/integrity_block_parser.cc
 +++ b/components/web_package/signed_web_bundles/integrity_block_parser.cc
-@@ -4,17 +4,19 @@
+@@ -4,16 +4,19 @@
  
  #include "components/web_package/signed_web_bundles/integrity_block_parser.h"
  
@@ -112,7 +112,7 @@
 +#include "base/strings/to_string.h"
  #include "base/types/expected.h"
  #include "base/types/expected_macros.h"
- #include "components/cbor/reader.h"
++#include "components/cbor/reader.h"
 +#include "components/cbor/writer.h"
 +#include "components/web_package/mojom/web_bundle_parser.mojom-forward.h"
  #include "components/web_package/mojom/web_bundle_parser.mojom.h"
@@ -564,7 +564,20 @@
  }  // namespace web_package
 --- a/third_party/blink/renderer/platform/BUILD.gn
 +++ b/third_party/blink/renderer/platform/BUILD.gn
-@@ -186,6 +186,18 @@ group("make_platform_generated") {
+@@ -219,11 +219,10 @@
+     "//third_party/blink/renderer:non_test_config",
+   ]
+   public_deps = [
++    ":font_format_check",
+     ":platform_export",
+-    "fonts:font_format_bindings",
+     "fonts:ift_patcher_bindings",
+     "//base",
+-    "//build/rust/crubit",
+     "//skia",
+     "//third_party/blink/renderer/platform/wtf",
+   ]
+@@ -258,6 +257,18 @@
    ]
  }
  
@@ -575,32 +588,28 @@
 +  cxx_bindings = [ crate_root ]
 +  deps = [
 +    "//third_party/rust/font_types/v0_12:lib",
-+    "//third_party/rust/read_fonts/v0_43:lib",
-+    "//third_party/rust/skrifa/v0_46:lib",
++    "//third_party/rust/read_fonts/v0_45:lib",
++    "//third_party/rust/skrifa/v0_48:lib",
 +  ]
 +}
 +
  rust_static_library("rustfft_ffi") {
    allow_unsafe = true  # Needed for FFI that underpins the `cxx` crate.
    crate_root = "audio/rustfft_ffi.rs"
-@@ -1807,7 +1807,6 @@
-     ":allow_discouraged_type",
-     ":blink_platform_public_deps",
-     ":platform_export",
--    "//build/rust/crubit",
-     "//components/language_detection/core",
-     "//gpu/command_buffer/client:raster_interface",
-     "//media/capture:capture_lib",
-@@ -1834,8 +1833,8 @@
-     "//ui/native_theme/features",
+@@ -2607,12 +2618,11 @@
    ]
-   deps = [
+ 
+   deps += [
 +    ":font_format_check",
-     ":rustfft_ffi",
+     ":bridge_ice_controller_tests",
+     ":font_rust_headers",
+     ":rustfft_ffi_unittests",
 -    "fonts:font_format_bindings",
      "fonts:ift_patcher_bindings",
-     "//base:base_static",
-     "//base/allocator:buildflags",
+-    "//build/rust/crubit",
+   ]
+ 
+   data_deps = [ ":blink_platform_unittests_data" ]
 --- a/third_party/blink/renderer/platform/fonts/BUILD.gn
 +++ b/third_party/blink/renderer/platform/fonts/BUILD.gn
 @@ -1,23 +1,3 @@
@@ -619,8 +628,8 @@
 -  }
 -  deps = [
 -    "//third_party/rust/font_types/v0_12:lib",
--    "//third_party/rust/read_fonts/v0_43:lib",
--    "//third_party/rust/skrifa/v0_46:lib",
+-    "//third_party/rust/read_fonts/v0_45:lib",
+-    "//third_party/rust/skrifa/v0_48:lib",
 -  ]
 -}
 -

++++++ chromium-154-verification-tokens.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.149923127 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.156923420 +0100
@@ -144,8 +144,8 @@
                profile, wc_getter)) {
 --- a/chrome/browser/component_updater/BUILD.gn
 +++ b/chrome/browser/component_updater/BUILD.gn
-@@ -147,7 +147,6 @@ source_set("impl") {
-     "//chrome/browser/net",
+@@ -157,7 +157,6 @@
+     "//chrome/browser/net:key_pinning_proto",
      "//chrome/browser/page_load_metrics",
      "//chrome/browser/permissions",
 -    "//chrome/browser/private_verification_tokens",
@@ -257,23 +257,22 @@
    ProfilePasswordStoreFactory::GetInstance();
 --- a/chrome/test/BUILD.gn
 +++ b/chrome/test/BUILD.gn
-@@ -1867,8 +1867,6 @@
-       "//chrome/browser/privacy_sandbox:headers",
-       "//chrome/browser/privacy_sandbox:test_support",
-       "//chrome/browser/private_ai",
--      "//chrome/browser/private_verification_tokens",
+@@ -1453,7 +1453,6 @@
+       "//chrome/browser/preloading/prerender:browser_tests",
+       "//chrome/browser/preloading/search_preload:browser_tests",
+       "//chrome/browser/privacy_sandbox:browser_tests",
 -      "//chrome/browser/private_verification_tokens:browser_tests",
-       "//chrome/browser/profile_resetter",
        "//chrome/browser/profile_resetter:browser_tests",
-       "//chrome/browser/profiles",
-@@ -5396,7 +5395,6 @@ test("unit_tests") {
+       "//chrome/browser/profiles:browser_tests",
+       "//chrome/browser/push_messaging:browser_tests",
+@@ -2858,7 +2857,6 @@
      "//chrome/browser/preloading/prerender:unit_tests",
      "//chrome/browser/privacy_sandbox:unit_tests",
      "//chrome/browser/private_ai:unit_tests",
 -    "//chrome/browser/private_verification_tokens:unit_tests",
-     "//chrome/browser/profiles",
-     "//chrome/browser/profiles:misc",
-     "//chrome/browser/profiles:profile_downloader",
+     "//chrome/browser/profiles:unit_tests",
+     "//chrome/browser/push_messaging:unit_tests",
+     "//chrome/browser/pwc:unit_tests",
 --- a/components/BUILD.gn
 +++ b/components/BUILD.gn
 @@ -314,7 +314,6 @@ test("components_unittests") {
@@ -305,15 +304,15 @@
      "//testing/gmock",
 --- chromium-156.0.8072.0/chrome/browser/devtools/BUILD.gn     2026/09/29 
21:47:58     1.1
 +++ chromium-156.0.8072.0/chrome/browser/devtools/BUILD.gn     2026/09/29 
21:48:17
-@@ -414,7 +414,6 @@
-       "//chrome/app:command_ids",
+@@ -446,7 +446,6 @@
        "//chrome/browser/badging",
        "//chrome/browser/custom_handlers",
+       "//chrome/browser/origin_gating",
 -      "//chrome/browser/private_verification_tokens",
        "//chrome/browser/ui:browser_window_header",
        "//chrome/browser/ui/media_router",
        "//chrome/browser/ui/startup",
-@@ -427,7 +426,6 @@
+@@ -459,7 +458,6 @@
        "//components/origin_gating/core",
        "//components/payments/content",
        "//components/privacy_sandbox/privacy_sandbox_attestations",
@@ -321,7 +320,7 @@
        "//components/security_state/content",
        "//components/subresource_filter/content/browser",
        "//components/web_package",
-@@ -652,7 +650,6 @@
+@@ -694,7 +692,6 @@
        "//chrome/browser/prefs:util",
        "//chrome/browser/preloading:prefs",
        "//chrome/browser/preloading:test_support",
@@ -329,7 +328,7 @@
        "//chrome/browser/search_engines",
        "//chrome/browser/sync/test/integration:sync_integration_test_support",
        "//chrome/browser/ui/autofill",
-@@ -663,7 +660,6 @@
+@@ -706,7 +703,6 @@
        "//components/infobars/content",
        "//components/javascript_dialogs",
        "//components/language/core/browser",
@@ -363,4 +362,22 @@
        "//testing/gmock",
        "//testing/gtest",
        "//url",
+--- 
chromium-157.0.8103.15/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_factory.cc
       2026/10/30 23:04:32     1.1
++++ 
chromium-157.0.8103.15/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate_factory.cc
       2026/10/30 23:05:05
+@@ -30,7 +30,6 @@
+ #include 
"chrome/browser/permissions/permission_decision_auto_blocker_factory.h"
+ #include 
"chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
+ #include 
"chrome/browser/preloading/prefetch/search_prefetch/search_prefetch_service_factory.h"
+-#include 
"chrome/browser/private_verification_tokens/private_verification_tokens_service_factory.h"
+ #include "chrome/browser/profiles/profile.h"
+ #include "chrome/browser/reading_list/reading_list_model_factory.h"
+ #include "chrome/browser/safe_browsing/verdict_cache_manager_factory.h"
+@@ -107,7 +106,6 @@
+   DependsOn(PermissionActionsHistoryFactory::GetInstance());
+   DependsOn(PermissionDecisionAutoBlockerFactory::GetInstance());
+   DependsOn(prerender::NoStatePrefetchManagerFactory::GetInstance());
+-  DependsOn(PrivateVerificationTokensServiceFactory::GetInstance());
+   DependsOn(ProtocolHandlerRegistryFactory::GetInstance());
+   DependsOn(ReadingListModelFactory::GetInstance());
+   DependsOn(safe_browsing::VerdictCacheManagerFactory::GetInstance());
 

++++++ chromium-155-older-clang-bindings.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.197925138 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.207925556 +0100
@@ -44,25 +44,10 @@
      def is_const_qualified(self) -> bool:
          """Determine whether a Type has the "const" qualifier set.
  
-@@ -2953,36 +2930,6 @@
-         conf.lib.clang_Type_visitFields(self, fields_visit_callback(visitor), 
fields)
-         return iter(fields)
+@@ -2953,21 +2930,6 @@
+         conf.lib.clang_visitCXXBaseClasses(self, 
fields_visit_callback(visitor), bases)
+         return iter(bases)
  
--    def get_bases(self) -> Iterator[Cursor]:
--        """Return an iterator for accessing the base classes of this type."""
--
--        def visitor(base: Cursor, _: Any) -> Literal[1]:
--            assert not base.is_null()
--
--            # Create reference to TU so it isn't GC'd before Cursor.
--            base._tu = self._tu
--            bases.append(base)
--            return 1  # continue
--
--        bases: list[Cursor] = []
--        conf.lib.clang_visitCXXBaseClasses(self, 
fields_visit_callback(visitor), bases)
--        return iter(bases)
--
 -    def get_methods(self) -> Iterator[Cursor]:
 -        """Return an iterator for accessing the methods of this type."""
 -
@@ -120,11 +105,10 @@
      (
          "clang_parseTranslationUnit",
          [Index, c_interop_string, c_void_p, c_int, c_void_p, c_int, c_int],
-@@ -4335,8 +4274,6 @@
-         [TranslationUnit, SourceRange, POINTER(POINTER(Token)), 
POINTER(c_uint)],
+@@ -4335,7 +4274,6 @@
      ),
      ("clang_visitChildren", [Cursor, cursor_visit_callback, py_object], 
c_uint),
--    ("clang_visitCXXBaseClasses", [Type, fields_visit_callback, py_object], 
c_uint),
+     ("clang_visitCXXBaseClasses", [Type, fields_visit_callback, py_object], 
c_uint),
 -    ("clang_visitCXXMethods", [Type, fields_visit_callback, py_object], 
c_uint),
      ("clang_Cursor_getNumArguments", [Cursor], c_int),
      ("clang_Cursor_getArgument", [Cursor, c_uint], Cursor),

++++++ chromium-155-v8-clang-path.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.241926981 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.249927316 +0100
@@ -1,12 +1,12 @@
 --- chromium-155.0.8059.5/v8/BUILD.gn  2026/09/17 12:06:48     1.1
 +++ chromium-155.0.8059.5/v8/BUILD.gn  2026/09/17 12:07:16
-@@ -2485,7 +2485,7 @@
+@@ -2500,7 +2500,7 @@
  
    # The clang toolchain's resource dir contains builting headers
    # include/{stddef.h,stdarg.h,...}.
 -  _metagen_clang_resource_dir = "$clang_base_path/lib/clang/$clang_version"
 +  _metagen_clang_resource_dir = "$clang_base_path/lib64/clang/$clang_version"
+ 
+   # The headers are parsed with v8_base_without_compiler's flags.
    _metagen_flags_target = ":v8_base_without_compiler"
-   _metagen_flags_target_ninja =
-       get_label_info(_metagen_flags_target, "target_out_dir") +
 

++++++ chromium-156-revert_ift_patcher.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.314930039 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.322930374 +0100
@@ -364,24 +364,31 @@
 diff -urN 
chromium-156.0.8078.4.orig/third_party/blink/renderer/platform/BUILD.gn 
chromium-156.0.8078.4/third_party/blink/renderer/platform/BUILD.gn
 --- chromium-156.0.8078.4.orig/third_party/blink/renderer/platform/BUILD.gn    
2026-09-30 01:57:21.000000000 +0200
 +++ chromium-156.0.8078.4/third_party/blink/renderer/platform/BUILD.gn 
2026-10-03 15:56:10.679294692 +0200
-@@ -713,8 +725,6 @@
-     "fonts/generic_font_family_settings.cc",
-     "fonts/generic_font_family_settings.h",
-     "fonts/glyph_metrics_map.h",
--    "fonts/ift/ift_patcher.cc",
+@@ -209,7 +209,6 @@
+ source_set("font_rust_headers") {
+   visibility += [ "//third_party/blink/renderer/core:*" ]
+   public = [
 -    "fonts/ift/ift_patcher.h",
-     "fonts/opentype/color_table_lookup.cc",
-     "fonts/opentype/color_table_lookup.h",
-     "fonts/opentype/font_format_check.cc",
-@@ -1845,7 +1845,6 @@
-   deps = [
+     "fonts/opentype/font_format_check.h",
+   ]
+   configs += [
+@@ -221,7 +220,6 @@
+   public_deps = [
      ":font_format_check",
-     ":rustfft_ffi",
+     ":platform_export",
 -    "fonts:ift_patcher_bindings",
-     "//base:base_static",
-     "//base/allocator:buildflags",
-     "//build:chromecast_buildflags",
-@@ -2245,7 +2253,6 @@
+     "//base",
+     "//skia",
+     "//third_party/blink/renderer/platform/wtf",
+@@ -232,7 +230,6 @@
+   public = []
+   sources = [
+     "fonts/font_custom_platform_data.cc",
+-    "fonts/ift/ift_patcher.cc",
+     "fonts/opentype/font_format_check.cc",
+     "fonts/web_font_decoder.cc",
+     "fonts/web_font_typeface_factory.cc",
+@@ -2320,7 +2317,6 @@
      "fonts/font_test.cc",
      "fonts/font_test_utilities.cc",
      "fonts/generic_font_family_settings_test.cc",
@@ -389,6 +396,14 @@
      "fonts/opentype/color_table_lookup_test.cc",
      "fonts/opentype/font_format_check_test.cc",
      "fonts/opentype/font_settings_test.cc",
+@@ -2622,7 +2618,6 @@
+     ":bridge_ice_controller_tests",
+     ":font_rust_headers",
+     ":rustfft_ffi_unittests",
+-    "fonts:ift_patcher_bindings",
+   ]
+ 
+   data_deps = [ ":blink_platform_unittests_data" ]
 --- 
chromium-156.0.8078.4/third_party/blink/renderer/core/loader/resource/font_resource.h
      2026-09-30 01:57:21.000000000 +0200
 +++ 
chromium-155.0.8059.5/third_party/blink/renderer/core/loader/resource/font_resource.h
      2026-09-16 02:15:15.000000000 +0200
 @@ -47,7 +47,6 @@

++++++ chromium-157-drop-distinct_counter.patch ++++++
diff -urN chromium-157.0.8103.15.orig/extensions/common/value_counter.h 
chromium-157.0.8103.15/extensions/common/value_counter.h
--- chromium-157.0.8103.15.orig/extensions/common/value_counter.h       
2026-10-21 21:45:03.000000000 +0200
+++ chromium-157.0.8103.15/extensions/common/value_counter.h    2026-10-30 
00:44:49.742573628 +0100
@@ -46,9 +46,6 @@
   // Returns the number of values being counted, including duplicates.
   size_t total_count() const { return total_count_; }
 
-  // Returns the number of distinct values being counted.
-  size_t distinct_count() const { return entries_.size(); }
-
  private:
   struct Entry;
   std::vector<Entry> entries_;
diff -urN 
chromium-157.0.8103.15.orig/extensions/common/value_counter_unittest.cc 
chromium-157.0.8103.15/extensions/common/value_counter_unittest.cc
--- chromium-157.0.8103.15.orig/extensions/common/value_counter_unittest.cc     
2026-10-21 21:45:03.000000000 +0200
+++ chromium-157.0.8103.15/extensions/common/value_counter_unittest.cc  
2026-10-30 00:44:55.389809666 +0100
@@ -33,7 +33,6 @@
   vc.Add(value);
   vc.Add(value);
   EXPECT_EQ(2u, vc.total_count());
-  EXPECT_EQ(1u, vc.distinct_count());
   ASSERT_FALSE(vc.Remove(value));
   EXPECT_EQ(1u, vc.total_count());
   ASSERT_TRUE(vc.Remove(value));
diff -urN 
chromium-157.0.8103.15.orig/extensions/renderer/bindings/listener_tracker.cc 
chromium-157.0.8103.15/extensions/renderer/bindings/listener_tracker.cc
--- 
chromium-157.0.8103.15.orig/extensions/renderer/bindings/listener_tracker.cc    
    2026-10-21 21:45:03.000000000 +0200
+++ chromium-157.0.8103.15/extensions/renderer/bindings/listener_tracker.cc     
2026-10-30 00:43:01.471077780 +0100
@@ -94,12 +94,8 @@
 void ListenerTracker::RecordFilteredListenerCounts() const {
   for (const auto& [key, counts] : filtered_listeners_) {
     const size_t total = counts->total_count();
-    const size_t deduplicated = total - counts->distinct_count();
     base::UmaHistogramCounts100(
         "Extensions.Events.ServiceWorkerStarted.FilteredListenerCount", total);
-    base::UmaHistogramCounts100(
-        "Extensions.Events.ServiceWorkerStarted.DeduplicatedListenerCount",
-        deduplicated);
   }
 }
 
diff -urN 
chromium-157.0.8103.15.orig/extensions/renderer/bindings/listener_tracker_unittest.cc
 
chromium-157.0.8103.15/extensions/renderer/bindings/listener_tracker_unittest.cc
--- 
chromium-157.0.8103.15.orig/extensions/renderer/bindings/listener_tracker_unittest.cc
       2026-10-21 21:45:03.000000000 +0200
+++ 
chromium-157.0.8103.15/extensions/renderer/bindings/listener_tracker_unittest.cc
    2026-10-30 00:43:34.620451136 +0100
@@ -75,8 +75,6 @@
   tracker.RecordFilteredListenerCounts();
   histogram_tester.ExpectUniqueSample(
       "Extensions.Events.ServiceWorkerStarted.FilteredListenerCount", 3, 1);
-  histogram_tester.ExpectUniqueSample(
-      "Extensions.Events.ServiceWorkerStarted.DeduplicatedListenerCount", 1, 
1);
 
   auto [was_last_of_kind, removed_filter] =
       tracker.RemoveFilteredListener(kOwner1, kEvent1, filter_id1);
@@ -152,8 +150,6 @@
   tracker.RecordFilteredListenerCounts();
   histogram_tester.ExpectUniqueSample(
       "Extensions.Events.ServiceWorkerStarted.FilteredListenerCount", 1, 2);
-  histogram_tester.ExpectUniqueSample(
-      "Extensions.Events.ServiceWorkerStarted.DeduplicatedListenerCount", 0, 
2);
 
   auto [was_last_of_kind, removed_filter] =
       tracker.RemoveFilteredListener(kOwner1, kEvent1, filter_id1);

++++++ chromium-157-revert_ift_patcher.patch ++++++
--- chromium-157.0.8103.15/third_party/blink/renderer/core/BUILD.gn     
2026/10/28 16:21:08     1.1
+++ chromium-157.0.8103.15/third_party/blink/renderer/core/BUILD.gn     
2026/10/28 16:22:37
@@ -407,7 +407,6 @@
   deps = [
     ":font_resource",
     ":generate_eventhandler_names",
-    ":ift_custom_font_data",
     ":make_deprecation_info",
     ":xml_ffi",
     "//base",
@@ -463,7 +462,6 @@
   allow_circular_includes_from = [
     ":core_generated",
     ":core_hot",
-    ":ift_custom_font_data",
     "//third_party/blink/renderer/core/animation",
     "//third_party/blink/renderer/core/exported",
     "//third_party/blink/renderer/core/probe",
@@ -504,23 +502,6 @@
     "//third_party/blink/public/common",
     "//third_party/blink/renderer/platform:font_rust_headers",
   ]
-}
-
-# Like ":font_resource", css/ift_custom_font_data.cc includes
-# //third_party/blink/renderer/platform:font_rust_headers, so it is kept on a
-# headerless target. Its header (in core's sources) only forward declares the
-# Crubit-backed types. It includes core headers, so ":core" lists it in
-# allow_circular_includes_from.
-blink_core_sources("ift_custom_font_data") {
-  public = []
-  sources = [ "css/ift_custom_font_data.cc" ]
-
-  deps = [
-    ":font_resource_header",
-    "//services/network/public/cpp",
-    "//third_party/blink/public/common",
-    "//third_party/blink/renderer/platform:font_rust_headers",
-  ]
 }
 
 # Certain sources should be compiled with heavy optimization enabled.
--- chromium-157.0.8103.15/third_party/blink/renderer/core/css/build.gni        
2026/10/28 16:22:45     1.1
+++ chromium-157.0.8103.15/third_party/blink/renderer/core/css/build.gni        
2026/10/28 16:22:51
@@ -531,7 +531,6 @@
   "hash_tools.h",
   "if_condition.cc",
   "if_condition.h",
-  "ift_custom_font_data.h",
   "inline_css_style_declaration.cc",
   "inline_css_style_declaration.h",
   "invalidation/invalidation_flags.cc",
@@ -936,7 +935,6 @@
   "font_size_functions_test.cc",
   "font_update_invalidation_test.cc",
   "force_dark_test.cc",
-  "ift_custom_font_data_test.cc",
   "invalidation/invalidation_set_test.cc",
   "invalidation/pending_invalidations_test.cc",
   "invalidation/style_invalidator_test.cc",
--- 
chromium-157.0.8103.15/third_party/blink/renderer/core/css/remote_font_face_source.cc
       2026/10/28 16:23:12     1.1
+++ 
chromium-157.0.8103.15/third_party/blink/renderer/core/css/remote_font_face_source.cc
       2026/10/28 16:24:25
@@ -14,7 +14,6 @@
 #include "third_party/blink/renderer/core/css/css_custom_font_data.h"
 #include "third_party/blink/renderer/core/css/css_font_face.h"
 #include "third_party/blink/renderer/core/css/font_face_set_document.h"
-#include "third_party/blink/renderer/core/css/ift_custom_font_data.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
@@ -219,9 +218,6 @@
   DCHECK(!custom_font_data_);
   if (resource->PassedIntegrityChecks() || !check_integrity) {
     custom_font_data_ = font->GetCustomFontData();
-    if (RuntimeEnabledFeatures::IncrementalFontTransferEnabled()) {
-      ift_custom_font_data_ = IftCustomFontData::MaybeCreate(this, *font);
-    }
   }
   url_ = resource->Url().GetString();
 
@@ -349,9 +345,6 @@
 
   histograms_.RecordFallbackTime();
 
-  CustomFontData* custom_font_data =
-      ift_custom_font_data_ ? ift_custom_font_data_.Get()
-                            : MakeGarbageCollected<CustomFontData>();
   return MakeGarbageCollected<SimpleFontData>(
       custom_font_data_->GetFontPlatformData(
           font_description.EffectiveFontSize(),
@@ -368,7 +361,7 @@
           font_description.ResolveFontFeatures(),
           font_description.Orientation(), font_description.VariationSettings(),
           font_description.GetFontPalette()),
-      custom_font_data);
+      MakeGarbageCollected<CustomFontData>());
 }
 
 const SimpleFontData* RemoteFontFaceSource::CreateLoadingFallbackFontData(
@@ -451,7 +444,6 @@
   visitor->Trace(face_);
   visitor->Trace(font_selector_);
   visitor->Trace(custom_font_data_);
-  visitor->Trace(ift_custom_font_data_);
   CSSFontFaceSource::Trace(visitor);
   FontResourceClient::Trace(visitor);
 }
--- 
chromium-157.0.8103.15/third_party/blink/renderer/core/css/remote_font_face_source.h
        2026/10/28 16:24:29     1.1
+++ 
chromium-157.0.8103.15/third_party/blink/renderer/core/css/remote_font_face_source.h
        2026/10/28 16:24:48
@@ -18,7 +18,6 @@
 class Document;
 class FontCustomPlatformData;
 class FontSelector;
-class IftCustomFontData;
 
 class RemoteFontFaceSource final : public CSSFontFaceSource,
                                    public FontResourceClient {
@@ -158,8 +157,6 @@
 
   // |nullptr| if font is not loaded or failed to decode.
   Member<const FontCustomPlatformData> custom_font_data_;
-  // |nullptr| if font is not an IFT font.
-  Member<IftCustomFontData> ift_custom_font_data_;
   // |nullptr| if font is not loaded or failed to decode.
   String url_;
 

++++++ chromium-156.0.8078.73-linux.tar.xz -> 
chromium-157.0.8103.38-linux.tar.xz ++++++
/work/SRC/openSUSE:Factory/chromium/chromium-156.0.8078.73-linux.tar.xz 
/work/SRC/openSUSE:Factory/.chromium.new.3759290/chromium-157.0.8103.38-linux.tar.xz
 differ: char 15, line 1

++++++ chromium-162dc276a85b4f7d353adbe312d05d8e7a4c28e3.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.453935862 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.460936155 +0100
@@ -80,14 +80,13 @@
 index 0da6def76bdc0..6aa56f08ef635 100644
 --- a/media/base/media_switches.cc
 +++ b/media/base/media_switches.cc
-@@ -599,6 +599,11 @@ BASE_FEATURE(kFallbackAfterDecodeError, 
base::FEATURE_ENABLED_BY_DEFAULT);
+@@ -603,6 +603,10 @@
  BASE_FEATURE(kFeatureManagementLiveTranslateCrOS,
               base::FEATURE_DISABLED_BY_DEFAULT);
  
 +// Controls whether FFmpegDemuxer attaches the HDR metadata carried by ITU-T
 +// T.35 timed metadata tracks to the video tracks that reference them.
-+BASE_FEATURE(kFFmpegDemuxerIT35MetadataTrack,
-+             base::FEATURE_DISABLED_BY_DEFAULT);
++BASE_FEATURE(kFFmpegDemuxerIT35MetadataTrack, 
base::FEATURE_ENABLED_BY_DEFAULT);
 +
  // Forces software video encoders to be used for low resolutions.
  // Enabled-by-default, except for Android where SW encoder for H26x and AV1 
are
@@ -494,16 +493,16 @@
 index d92e7906a6bc1..358a8c4ec8b42 100644
 --- a/media/filters/ffmpeg_demuxer_unittest.cc
 +++ b/media/filters/ffmpeg_demuxer_unittest.cc
-@@ -1939,7 +1939,7 @@ TEST_F(FFmpegDemuxerTest, MultitrackMemoryUsage) {
+@@ -1935,7 +1935,7 @@
    EXPECT_EQ(GetExpectedMemoryUsage(896, 156011), demuxer_->GetMemoryUsage());
  }
  
 -TEST_F(FFmpegDemuxerTest, AgtmMetadata) {
 +TEST_F(FFmpegDemuxerTest, AgtmMetadataWebM) {
-   base::test::ScopedFeatureList scoped_feature_list(features::kHdrAgtm);
    CreateDemuxer("vp9-agtm.webm");
    InitializeDemuxer();
-@@ -1949,4 +1949,35 @@ TEST_F(FFmpegDemuxerTest, AgtmMetadata) {
+ 
+@@ -1944,4 +1944,33 @@
         base::TimeDelta(), true);
  }
  
@@ -511,9 +510,8 @@
 +// The metadata track is attached to the video track by a `cdsc` track
 +// reference, which points from the metadata track to the video track.
 +TEST_F(FFmpegDemuxerTest, AgtmMetadataMp4CdscTrack) {
-+  base::test::ScopedFeatureList scoped_feature_list;
-+  scoped_feature_list.InitWithFeatures(
-+      {features::kHdrAgtm, kFFmpegDemuxerIT35MetadataTrack}, {});
++  base::test::ScopedFeatureList scoped_feature_list(
++      kFFmpegDemuxerIT35MetadataTrack);
 +  CreateDemuxer("agtm-metadata-cdsc-track.mp4");
 +  InitializeDemuxer();
 +
@@ -525,9 +523,8 @@
 +// The metadata track is attached to the video track by a `rndr` track
 +// reference, which points from the video track to the metadata track.
 +TEST_F(FFmpegDemuxerTest, AgtmMetadataMp4RndrTrack) {
-+  base::test::ScopedFeatureList scoped_feature_list;
-+  scoped_feature_list.InitWithFeatures(
-+      {features::kHdrAgtm, kFFmpegDemuxerIT35MetadataTrack}, {});
++  base::test::ScopedFeatureList scoped_feature_list(
++      kFFmpegDemuxerIT35MetadataTrack);
 +  CreateDemuxer("agtm-metadata-rndr-track.mp4");
 +  InitializeDemuxer();
 +

++++++ chromium-72777c30be767d4f192f2a3ca94e838e0b83550e.patch ++++++
commit 72777c30be767d4f192f2a3ca94e838e0b83550e
Author: Jeffrey Yu <[email protected]>
Date:   Wed Sep 30 22:17:38 2026 -0700

    Avoid unnecessary string copies in base_type_conversion
    
    Use `base::SplitStringPiece` instead of `base::SplitString`
    
    Bug: 501076278
    Change-Id: I7c32ac8c0d892ca2312ba012a6f54d08a9c00233
    Reviewed-on: 
https://chromium-review.googlesource.com/c/chromium/src/+/7796667
    Auto-Submit: Jeffrey Yu <[email protected]>
    Commit-Queue: Jeffrey Yu <[email protected]>
    Reviewed-by: David Yeung <[email protected]>
    Reviewed-by: Allen Bauer <[email protected]>
    Cr-Commit-Position: refs/heads/main@{#1708619}

diff --git a/ui/base/metadata/base_type_conversion.cc 
b/ui/base/metadata/base_type_conversion.cc
index 2ae5befbe9303..82d9b22fd61a9 100644
--- a/ui/base/metadata/base_type_conversion.cc
+++ b/ui/base/metadata/base_type_conversion.cc
@@ -158,7 +158,7 @@ std::u16string TypeConverter<url::Component>::ToString(
 }
 
 std::optional<bool> TypeConverter<bool>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   if (source_value == u"true") {
     return true;
   }
@@ -166,7 +166,7 @@ std::optional<bool> TypeConverter<bool>::FromString(
 }
 
 std::optional<int8_t> TypeConverter<int8_t>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   int32_t ret = 0;
   if (base::StringToInt(source_value, &ret) &&
       base::IsValueInRangeForNumericType<int8_t>(ret)) {
@@ -176,7 +176,7 @@ std::optional<int8_t> TypeConverter<int8_t>::FromString(
 }
 
 std::optional<int16_t> TypeConverter<int16_t>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   int32_t ret = 0;
   if (base::StringToInt(source_value, &ret) &&
       base::IsValueInRangeForNumericType<int16_t>(ret)) {
@@ -186,21 +186,21 @@ std::optional<int16_t> TypeConverter<int16_t>::FromString(
 }
 
 std::optional<int32_t> TypeConverter<int32_t>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   int value;
   return base::StringToInt(source_value, &value) ? std::make_optional(value)
                                                  : std::nullopt;
 }
 
 std::optional<int64_t> TypeConverter<int64_t>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   int64_t value;
   return base::StringToInt64(source_value, &value) ? std::make_optional(value)
                                                    : std::nullopt;
 }
 
 std::optional<uint8_t> TypeConverter<uint8_t>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   unsigned ret = 0;
   if (base::StringToUint(source_value, &ret) &&
       base::IsValueInRangeForNumericType<uint8_t>(ret)) {
@@ -210,7 +210,7 @@ std::optional<uint8_t> TypeConverter<uint8_t>::FromString(
 }
 
 std::optional<uint16_t> TypeConverter<uint16_t>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   unsigned ret = 0;
   if (base::StringToUint(source_value, &ret) &&
       base::IsValueInRangeForNumericType<uint16_t>(ret)) {
@@ -220,21 +220,21 @@ std::optional<uint16_t> 
TypeConverter<uint16_t>::FromString(
 }
 
 std::optional<uint32_t> TypeConverter<uint32_t>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   unsigned value;
   return base::StringToUint(source_value, &value) ? std::make_optional(value)
                                                   : std::nullopt;
 }
 
 std::optional<uint64_t> TypeConverter<uint64_t>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   uint64_t value;
   return base::StringToUint64(source_value, &value) ? std::make_optional(value)
                                                     : std::nullopt;
 }
 
 std::optional<float> TypeConverter<float>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   if (std::optional<double> temp =
           TypeConverter<double>::FromString(source_value)) {
     return static_cast<float>(temp.value());
@@ -243,7 +243,7 @@ std::optional<float> TypeConverter<float>::FromString(
 }
 
 std::optional<double> TypeConverter<double>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   double value;
   return base::StringToDouble(base::UTF16ToUTF8(source_value), &value)
              ? std::make_optional(value)
@@ -251,30 +251,30 @@ std::optional<double> TypeConverter<double>::FromString(
 }
 
 std::optional<GURL> ui::metadata::TypeConverter<GURL>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   const GURL url = url_formatter::FixupURL(base::UTF16ToUTF8(source_value));
   return url.is_valid() ? std::make_optional(url) : std::nullopt;
 }
 
 std::optional<std::u16string> TypeConverter<std::u16string>::FromString(
-    const std::u16string& source_value) {
-  return source_value;
+    std::u16string_view source_value) {
+  return std::u16string(source_value);
 }
 
 std::optional<base::FilePath> TypeConverter<base::FilePath>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   return base::FilePath::FromUTF16Unsafe(source_value);
 }
 
 std::optional<base::TimeDelta> TypeConverter<base::TimeDelta>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   std::string source = base::UTF16ToUTF8(source_value);
   return base::TimeDeltaFromString(source);
 }
 
 std::optional<gfx::Insets> TypeConverter<gfx::Insets>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitStringPiece(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   int top, left, bottom, right;
   if ((values.size() == 4) && base::StringToInt(values[0], &top) &&
@@ -287,8 +287,8 @@ std::optional<gfx::Insets> 
TypeConverter<gfx::Insets>::FromString(
 }
 
 std::optional<gfx::Point> TypeConverter<gfx::Point>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitStringPiece(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   int x, y;
   if ((values.size() == 2) && base::StringToInt(values[0], &x) &&
@@ -299,8 +299,8 @@ std::optional<gfx::Point> 
TypeConverter<gfx::Point>::FromString(
 }
 
 std::optional<gfx::PointF> TypeConverter<gfx::PointF>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitStringPiece(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   double x, y;
   if ((values.size() == 2) && base::StringToDouble(values[0], &x) &&
@@ -311,8 +311,8 @@ std::optional<gfx::PointF> 
TypeConverter<gfx::PointF>::FromString(
 }
 
 std::optional<gfx::Range> TypeConverter<gfx::Range>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitStringPiece(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u"{,}", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   unsigned min, max;
   if ((values.size() == 2) && base::StringToUint(values[0], &min) &&
@@ -323,8 +323,8 @@ std::optional<gfx::Range> 
TypeConverter<gfx::Range>::FromString(
 }
 
 std::optional<gfx::Rect> TypeConverter<gfx::Rect>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitString(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u" ", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   if (values.size() != 2)
     return std::nullopt;
@@ -338,8 +338,8 @@ std::optional<gfx::Rect> 
TypeConverter<gfx::Rect>::FromString(
 }
 
 std::optional<gfx::RectF> TypeConverter<gfx::RectF>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitString(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u" ", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   if (values.size() != 2)
     return std::nullopt;
@@ -353,10 +353,11 @@ std::optional<gfx::RectF> 
TypeConverter<gfx::RectF>::FromString(
 }
 
 std::optional<gfx::ShadowValues> TypeConverter<gfx::ShadowValues>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   gfx::ShadowValues ret;
-  const auto shadow_value_strings = base::SplitStringPiece(
-      source_value, u"[;]", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+  const std::vector<std::u16string_view> shadow_value_strings =
+      base::SplitStringPiece(source_value, u"[;]", base::TRIM_WHITESPACE,
+                             base::SPLIT_WANT_NONEMPTY);
 
   for (auto v : shadow_value_strings) {
     std::u16string value = std::u16string(v);
@@ -385,8 +386,8 @@ std::optional<gfx::ShadowValues> 
TypeConverter<gfx::ShadowValues>::FromString(
 }
 
 std::optional<gfx::Size> TypeConverter<gfx::Size>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitStringPiece(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u"x", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   int width, height;
   if ((values.size() == 2) && base::StringToInt(values[0], &width) &&
@@ -397,8 +398,8 @@ std::optional<gfx::Size> 
TypeConverter<gfx::Size>::FromString(
 }
 
 std::optional<gfx::SizeF> TypeConverter<gfx::SizeF>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitStringPiece(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u"x", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   double width, height;
   if ((values.size() == 2) && base::StringToDouble(values[0], &width) &&
@@ -409,18 +410,18 @@ std::optional<gfx::SizeF> 
TypeConverter<gfx::SizeF>::FromString(
 }
 
 std::optional<std::string> TypeConverter<std::string>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   return base::UTF16ToUTF8(source_value);
 }
 
 std::optional<ui::ColorVariant> TypeConverter<ui::ColorVariant>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   return std::nullopt;
 }
 
 std::optional<url::Component> TypeConverter<url::Component>::FromString(
-    const std::u16string& source_value) {
-  const auto values = base::SplitStringPiece(
+    std::u16string_view source_value) {
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       source_value, u"{,}", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   int begin, len;
   if ((values.size() == 2) && base::StringToInt(values[0], &begin) &&
@@ -440,7 +441,7 @@ std::u16string 
TypeConverter<UNIQUE_TYPE_NAME(SkColor)>::ToString(
 }
 
 std::optional<SkColor> TypeConverter<UNIQUE_TYPE_NAME(SkColor)>::FromString(
-    const std::u16string& source_value) {
+    std::u16string_view source_value) {
   return GetNextColor(source_value.cbegin(), source_value.cend());
 }
 
@@ -555,7 +556,7 @@ std::optional<SkColor> 
TypeConverter<UNIQUE_TYPE_NAME(SkColor)>::ParseHslString(
     const std::u16string& hsl_string) {
   std::u16string pruned_string;
   base::RemoveChars(hsl_string, u"(%)hsla", &pruned_string);
-  const auto values = base::SplitStringPiece(
+  const std::vector<std::u16string_view> values = base::SplitStringPiece(
       pruned_string, u", ", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   double h, s, v;
   double a = 1.0;
@@ -584,7 +585,7 @@ std::optional<SkColor> 
TypeConverter<UNIQUE_TYPE_NAME(SkColor)>::ParseRgbString(
   // RgbaPiecesToSkColor.
   std::u16string pruned_string;
   base::RemoveChars(rgb_string, u"()rgba", &pruned_string);
-  auto values = base::SplitStringPiece(
+  std::vector<std::u16string_view> values = base::SplitStringPiece(
       pruned_string, u", ", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   // if it was just an rgb string, add the 1.0 alpha
   if (values.size() == 3)
diff --git a/ui/base/metadata/base_type_conversion.h 
b/ui/base/metadata/base_type_conversion.h
index 272ea5a95d823..fbe31992537e2 100644
--- a/ui/base/metadata/base_type_conversion.h
+++ b/ui/base/metadata/base_type_conversion.h
@@ -82,7 +82,7 @@ struct TypeConverter : BaseTypeConverter<std::is_enum_v<T>> {
   static std::u16string ToString(ArgType<T> source_value) {
     return u"<unknown>";
   }
-  static std::optional<T> FromString(const std::u16string& source_value) {
+  static std::optional<T> FromString(std::u16string_view source_value) {
     NOTREACHED();
   }
   static ValidStrings GetValidStrings() { return {}; }
@@ -135,7 +135,7 @@ struct EnumStringsMap;
                                                                       \
   template <>                                                         \
   EXPORT std::optional<T> ui::metadata::TypeConverter<T>::FromString( \
-      const std::u16string& str);                                     \
+      std::u16string_view str);                                       \
                                                                       \
   template <>                                                         \
   EXPORT ui::metadata::ValidStrings                                   \
@@ -169,7 +169,7 @@ struct EnumStringsMap;
                                                                             \
   template <>                                                               \
   std::optional<T> ui::metadata::TypeConverter<T>::FromString(              \
-      const std::u16string& str) {                                          \
+      std::u16string_view str) {                                            \
     const auto& map = EnumStringsMap<T>::Get();                             \
     using Pair = std::ranges::range_value_t<decltype(map)>;                 \
     auto it = std::ranges::find(map, str, &Pair::second);                   \
@@ -195,7 +195,7 @@ template <>
 struct COMPONENT_EXPORT(UI_BASE_METADATA) TypeConverter<bool>
     : BaseTypeConverter<true> {
   static std::u16string ToString(bool source_value);
-  static std::optional<bool> FromString(const std::u16string& source_value);
+  static std::optional<bool> FromString(std::u16string_view source_value);
   static ValidStrings GetValidStrings();
 };
 
@@ -222,15 +222,15 @@ struct COMPONENT_EXPORT(UI_BASE_METADATA)
   static std::u16string ToString(std::u16string_view source_value);
 };
 
-#define DECLARE_CONVERSIONS(T)                                              \
-  template <>                                                               \
-  struct COMPONENT_EXPORT(UI_BASE_METADATA)                                 \
-      TypeConverter<T> : BaseTypeConverter<true> {                          \
-    static std::u16string ToString(ArgType<T> source_value);                \
-    static std::optional<T> FromString(const std::u16string& source_value); \
-    static ValidStrings GetValidStrings() {                                 \
-      return {};                                                            \
-    }                                                                       \
+#define DECLARE_CONVERSIONS(T)                                            \
+  template <>                                                             \
+  struct COMPONENT_EXPORT(UI_BASE_METADATA)                               \
+      TypeConverter<T> : BaseTypeConverter<true> {                        \
+    static std::u16string ToString(ArgType<T> source_value);              \
+    static std::optional<T> FromString(std::u16string_view source_value); \
+    static ValidStrings GetValidStrings() {                               \
+      return {};                                                          \
+    }                                                                     \
   };
 
 DECLARE_CONVERSIONS(int8_t)
@@ -266,7 +266,7 @@ struct COMPONENT_EXPORT(UI_BASE_METADATA)
     TypeConverter<std::u16string> : BaseTypeConverter<true> {
   static std::u16string ToString(std::u16string_view source_value);
   static std::optional<std::u16string> FromString(
-      const std::u16string& source_value);
+      std::u16string_view source_value);
   static ValidStrings GetValidStrings() { return {}; }
 };
 
@@ -282,7 +282,7 @@ struct TypeConverter<std::optional<T>>
                         : std::u16string(kNullOptStr);
   }
   static std::optional<std::optional<T>> FromString(
-      const std::u16string& source_value) {
+      std::u16string_view source_value) {
     if (source_value == kNullOptStr) {
       return std::make_optional<std::optional<T>>(std::nullopt);
     }
@@ -304,7 +304,7 @@ struct TypeConverter<std::unique_ptr<T>> : 
BaseTypeConverter<false, true> {
     return PointerToString(source_value);
   }
   static std::optional<std::unique_ptr<T>> FromString(
-      const std::u16string& source_value) {
+      std::u16string_view source_value) {
     DCHECK(false) << "Type converter cannot convert from string.";
     return std::nullopt;
   }
@@ -316,7 +316,7 @@ struct TypeConverter<T*> : BaseTypeConverter<false, true> {
   static std::u16string ToString(T* source_value) {
     return PointerToString(source_value);
   }
-  static std::optional<T*> FromString(const std::u16string& source_value) {
+  static std::optional<T*> FromString(std::u16string_view source_value) {
     DCHECK(false) << "Type converter cannot convert from string.";
     return std::nullopt;
   }
@@ -330,19 +330,19 @@ struct TypeConverter<std::vector<T>>
     std::vector<std::u16string> serialized;
     std::ranges::transform(source_value, std::back_inserter(serialized),
                            &TypeConverter<T>::ToString);
-    return u"{" + base::JoinString(serialized, u",") + u"}";
+    return base::StrCat({u"{", base::JoinString(serialized, u","), u"}"});
   }
   static std::optional<std::vector<T>> FromString(
-      const std::u16string& source_value) {
+      std::u16string_view source_value) {
     if (source_value.empty() || source_value.front() != u'{' ||
         source_value.back() != u'}') {
       return std::nullopt;
     }
-    const auto values =
-        base::SplitString(source_value.substr(1, source_value.length() - 2),
-                          u",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+    std::vector<std::u16string_view> values = base::SplitStringPiece(
+        source_value.substr(1, source_value.length() - 2), u",",
+        base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
     std::vector<T> output;
-    for (const auto& value : values) {
+    for (std::u16string_view value : values) {
       if (auto ret = TypeConverter<T>::FromString(value)) {
         output.push_back(*std::move(ret));
       } else {
@@ -362,7 +362,7 @@ struct COMPONENT_EXPORT(UI_BASE_METADATA)
     TypeConverter<UNIQUE_TYPE_NAME(SkColor)>
     : BaseTypeConverter<true, false, kSkColorPrefix> {
   static std::u16string ToString(SkColor source_value);
-  static std::optional<SkColor> FromString(const std::u16string& source_value);
+  static std::optional<SkColor> FromString(std::u16string_view source_value);
   static ValidStrings GetValidStrings();
 
   // Parses a string within |start| and |end| for a color string in the forms
@@ -445,7 +445,7 @@ struct TypeConverter<T>
     return base::UTF8ToUTF16(source_value.ToString());
   }
 
-  static std::optional<T> FromString(const std::u16string& source_value) {
+  static std::optional<T> FromString(std::u16string_view source_value) {
     if constexpr (ClassHasFromString<T>) {
       return T::FromString(base::UTF16ToUTF8(source_value));
     }

++++++ chromium-7d76145781dca8ca4b26ee412360bf9e9c0a3b70.patch ++++++
commit 7d76145781dca8ca4b26ee412360bf9e9c0a3b70
Author: Lukasz Anforowicz <[email protected]>
Date:   Thu Oct 8 15:38:08 2026 -0700

    [crubit] Remove `cxx::bridge` from `qr_code_generator`.
    
    Crubit-based C++/Rust interop has been used since
    https://crrev.com/c/7749970 and enabled by default since
    https://crrev.com/c/8077420.  Since this has baked for a while, this CL
    removes the alternative interop approach that has been used by
    `qr_code_generator` in the past.
    
    Fixed: 533546009
    Change-Id: I36af65a3919590b3acfda1df13b8b01966f4162e
    Reviewed-on: 
https://chromium-review.googlesource.com/c/chromium/src/+/8106171
    Reviewed-by: Julia Hansbrough <[email protected]>
    Auto-Submit: Łukasz Anforowicz <[email protected]>
    Commit-Queue: Łukasz Anforowicz <[email protected]>
    Cr-Commit-Position: refs/heads/main@{#1715016}

diff --git a/components/qr_code_generator/BUILD.gn 
b/components/qr_code_generator/BUILD.gn
index 59e8114b48dde..f9226d5a1ade7 100644
--- a/components/qr_code_generator/BUILD.gn
+++ b/components/qr_code_generator/BUILD.gn
@@ -2,8 +2,6 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import("//build/buildflag_header.gni")
-import("//build/config/rust.gni")
 import("//testing/libfuzzer/fuzzer_test.gni")
 
 declare_args() {
@@ -11,7 +9,6 @@ declare_args() {
   enable_qr_print = false
 }
 
-# Error type shared between C++ and Rust.
 source_set("error") {
   public = [ "error.h" ]
 }
@@ -33,17 +30,6 @@ source_set("bitmap_generator") {
   ]
 }
 
-# TODO(https://crbug.com/533546009): After Crubit bakes and sticks on the
-# Stable release channel, then it should be okay to assume that
-# `enable_cpp_api_from_rust` will be forever true (and remove
-# `cxx::bridge`-related bits of QR code generator in this `BUILD.gn` file, bits
-# in `.cc` files, and the whole `qr_code_generator_ffi_glue.rs` file).
-buildflag_header("cpp_api_from_rust_buildflags") {
-  header = "cpp_api_from_rust_buildflags.h"
-  flags = [ "ENABLE_CPP_API_FROM_RUST=$enable_cpp_api_from_rust" ]
-  visibility = [ ":qr_code_generator" ]
-}
-
 source_set("qr_code_generator") {
   # Enforces that `qr_code_generator.h` does not #include headers from private
   # `deps`, which also stops GN from forwarding the Crubit bindings' hard_deps
@@ -51,35 +37,16 @@ source_set("qr_code_generator") {
   check_includes_strict = true
   public = [ "qr_code_generator.h" ]
   sources = [ "qr_code_generator.cc" ]
-  deps = [ ":cpp_api_from_rust_buildflags" ]
-  if (enable_cpp_api_from_rust) {
-    deps += [
-      "//build/rust/crubit",
-      "//third_party/rust/qr_code/v2:cpp_api_from_rust",
-    ]
-  } else {
-    deps += [ ":qr_code_generator_ffi_glue" ]
-  }
+  deps = [
+    "//build/rust/crubit",
+    "//third_party/rust/qr_code/v2:cpp_api_from_rust",
+  ]
   public_deps = [
     ":error",
     "//base",
   ]
 }
 
-if (!enable_cpp_api_from_rust) {
-  rust_static_library("qr_code_generator_ffi_glue") {
-    allow_unsafe = true  # Needed for FFI that underpins the `cxx` crate.
-    crate_root = "qr_code_generator_ffi_glue.rs"
-    sources = [ "qr_code_generator_ffi_glue.rs" ]
-    cxx_bindings = [ "qr_code_generator_ffi_glue.rs" ]
-    visibility = [ ":qr_code_generator" ]
-    deps = [
-      ":error",
-      "//third_party/rust/qr_code/v2:lib",
-    ]
-  }
-}
-
 source_set("unit_tests") {
   testonly = true
   sources = [
diff --git a/components/qr_code_generator/qr_code_generator.cc 
b/components/qr_code_generator/qr_code_generator.cc
index c48dc68554289..277a0f5aaac6e 100644
--- a/components/qr_code_generator/qr_code_generator.cc
+++ b/components/qr_code_generator/qr_code_generator.cc
@@ -10,17 +10,10 @@
 
 #include "base/check.h"
 #include "base/check_op.h"
-#include "base/containers/span_rust.h"
 #include "base/numerics/safe_conversions.h"
-#include "components/qr_code_generator/cpp_api_from_rust_buildflags.h"
-
-#if BUILDFLAG(ENABLE_CPP_API_FROM_RUST)
 #include "third_party/crubit/support/rs_std/iterator_adapter.h"
 #include "third_party/crubit/support/rs_std/slice_ref.h"
 #include "third_party/rust/qr_code/v2/qr_code.h"
-#else
-#include "components/qr_code_generator/qr_code_generator_ffi_glue.rs.h"
-#endif
 
 namespace qr_code_generator {
 
@@ -29,7 +22,6 @@ GeneratedCode::~GeneratedCode() = default;
 GeneratedCode::GeneratedCode(GeneratedCode&&) = default;
 GeneratedCode& GeneratedCode::operator=(GeneratedCode&&) = default;
 
-#if BUILDFLAG(ENABLE_CPP_API_FROM_RUST)
 Error RustErrorToCppError(const ::qr_code::types::QrError& rust_error) {
   if (rust_error == ::qr_code::types::QrError::MakeDataTooLong()) {
     return Error::kInputTooLong;
@@ -71,32 +63,5 @@ base::expected<GeneratedCode, Error> GenerateCode(
   CHECK_EQ(code.data.size(), static_cast<size_t>(code.qr_size * code.qr_size));
   return code;
 }
-#else
-base::expected<GeneratedCode, Error> GenerateCode(
-    base::span<const uint8_t> in,
-    std::optional<int> min_version) {
-  rust::Slice<const uint8_t> rs_in = base::SpanToRustSlice(in);
-
-  // `min_version` might come from a fuzzer and therefore we use a lenient
-  // `saturated_cast` instead of a `checked_cast`.
-  int16_t rs_min_version =
-      base::saturated_cast<int16_t>(min_version.value_or(0));
-
-  std::vector<uint8_t> result_pixels;
-  size_t result_width = 0;
-  Error result_error = Error::kUnknownError;
-  bool result_is_success = generate_qr_code_using_rust(
-      rs_in, rs_min_version, result_pixels, result_width, result_error);
-
-  if (!result_is_success) {
-    return base::unexpected(result_error);
-  }
-  GeneratedCode code;
-  code.data = std::move(result_pixels);
-  code.qr_size = base::checked_cast<int>(result_width);
-  CHECK_EQ(code.data.size(), static_cast<size_t>(code.qr_size * code.qr_size));
-  return code;
-}
-#endif
 
 }  // namespace qr_code_generator
diff --git a/components/qr_code_generator/qr_code_generator_ffi_glue.rs 
b/components/qr_code_generator/qr_code_generator_ffi_glue.rs
deleted file mode 100644
index eeb7584630c83..0000000000000
--- a/components/qr_code_generator/qr_code_generator_ffi_glue.rs
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright 2023 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-use cxx::CxxVector;
-use qr_code::types::{Color, EcLevel, QrError};
-use qr_code::{QrCode, Version};
-use std::pin::Pin;
-
-#[cxx::bridge(namespace = "qr_code_generator")]
-mod ffi {
-    #[repr(u8)]
-    enum Error {
-        kUnknownError = 0,
-        kInputTooLong = 1,
-    }
-
-    extern "C++" {
-        include!("components/qr_code_generator/error.h");
-        type Error;
-    }
-
-    extern "Rust" {
-        fn generate_qr_code_using_rust(
-            data: &[u8],
-            min_version: i16,
-            out_pixels: Pin<&mut CxxVector<u8>>,
-            out_qr_size: &mut usize,
-            out_error: &mut Error,
-        ) -> bool;
-    }
-}
-
-/// Translates `data` into a QR code.
-///
-/// `min_version` can request a minimum QR code version.
-fn generate(data: &[u8], min_version: Option<i16>) -> Result<QrCode, QrError> {
-    let mut qr_code = QrCode::new(data)?;
-
-    let actual_version = match qr_code.version() {
-        Version::Micro(_) => panic!("QrCode::new should not generate micro QR 
codes"),
-        Version::Normal(actual_version) => actual_version,
-    };
-
-    match min_version {
-        None => (),
-        Some(min_version) if actual_version >= min_version => (),
-        Some(min_version) => {
-            // If `actual_version` < `min_version`, then re-encode using 
`min_version`
-            qr_code = QrCode::with_version(data, Version::Normal(min_version), 
EcLevel::M)?;
-        }
-    }
-
-    Ok(qr_code)
-}
-
-/// Translates `data` into a QR code.
-///
-/// `min_version` can request a minimum QR code version (e.g. if the caller
-/// requires that the QR code has a certain minimal width and height;  for
-/// example, QR code version 5 translates into 37x37 QR pixels).  Setting
-/// `min_version` to 0 means that the caller doesn't have any QR version
-/// requirements.
-///
-/// On success returns `true` and populates `out_pixels` and `out_qr_size`.  On
-/// failure returns `false` and populates `out_error`.
-pub fn generate_qr_code_using_rust(
-    data: &[u8],
-    min_version: i16,
-    mut out_pixels: Pin<&mut CxxVector<u8>>,
-    out_qr_size: &mut usize,
-    out_error: &mut ffi::Error,
-) -> bool {
-    let min_version = match min_version {
-        0 => None,
-        1..=40 => Some(min_version),
-        _ => {
-            *out_error = ffi::Error::kUnknownError;
-            return false;
-        }
-    };
-
-    match generate(data, min_version) {
-        Err(err) => {
-            *out_error = match err {
-                QrError::DataTooLong => ffi::Error::kInputTooLong,
-                _ => ffi::Error::kUnknownError,
-            };
-            false
-        }
-        Ok(qr_code) => {
-            *out_qr_size = qr_code.width();
-
-            assert!(out_pixels.is_empty());
-            for color in qr_code.into_colors() {
-                let u8_value = match color {
-                    Color::Light => 0,
-                    Color::Dark => 1,
-                };
-                out_pixels.as_mut().push(u8_value);
-            }
-
-            true
-        }
-    }
-}

++++++ chromium-e0f704daa316a959feb165460602f4ed982e718f.patch ++++++
commit e0f704daa316a959feb165460602f4ed982e718f
Author: Christopher Cameron <[email protected]>
Date:   Mon Sep 28 18:40:10 2026 -0700

    media: Reset timed metadata on seek in FFmpegDemuxer
    
    The last patch in this sequence added a TODO indicating that seeking to
    a timestamp in the seeking stream could, in principle, skip over the
    timed metadata samples that apply to the frames being resumed at.
    
    This turned out not to be the case! FFmpeg's demuxer seeks each stream
    individually by default, so each metadata stream is seeked back to the
    sample covering the resume point, so no change was needed to address the
    TODO.
    
    Add a test with a file where all metadata samples precede all video
    samples, which seeks to the middle of the file and back to the start,
    and verifies that the correct metadata is attached to the first frame
    read after each seek.
    
    Discard all cached timed metadata after seeking (except for seeks when
    changing tracks).
    
    Bug: 480162031
    Change-Id: I29b4dadb4d8073dee476fbde9a219fdf6208156a
    Reviewed-on: 
https://chromium-review.googlesource.com/c/chromium/src/+/8462587
    Commit-Queue: ccameron chromium <[email protected]>
    Reviewed-by: Dale Curtis <[email protected]>
    Cr-Commit-Position: refs/heads/main@{#1706582}

diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index f9e132f98b0f6..3df3cceb27629 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -656,10 +656,6 @@ void FFmpegDemuxerStream::FlushBuffers(bool 
preserve_packet_position) {
   last_packet_timestamp_ = kNoTimestamp;
   last_packet_duration_ = kNoTimestamp;
   aborted_ = false;
-
-  // The demuxer's timed metadata is deliberately not reset. Seeking does not
-  // re-demux the metadata samples that were skipped over, so the only metadata
-  // available after seeking backwards is what was cached before.
 }
 
 void FFmpegDemuxerStream::Abort() {
@@ -1143,9 +1139,8 @@ void FFmpegDemuxer::SeekInternal(base::TimeDelta time,
   const int64_t seek_timestamp =
       ConvertToTimeBase(demux_stream->stream_time_base(), seek_time);
 
-  // TODO(https://crbug.com/480162031): Seeking to `seek_timestamp` in
-  // `seeking_stream` may skip over the corresponding metadata samples. Collect
-  // these samples and cache them before seeking.
+  // The MP4 demuxer seeks each stream individually, so metadata samples needed
+  // after the seek will be demuxed again.
   blocking_task_runner_->PostTaskAndReplyWithResult(
       FROM_HERE,
       base::BindOnce(&AVSeekFrame, glue_->format_context(),
@@ -1777,6 +1772,12 @@ void FFmpegDemuxer::OnSeekFrameDone(int result) {
       stream->FlushBuffers(false);
   }
 
+  // Needed metadata will be demuxed again (see SeekInternal()). Track-change
+  // seeks (which keep other streams' buffers) don't reset.
+  for (auto& it : metadata_tracks_) {
+    it.second.track->Reset();
+  }
+
   // Resume reading until capacity.
   ReadFrameIfNeeded();
 
diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h
index f2586f54de7f7..79954b86a61fa 100644
--- a/media/filters/ffmpeg_demuxer.h
+++ b/media/filters/ffmpeg_demuxer.h
@@ -378,9 +378,9 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer {
 
   // The timed metadata tracks and the render streams that reference them.
   //
-  // Nothing prunes the metadata that these accumulate, so they grow for the
-  // duration of playback, and are invisible to IsMaxMemoryUsageReached(),
-  // however adjacent samples are deduped.
+  // The metadata that these accumulate is only discarded when seeking, so they
+  // grow for the duration of linear playback, and are invisible to
+  // IsMaxMemoryUsageReached(), however adjacent samples are deduped.
   MetadataTrackMap metadata_tracks_;
 
   // |streams_| mirrors the AVStream array in AVFormatContext. It contains
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc 
b/media/filters/ffmpeg_demuxer_unittest.cc
index 1f683d35bb342..3f1b487745b40 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -9,6 +9,7 @@
 
 #include <algorithm>
 #include <array>
+#include <cmath>
 #include <memory>
 #include <string>
 #include <utility>
@@ -50,6 +50,7 @@
 #include "media/mojo/services/gpu_mojo_media_client_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/color_space.h"
+#include "ui/gfx/hdr_metadata.h"
 
 using ::testing::_;
 using ::testing::AnyNumber;
@@ -346,6 +348,23 @@ class FFmpegDemuxerTest : public testing::Test {
     event.RunAndWaitForStatus(PIPELINE_OK);
   }
 
+  // Reads a single buffer from `stream`, which must succeed.
+  scoped_refptr<DecoderBuffer> ReadBuffer(DemuxerStream* stream) {
+    scoped_refptr<DecoderBuffer> buffer;
+    base::RunLoop run_loop;
+    stream->Read(1, base::BindLambdaForTesting(
+                        [&](DemuxerStream::Status status,
+                            DemuxerStream::DecoderBufferVector buffers) {
+                          CHECK_EQ(status, DemuxerStream::kOk);
+                          CHECK_EQ(buffers.size(), 1u);
+                          buffer = std::move(buffers[0]);
+                          run_loop.Quit();
+                        }));
+    run_loop.Run();
+    task_environment_.RunUntilIdle();
+    return buffer;
+  }
+
   int64_t GetExpectedMemoryUsage(int number_of_buffers, int data_size) const {
     return number_of_buffers * sizeof(DecoderBuffer) + data_size;
   }
@@ -1971,6 +1972,48 @@
        base::TimeDelta(), true);
 }
 
+// All of the metadata samples are at the start of the file, so seeking to the
+// middle of the file skips over them. Seeking discards all cached metadata, so
+// verify that the metadata that applies to the frames that are read after
+// seeking is demuxed again and attached to them.
+TEST_F(FFmpegDemuxerTest, AgtmMetadataMp4Seek) {
+  base::test::ScopedFeatureList scoped_feature_list(
+      kFFmpegDemuxerIT35MetadataTrack);
+  CreateDemuxer("staircase-pq-av1-st-2094-50-rndr.mp4");
+  InitializeDemuxer();
+  DemuxerStream* video = GetStream(DemuxerStream::VIDEO);
+
+  // Reads a buffer from `video`, and verifies that it is the keyframe at
+  // `timestamp_us` with the AGTM metadata `serialized_agtm`.
+  auto read_and_verify = [&](int64_t timestamp_us,
+                             base::span<const uint8_t> serialized_agtm) {
+    scoped_refptr<DecoderBuffer> buffer = ReadBuffer(video);
+    ASSERT_TRUE(buffer);
+    EXPECT_TRUE(buffer->is_key_frame());
+    EXPECT_EQ(buffer->timestamp().InMicroseconds(), timestamp_us);
+    ASSERT_TRUE(buffer->side_data());
+    ASSERT_TRUE(buffer->side_data()->hdr_metadata.HasAgtm());
+
+    gfx::HDRMetadata expected;
+    expected.SetSerializedAgtm(serialized_agtm);
+    ASSERT_TRUE(expected.HasAgtm());
+    EXPECT_EQ(buffer->side_data()->hdr_metadata.GetAgtm(), expected.GetAgtm());
+  };
+
+  // Reading resumes at the keyframe at 161/30 seconds, which is in the
+  // metadata sample for [5, 6).
+  Seek(base::Seconds(6));
+  read_and_verify(
+      std::lround(161.0 * base::Time::kMicrosecondsPerSecond / 30),
+      std::to_array<uint8_t>({0x00, 0xc0, 0x03, 0xf7, 0x59, 0xdc, 0x04}));
+
+  // Seeking back to the start resumes at the first keyframe, which is in the
+  // metadata sample for [0, 1).
+  Seek(base::TimeDelta());
+  read_and_verify(
+      0, std::to_array<uint8_t>({0x00, 0xc0, 0x00, 0x05, 0xea, 0x60, 0x04}));
+}
+
 #endif  // BUILDFLAG(ENABLE_AV1_DECODER)
 
 }  // namespace media

++++++ ppc-fedora-0001-Add-PPC64-support-for-boringssl.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.751948346 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.761948765 +0100
@@ -8785,17 +8785,17 @@
 ===================================================================
 --- chromium-146.0.7680.65.orig/third_party/boringssl/src/build.json
 +++ chromium-146.0.7680.65/third_party/boringssl/src/build.json
-@@ -129,6 +129,10 @@
-             {"src": "crypto/fipsmodule/sha/asm/sha512-armv4.pl"},
-             {"src": "crypto/fipsmodule/aes/asm/vpaes-armv7.pl"}
+@@ -182,6 +182,10 @@
+                 "src": "crypto/fipsmodule/aes/asm/vpaes-armv7.pl"
+             }
          ],
 +        "perlasm_ppc64le": [
 +            {"src": "crypto/fipsmodule/aes/asm/aesp8-ppc.pl"},
 +            {"src": "crypto/fipsmodule/aes/asm/ghashp8-ppc.pl"}
 +        ],
          "perlasm_x86": [
-             {"src": "crypto/fipsmodule/aes/asm/aesni-x86.pl"},
-             {"src": "crypto/fipsmodule/bn/asm/bn-586.pl"},
+             {
+                 "src": "crypto/fipsmodule/aes/asm/aesni-x86.pl"
 @@ -238,6 +242,7 @@
              "crypto/cpu_arm_freebsd.cc",
              "crypto/cpu_arm_linux.cc",
@@ -8804,16 +8804,16 @@
              "crypto/crypto.cc",
              "crypto/curve25519/curve25519.cc",
              "crypto/curve25519/curve25519_64_adx.cc",
-@@ -806,6 +811,9 @@
-         "perlasm_arm": [
-             {"src": "crypto/test/asm/trampoline-armv4.pl"}
+@@ -949,6 +953,9 @@
+                 "src": "crypto/test/asm/trampoline-armv4.pl"
+             }
          ],
 +        "perlasm_ppc64le": [
 +            {"src": "crypto/test/asm/trampoline-ppc.pl"}
 +        ],
          "perlasm_x86": [
-             {"src": "crypto/test/asm/trampoline-x86.pl"}
-         ],
+             {
+                 "src": "crypto/test/asm/trampoline-x86.pl"
 Index: 
chromium-146.0.7680.65/third_party/boringssl/src/util/pregenerate/build.go
 ===================================================================
 --- 
chromium-146.0.7680.65.orig/third_party/boringssl/src/util/pregenerate/build.go
@@ -8869,14 +8869,14 @@
    "gen/bcm/ghash-ssse3-x86-apple.S",
    "gen/bcm/ghash-ssse3-x86-linux.S",
    "gen/bcm/ghash-ssse3-x86_64-apple.S",
-@@ -365,6 +367,7 @@ crypto_sources = [
+@@ -367,6 +367,7 @@
    "crypto/cpu_arm_freebsd.cc",
    "crypto/cpu_arm_linux.cc",
    "crypto/cpu_intel.cc",
 +  "crypto/cpu_ppc64le.cc",
    "crypto/crypto.cc",
+   "crypto/curve25519/cpace.cc",
    "crypto/curve25519/curve25519.cc",
-   "crypto/curve25519/curve25519_64_adx.cc",
 Index: chromium-146.0.7680.65/third_party/boringssl/src/gen/sources.bzl
 ===================================================================
 --- chromium-146.0.7680.65.orig/third_party/boringssl/src/gen/sources.bzl
@@ -8897,14 +8897,14 @@
      "gen/bcm/ghashv8-armv7-linux.S",
      "gen/bcm/ghashv8-armv8-apple.S",
      "gen/bcm/ghashv8-armv8-linux.S",
-@@ -365,6 +367,7 @@ crypto_sources = [
+@@ -367,6 +367,7 @@
      "crypto/cpu_arm_freebsd.cc",
      "crypto/cpu_arm_linux.cc",
      "crypto/cpu_intel.cc",
 +    "crypto/cpu_ppc64le.cc",
      "crypto/crypto.cc",
+     "crypto/curve25519/cpace.cc",
      "crypto/curve25519/curve25519.cc",
-     "crypto/curve25519/curve25519_64_adx.cc",
 Index: chromium-146.0.7680.65/third_party/perfetto/buildtools/grpc/BUILD.gn
 ===================================================================
 --- chromium-146.0.7680.65.orig/third_party/perfetto/buildtools/grpc/BUILD.gn

++++++ ppc-fedora-0002-Add-PPC64-generated-files-for-boringssl.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:51.879953708 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:51.891954211 +0100
@@ -4291,14 +4291,14 @@
    gen/bcm/ghashv8-armv7-linux.S
    gen/bcm/ghashv8-armv8-apple.S
    gen/bcm/ghashv8-armv8-linux.S
-@@ -352,6 +354,7 @@ set(
+@@ -385,6 +385,7 @@
    crypto/cpu_arm_freebsd.cc
    crypto/cpu_arm_linux.cc
    crypto/cpu_intel.cc
 +  crypto/cpu_ppc64le.cc
    crypto/crypto.cc
+   crypto/curve25519/cpace.cc
    crypto/curve25519/curve25519.cc
-   crypto/curve25519/curve25519_64_adx.cc
 @@ -2980,6 +2983,7 @@ set(
    gen/test_support/trampoline-armv8-apple.S
    gen/test_support/trampoline-armv8-linux.S
@@ -4327,14 +4327,14 @@
        "gen/bcm/ghashv8-armv7-linux.S",
        "gen/bcm/ghashv8-armv8-apple.S",
        "gen/bcm/ghashv8-armv8-linux.S",
-@@ -322,6 +324,7 @@
+@@ -351,6 +351,7 @@
        "crypto/cpu_arm_freebsd.cc",
        "crypto/cpu_arm_linux.cc",
        "crypto/cpu_intel.cc",
 +      "crypto/cpu_ppc64le.cc",
        "crypto/crypto.cc",
+       "crypto/curve25519/cpace.cc",
        "crypto/curve25519/curve25519.cc",
-       "crypto/curve25519/curve25519_64_adx.cc",
 @@ -2892,6 +2895,7 @@
        "gen/test_support/trampoline-armv8-apple.S",
        "gen/test_support/trampoline-armv8-linux.S",

++++++ ppc-fedora-0002-regenerate-xnn-buildgn.patch ++++++
++++ 34204 lines (skipped)
++++ between 
/work/SRC/openSUSE:Factory/chromium/ppc-fedora-0002-regenerate-xnn-buildgn.patch
++++ and 
/work/SRC/openSUSE:Factory/.chromium.new.3759290/ppc-fedora-0002-regenerate-xnn-buildgn.patch

++++++ ppc-fedora-skia-vsx-instructions.patch ++++++
--- /var/tmp/diff_new_pack.G9LjOP/_old  2026-11-04 19:48:52.620984751 +0100
+++ /var/tmp/diff_new_pack.G9LjOP/_new  2026-11-04 19:48:52.631985211 +0100
@@ -489,36 +489,34 @@
          // The constrained_add is the most subtle part of lerp. The first 
term is on the interval
          // [-1, 1), and the second term is on the interval is on the interval 
[0, 1) because
          // both terms are too high by a factor of 2 which will be handled 
below. (Both R and L are
-@@ -6757,7 +7017,12 @@ LOWP_STAGE_GP(bilerp_clamp_8888, const S
+@@ -7429,7 +7429,12 @@
          U16 v2  = constrained_add(scaled_mult(tx, width), middle) + 1;
          // Divide by 2 to calculate v and at the same time bring the 
intermediate value onto the
          // interval [0, 1/2] to set up for the lerpY.
 +#if defined(SKRP_CPU_VSX)
-+      // constrained_add() on POWER is run in half precision mode to avoid 
undefined behavior
++       // constrained_add() on POWER is run in half precision mode to avoid 
undefined behavior
 +        return v2;
 +#else
          return v2 >> 1;
 +#endif
      };
  
-     const uint32_t* ptr;
-@@ -6791,9 +7056,15 @@ LOWP_STAGE_GP(bilerp_clamp_8888, const S
-         I16 width  = (I16)bottom - (I16)top;
-         U16 middle = bottom + top;
+     // `roundDownAtInteger` is only used by nearest-neighbor (`gather_*`) 
stages.
+@@ -7519,7 +7524,13 @@
          // Add + 0x80 for rounding.
+-        U16 blend  = constrained_add(scaled_mult(ty, width), middle) + 0x80;
+ 
 +#if defined(SKRP_CPU_VSX)
-+      // constrained_add() on POWER is run in half precision mode to avoid 
undefined behavior
++        // constrained_add() on POWER is run in half precision mode to avoid 
undefined behavior
 +        U16 blend  = constrained_add(scaled_mult(ty, width) / 2, middle / 2) 
+ (0x80 / 2);
 +        return blend >> 7;
 +#else
-         U16 blend  = constrained_add(scaled_mult(ty, width), middle) + 0x80;
--
++        U16 blend  = constrained_add(scaled_mult(ty, width), middle) + 0x80;
          return blend >> 8;
 +#endif
-+
      };
  
-     r = lerpY(topR, bottomR);
+     *r = lerpY(topR, bottomR);
 Index: chromium-144.0.7559.59/third_party/skia/src/core/SkVx.h
 ===================================================================
 --- chromium-144.0.7559.59.orig/third_party/skia/src/core/SkVx.h
@@ -699,6 +697,4 @@
      // The following (left) shifts cause the top 5 bits of the mask 
components to
      // line up with the corresponding components in an SkPMColor.
      // Note that the mask's RGB16 order may differ from the SkPMColor order.
---- chromium-148.0.7778.5/third_party/skia/src/opts/SkRasterPipeline_opts.h    
2026/04/08 22:36:34     1.1
-+++ chromium-148.0.7778.5/third_party/skia/src/opts/SkRasterPipeline_opts.h    
2026/04/08 22:39:31
 

Reply via email to