summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO17
-rw-r--r--PKGBUILD11
-rw-r--r--REVERT-simplify-blink-NativeValueTraitsBase.patch747
3 files changed, 761 insertions, 14 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 08728e5..c44084d 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = ungoogled-chromium
pkgdesc = A lightweight approach to removing Google web service dependency
- pkgver = 121.0.6167.139
+ pkgver = 121.0.6167.184
pkgrel = 1
url = https://github.com/ungoogled-software/ungoogled-chromium
arch = x86_64
@@ -39,6 +39,7 @@ pkgbase = ungoogled-chromium
depends = flac
depends = libxml2
depends = libwebp
+ depends = minizip
depends = opus
depends = harfbuzz
depends = libxslt
@@ -51,27 +52,27 @@ pkgbase = ungoogled-chromium
optdepends = org.freedesktop.secrets: password storage backend on GNOME / Xfce
optdepends = kwallet: support for storing passwords in KWallet on Plasma
optdepends = chromium-extension-web-store: Web Store Functionality
- provides = chromium=121.0.6167.139
- provides = chromedriver=121.0.6167.139
+ provides = chromium=121.0.6167.184
+ provides = chromedriver=121.0.6167.184
conflicts = chromium
conflicts = chromedriver
options = !lto
- source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-121.0.6167.139.tar.xz
+ source = https://commondatastorage.googleapis.com/chromium-browser-official/chromium-121.0.6167.184.tar.xz
source = https://github.com/foutrelis/chromium-launcher/archive/v8/chromium-launcher-8.tar.gz
source = https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/121/chromium-patches-121.tar.bz2
- source = REVERT-simplify-blink-NativeValueTraitsBase.patch::https://github.com/chromium/chromium/commit/940af9f2c87b.patch
+ source = REVERT-simplify-blink-NativeValueTraitsBase.patch
source = icu-74.patch
source = chromium-121-constexpr.patch
source = drop-flags-unsupported-by-clang16.patch
source = compiler-rt-16.patch
source = use-oauth2-client-switches-as-default.patch
- source = ungoogled-chromium-121.0.6167.139-1.tar.gz::https://github.com/ungoogled-software/ungoogled-chromium/archive/121.0.6167.139-1.tar.gz
+ source = ungoogled-chromium-121.0.6167.184-1.tar.gz::https://github.com/ungoogled-software/ungoogled-chromium/archive/121.0.6167.184-1.tar.gz
source = 0001-vaapi-flag-ozone-wayland.patch
source = 0001-adjust-buffer-format-order.patch
source = 0001-enable-linux-unstable-deb-target.patch
source = 0001-ozone-wayland-implement-text_input_manager_v3.patch
source = 0001-ozone-wayland-implement-text_input_manager-fixes.patch
- sha256sums = e12cc967bef7a79630828792f02d95297a06eb905c98e4c6e065fd5e74d6f9ff
+ sha256sums = 9fd6b82e7077ac26ec264bfcfc8ac8e0c2a0240378f035c9c0f34ad467aef09d
sha256sums = 213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a
sha256sums = e9113c1ed2900b84b488e608774ce25212d3c60094abdae005d8a943df9b505e
sha256sums = 318df8f8662071cebcdf953698408058e17f59f184500b7e12e01a04a4206b50
@@ -80,7 +81,7 @@ pkgbase = ungoogled-chromium
sha256sums = 8d1cdf3ddd8ff98f302c90c13953f39cd804b3479b13b69b8ef138ac57c83556
sha256sums = 8a2649dcc6ff8d8f24ddbe40dc2a171824f681c6f33c39c4792b645b87c9dcab
sha256sums = e393174d7695d0bafed69e868c5fbfecf07aa6969f3b64596d0bae8b067e1711
- sha256sums = a4f389f9159effbbe47a07ade0b8b9b86ebb64a56230ea7a4b43664cd499f829
+ sha256sums = feb1039d4d5c13fbeb53736e0f0bbfea09c7d71af81bcc7b52d0fb42fd86a4a1
sha256sums = 9a5594293616e1390462af1f50276ee29fd6075ffab0e3f944f6346cb2eb8aec
sha256sums = 8ba5c67b7eb6cacd2dbbc29e6766169f0fca3bbb07779b1a0a76c913f17d343f
sha256sums = 2a44756404e13c97d000cc0d859604d6848163998ea2f838b3b9bb2c840967e3
diff --git a/PKGBUILD b/PKGBUILD
index 961acd9..0af1727 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -11,7 +11,7 @@
# Contributor: Daniel J Griffiths <ghost1227@archlinux.us>
pkgname=ungoogled-chromium
-pkgver=121.0.6167.139
+pkgver=121.0.6167.184
pkgrel=1
_launcher_ver=8
_manual_clone=0
@@ -35,13 +35,13 @@ options=('!lto') # Chromium adds its own flags for ThinLTO
source=(https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver.tar.xz
https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver/chromium-launcher-$_launcher_ver.tar.gz
https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/${pkgver%%.*}/chromium-patches-${pkgver%%.*}.tar.bz2
- REVERT-simplify-blink-NativeValueTraitsBase.patch::https://github.com/chromium/chromium/commit/940af9f2c87b.patch
+ REVERT-simplify-blink-NativeValueTraitsBase.patch
icu-74.patch
chromium-121-constexpr.patch
drop-flags-unsupported-by-clang16.patch
compiler-rt-16.patch
use-oauth2-client-switches-as-default.patch)
-sha256sums=('e12cc967bef7a79630828792f02d95297a06eb905c98e4c6e065fd5e74d6f9ff'
+sha256sums=('9fd6b82e7077ac26ec264bfcfc8ac8e0c2a0240378f035c9c0f34ad467aef09d'
'213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a'
'e9113c1ed2900b84b488e608774ce25212d3c60094abdae005d8a943df9b505e'
'318df8f8662071cebcdf953698408058e17f59f184500b7e12e01a04a4206b50'
@@ -70,13 +70,12 @@ source=("${source[@]}"
0001-ozone-wayland-implement-text_input_manager_v3.patch
0001-ozone-wayland-implement-text_input_manager-fixes.patch)
sha256sums=("${sha256sums[@]}"
- 'a4f389f9159effbbe47a07ade0b8b9b86ebb64a56230ea7a4b43664cd499f829'
+ 'feb1039d4d5c13fbeb53736e0f0bbfea09c7d71af81bcc7b52d0fb42fd86a4a1'
'9a5594293616e1390462af1f50276ee29fd6075ffab0e3f944f6346cb2eb8aec'
'8ba5c67b7eb6cacd2dbbc29e6766169f0fca3bbb07779b1a0a76c913f17d343f'
'2a44756404e13c97d000cc0d859604d6848163998ea2f838b3b9bb2c840967e3'
'd9974ddb50777be428fd0fa1e01ffe4b587065ba6adefea33678e1b3e25d1285'
'a2da75d0c20529f2d635050e0662941c0820264ea9371eb900b9d90b5968fa6a')
-
# Possible replacements are listed in build/linux/unbundle/replace_gn_files.py
# Keys are the names in the above script; values are the dependencies in Arch
@@ -103,7 +102,7 @@ declare -gA _system_libs=(
#[re2]=re2 # needs libstdc++
#[snappy]=snappy # needs libstdc++
#[woff2]=woff2 # needs libstdc++
- #[zlib]=minizip
+ [zlib]=minizip
)
_unwanted_bundled_libs=(
$(printf "%s\n" ${!_system_libs[@]} | sed 's/^libjpeg$/&_turbo/')
diff --git a/REVERT-simplify-blink-NativeValueTraitsBase.patch b/REVERT-simplify-blink-NativeValueTraitsBase.patch
new file mode 100644
index 0000000..fc046cb
--- /dev/null
+++ b/REVERT-simplify-blink-NativeValueTraitsBase.patch
@@ -0,0 +1,747 @@
+From 940af9f2c87b436559b97c53763aa9eaaf1254eb Mon Sep 17 00:00:00 2001
+From: Jeremy Roman <jbroman@chromium.org>
+Date: Wed, 15 Nov 2023 16:24:54 +0000
+Subject: [PATCH] Use C++20 features to simplify blink::NativeValueTraitsBase.
+
+These allow some of the metaprogramming bits to be simplified a little.
+
+Change-Id: I052b4397586d21348401616e1792afdb9662f975
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5030335
+Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
+Commit-Queue: Jeremy Roman <jbroman@chromium.org>
+Cr-Commit-Position: refs/heads/main@{#1224978}
+---
+ .../bindings/core/v8/native_value_traits.h | 54 ++----
+ .../v8/native_value_traits_buffer_sources.cc | 166 ++++++++----------
+ .../core/v8/native_value_traits_impl.h | 159 +++++++----------
+ 3 files changed, 151 insertions(+), 228 deletions(-)
+
+diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
+index 7fc91d14acc71a2..1e5a0790df6da81 100644
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
+@@ -5,6 +5,7 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
+ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
+
++#include <concepts>
+ #include <type_traits>
+
+ #include "third_party/blink/renderer/bindings/core/v8/idl_types_base.h"
+@@ -30,7 +31,7 @@ class ExceptionState;
+ // return toInt32(isolate, value, exceptionState, NormalConversion);
+ // }
+ // }
+-template <typename T, typename SFINAEHelper = void>
++template <typename T>
+ struct NativeValueTraits;
+
+ // This declaration serves only as a blueprint for specializations: the
+@@ -45,22 +46,15 @@ struct NativeValueTraits;
+
+ namespace bindings {
+
+-template <typename T, typename = void>
+-struct NativeValueTraitsHasIsNull : std::false_type {};
+-
+ template <typename T>
+-struct NativeValueTraitsHasIsNull<
+- T,
+- std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
++struct ImplTypeFor {
++ using type = T;
++};
+
+ template <typename T>
+-struct NativeValueTraitsHasNullValue {
+- // true if |T| supports IDL null value.
+- static constexpr bool value =
+- // ScriptValue, String, and union types have IsNull member function.
+- bindings::NativeValueTraitsHasIsNull<T>::value ||
+- // Pointer types have nullptr as IDL null value.
+- std::is_pointer<T>::value;
++ requires std::derived_from<T, IDLBase>
++struct ImplTypeFor<T> {
++ using type = typename T::ImplType;
+ };
+
+ } // namespace bindings
+@@ -78,37 +72,17 @@ struct NativeValueTraitsHasNullValue {
+ // If present, |NullValue()| will be used when converting from the nullable type
+ // T?, and should be used if the impl type has an existing "null" state. If not
+ // present, WTF::Optional will be used to wrap the type.
+-template <typename T, typename SFINAEHelper = void>
+-struct NativeValueTraitsBase {
+- STATIC_ONLY(NativeValueTraitsBase);
+-
+- using ImplType = T;
+-
+- static constexpr bool has_null_value =
+- bindings::NativeValueTraitsHasNullValue<ImplType>::value;
+-
+- template <typename... ExtraArgs>
+- static decltype(auto) ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state,
+- ExtraArgs... extra_args) {
+- return NativeValueTraits<std::remove_pointer_t<T>>::NativeValue(
+- isolate, value, exception_state,
+- std::forward<ExtraArgs>(extra_args)...);
+- }
+-};
+-
+ template <typename T>
+-struct NativeValueTraitsBase<
+- T,
+- std::enable_if_t<std::is_base_of<IDLBase, T>::value>> {
++struct NativeValueTraitsBase {
+ STATIC_ONLY(NativeValueTraitsBase);
+
+- using ImplType = typename T::ImplType;
++ using ImplType = bindings::ImplTypeFor<T>::type;
+
++ // Pointer types have nullptr as IDL null value.
++ // ScriptValue, String, and union types have IsNull member function.
+ static constexpr bool has_null_value =
+- bindings::NativeValueTraitsHasNullValue<ImplType>::value;
++ std::is_pointer_v<ImplType> ||
++ requires(ImplType value) { value.IsNull(); };
+
+ template <typename... ExtraArgs>
+ static decltype(auto) ArgumentValue(v8::Isolate* isolate,
+diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
+index 508ea6d8eea481e..18de71d84023f0c 100644
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
+@@ -7,6 +7,7 @@
+ #include "third_party/blink/renderer/core/core_export.h"
+ #include "third_party/blink/renderer/core/execution_context/execution_context.h"
+ #include "third_party/blink/renderer/core/frame/web_feature.h"
++#include "third_party/blink/renderer/core/typed_arrays/flexible_array_buffer_view.h"
+ #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h"
+
+ namespace blink {
+@@ -698,12 +699,11 @@ DOMArrayBufferBase* NativeValueTraits<
+ // ArrayBufferView
+
+ template <typename T>
+-NotShared<T> NativeValueTraits<
+- NotShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -712,13 +712,12 @@ NotShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-NotShared<T> NativeValueTraits<
+- NotShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++NotShared<T> NativeValueTraits<NotShared<T>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -729,12 +728,11 @@ NotShared<T> NativeValueTraits<
+ // [AllowShared] ArrayBufferView
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- MaybeShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -743,13 +741,12 @@ MaybeShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- MaybeShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<MaybeShared<T>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -760,12 +757,12 @@ MaybeShared<T> NativeValueTraits<
+ // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T>
++NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
+@@ -774,13 +771,12 @@ MaybeShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<
++ MaybeShared<T>>>::ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
+@@ -791,12 +787,11 @@ MaybeShared<T> NativeValueTraits<
+ // Nullable ArrayBufferView
+
+ template <typename T>
+-NotShared<T> NativeValueTraits<
+- IDLNullable<NotShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -805,13 +800,12 @@ NotShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-NotShared<T> NativeValueTraits<
+- IDLNullable<NotShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -822,12 +816,11 @@ NotShared<T> NativeValueTraits<
+ // Nullable [AllowShared] ArrayBufferView
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLNullable<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- NativeValue(v8::Isolate* isolate,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
++ v8::Isolate* isolate,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -836,13 +829,12 @@ MaybeShared<T> NativeValueTraits<
+ }
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLNullable<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
+ ToDOMViewType<T, kMaybeShared>,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -853,9 +845,9 @@ MaybeShared<T> NativeValueTraits<
+ // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
+
+ template <typename T>
+-MaybeShared<T> NativeValueTraits<
+- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++ requires std::derived_from<T, DOMArrayBufferView>
++MaybeShared<T>
++NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
+ ArgumentValue(v8::Isolate* isolate,
+ int argument_index,
+ v8::Local<v8::Value> value,
+@@ -870,13 +862,11 @@ MaybeShared<T> NativeValueTraits<
+ // [AllowShared, FlexibleArrayBufferView] ArrayBufferView
+
+ template <typename T>
+-T NativeValueTraits<T,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
+ Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+ ResizableAllowance::kDisallowResizable,
+@@ -888,13 +878,12 @@ T NativeValueTraits<T,
+ // ArrayBufferView
+
+ template <typename T>
+-T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<
+ RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
+ BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
+@@ -905,13 +894,12 @@ T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
+ // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
+
+ template <typename T>
+-T NativeValueTraits<IDLNullable<T>,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>::
+- ArgumentValue(v8::Isolate* isolate,
+- int argument_index,
+- v8::Local<v8::Value> value,
+- ExceptionState& exception_state) {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++T NativeValueTraits<IDLNullable<T>>::ArgumentValue(
++ v8::Isolate* isolate,
++ int argument_index,
++ v8::Local<v8::Value> value,
++ ExceptionState& exception_state) {
+ return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
+ Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+ ResizableAllowance::kDisallowResizable,
+diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+index 899929dcf49f90a..5011503dcf1c0c8 100644
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+@@ -5,6 +5,9 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_
+ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_
+
++#include <concepts>
++#include <type_traits>
++
+ #include "third_party/abseil-cpp/absl/types/optional.h"
+ #include "third_party/blink/renderer/bindings/core/v8/idl_types.h"
+ #include "third_party/blink/renderer/bindings/core/v8/native_value_traits.h"
+@@ -715,9 +718,8 @@ struct CORE_EXPORT NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<T> {
+ // NotShared<T> or MaybeShared<T> should be used instead.
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -729,9 +731,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<IDLNullable<T>> {
+ // NotShared<T> or MaybeShared<T> should be used instead.
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -743,9 +744,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- NotShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<NotShared<T>>
+ : public NativeValueTraitsBase<NotShared<T>> {
+ static NotShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -758,9 +758,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<NotShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<IDLNullable<NotShared<T>>>
+ : public NativeValueTraitsBase<NotShared<T>> {
+ static NotShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -773,9 +772,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- MaybeShared<T>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<MaybeShared<T>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -788,9 +786,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ // FlexibleArrayBufferView uses this in its implementation, so we cannot
+ // delete it.
+@@ -805,9 +802,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<MaybeShared<T>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ requires std::derived_from<T, DOMArrayBufferView>
++struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -820,9 +816,9 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
++ requires std::derived_from<T, DOMArrayBufferView>
+ struct NativeValueTraits<
+- IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
+- typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
++ IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
+ : public NativeValueTraitsBase<MaybeShared<T>> {
+ // BufferSourceTypeNoSizeLimit must be used only as arguments.
+ static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+@@ -836,11 +832,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>
+- : public NativeValueTraitsBase<T> {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
+ // FlexibleArrayBufferView must be used only as arguments.
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -853,10 +846,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLBufferSourceTypeNoSizeLimit<T>,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>
++ requires std::derived_from<T, FlexibleArrayBufferView>
++struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
+ : public NativeValueTraitsBase<T> {
+ // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
+ // as arguments.
+@@ -871,11 +862,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<
+- std::is_base_of<FlexibleArrayBufferView, T>::value>>
+- : public NativeValueTraitsBase<T> {
++ requires std::derived_from<T, FlexibleArrayBufferView>
++struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
+ // FlexibleArrayBufferView must be used only as arguments.
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1134,9 +1122,8 @@ NativeValueTraits<IDLSequence<T>>::NativeValue(
+ }
+
+ template <typename T>
+-struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
+- typename std::enable_if_t<
+- NativeValueTraits<IDLSequence<T>>::has_null_value>>
++ requires NativeValueTraits<IDLSequence<T>>::has_null_value
++struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
+ : public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
+ using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
+
+@@ -1203,9 +1190,8 @@ struct NativeValueTraits<IDLArray<T>>
+ : public NativeValueTraits<IDLSequence<T>> {};
+
+ template <typename T>
+-struct NativeValueTraits<IDLNullable<IDLArray<T>>,
+- typename std::enable_if_t<
+- NativeValueTraits<IDLSequence<T>>::has_null_value>>
++ requires NativeValueTraits<IDLSequence<T>>::has_null_value
++struct NativeValueTraits<IDLNullable<IDLArray<T>>>
+ : public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
+
+ // Record types
+@@ -1335,10 +1321,8 @@ struct NativeValueTraits<IDLRecord<K, V>>
+
+ // Callback function types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, CallbackFunctionBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1361,9 +1345,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
++ requires std::derived_from<T, CallbackFunctionBase>
++struct NativeValueTraits<IDLNullable<T>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1392,10 +1375,8 @@ struct NativeValueTraits<
+
+ // Callback interface types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, CallbackInterfaceBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1418,9 +1399,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
++ requires std::derived_from<T, CallbackInterfaceBase>
++struct NativeValueTraits<IDLNullable<T>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1449,11 +1429,8 @@ struct NativeValueTraits<
+
+ // Dictionary types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<
+- std::is_base_of<bindings::DictionaryBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, bindings::DictionaryBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1464,14 +1441,11 @@ struct NativeValueTraits<
+ // We don't support nullable dictionary types in general since it's quite
+ // confusing and often misused.
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<
+- std::is_base_of<bindings::DictionaryBase, T>::value &&
+- (std::is_same<T, GPUColorTargetState>::value ||
+- std::is_same<T, GPURenderPassColorAttachment>::value ||
+- std::is_same<T, GPUVertexBufferLayout>::value)>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, bindings::DictionaryBase> &&
++ (std::same_as<T, GPUColorTargetState> ||
++ std::same_as<T, GPURenderPassColorAttachment> ||
++ std::same_as<T, GPUVertexBufferLayout>)
++struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1483,11 +1457,8 @@ struct NativeValueTraits<
+
+ // Enumeration types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<
+- std::is_base_of<bindings::EnumerationBase, T>::value>>
+- : public NativeValueTraitsBase<T> {
++ requires std::derived_from<T, bindings::EnumerationBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
+ static T NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1497,10 +1468,8 @@ struct NativeValueTraits<
+
+ // Interface types
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, ScriptWrappable>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static inline T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1528,9 +1497,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
++ requires std::derived_from<T, ScriptWrappable>
++struct NativeValueTraits<IDLNullable<T>>
+ : public NativeValueTraitsBase<IDLNullable<T>> {
+ static inline T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+@@ -1565,10 +1533,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- T,
+- typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, bindings::UnionBase>
++struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1584,10 +1550,8 @@ struct NativeValueTraits<
+ };
+
+ template <typename T>
+-struct NativeValueTraits<
+- IDLNullable<T>,
+- typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
+- : public NativeValueTraitsBase<T*> {
++ requires std::derived_from<T, bindings::UnionBase>
++struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
+ static T* NativeValue(v8::Isolate* isolate,
+ v8::Local<v8::Value> value,
+ ExceptionState& exception_state) {
+@@ -1608,9 +1572,8 @@ struct NativeValueTraits<
+
+ // Nullable types
+ template <typename InnerType>
+-struct NativeValueTraits<
+- IDLNullable<InnerType>,
+- typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
++ requires(!NativeValueTraits<InnerType>::has_null_value)
++struct NativeValueTraits<IDLNullable<InnerType>>
+ : public NativeValueTraitsBase<IDLNullable<InnerType>> {
+ // https://webidl.spec.whatwg.org/#es-nullable-type
+ using ImplType =
+@@ -1642,9 +1605,8 @@ struct NativeValueTraits<IDLNullable<IDLNullable<T>>>;
+
+ // Optional types
+ template <typename T>
+-struct NativeValueTraits<IDLOptional<T>,
+- typename std::enable_if_t<std::is_arithmetic<
+- typename NativeValueTraits<T>::ImplType>::value>>
++ requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
++struct NativeValueTraits<IDLOptional<T>>
+ : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
+ using ImplType = typename NativeValueTraits<T>::ImplType;
+
+@@ -1666,9 +1628,8 @@ struct NativeValueTraits<IDLOptional<T>,
+ };
+
+ template <typename T>
+-struct NativeValueTraits<IDLOptional<T>,
+- typename std::enable_if_t<std::is_pointer<
+- typename NativeValueTraits<T>::ImplType>::value>>
++ requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
++struct NativeValueTraits<IDLOptional<T>>
+ : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
+ using ImplType = typename NativeValueTraits<T>::ImplType;
+