public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Than Ngo <than@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/chromium] epel9-next: fixed compiler error with clang16 on epel 8/9 and fedora38
Date: Fri, 07 Aug 2026 16:06:03 GMT	[thread overview]
Message-ID: <178611876319.1.13216866179243091660.rpms-chromium-a058070a7fc1@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/chromium
Branch : epel9-next
Commit : a058070a7fc1ff0bd7be10016492957c9ce896ef
Author : Than Ngo <than@redhat.com>
Date   : 2024-02-22T08:44:31+01:00
Stats  : +920/-744 in 4 file(s)
URL    : https://src.fedoraproject.org/rpms/chromium/c/a058070a7fc1ff0bd7be10016492957c9ce896ef?branch=epel9-next

Log:
fixed compiler error with clang16 on epel 8/9 and fedora38

---
diff --git a/chromium-121-v8-c++20-p1.patch b/chromium-121-v8-c++20-p1.patch
new file mode 100644
index 0000000..bdf6c01
--- /dev/null
+++ b/chromium-121-v8-c++20-p1.patch
@@ -0,0 +1,171 @@
+commit ce71348a09f6689dd01a68db64b172191d0182d8
+Author: Andrey Kosyakov <caseq@chromium.org>
+Date:   Thu Dec 21 18:38:38 2023 +0000
+
+    [bindings] Use v8::Array::Iterate for converting script wrappables
+    
+    
+    This changes CreateIDLSequenceFromV8Array to use the new
+    v8::Array::Iterate() operation.
+    This speeds up the "execBundles" part of the microbenchmark
+    at crbug.com/dawn/1858 by around 3x.
+    This depends on crrev.com/c/4846594 landing (and rolling) first.
+    
+    This is a slight re-work of https://crrev.com/c/4847447/3,
+    originally by jkummerow@chromium.org
+    
+    Bug: v8:14218, dawn:1858, 1511239
+    Change-Id: Ia266556d05b4d53e6942e12609d1c08882b4ff0f
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5132129
+    Commit-Queue: Andrey Kosyakov <caseq@chromium.org>
+    Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1240236}
+
+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 1e5a0790df6da..a5c28b37e9454 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
+@@ -84,6 +84,12 @@ struct NativeValueTraitsBase {
+       std::is_pointer_v<ImplType> ||
+       requires(ImplType value) { value.IsNull(); };
+ 
++  // This should only be true for certain subclasses of ScriptWrappable
++  // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
++  // regards to how NativeValue() is implemented for the underlying type.
++  static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
++      false;
++
+   template <typename... ExtraArgs>
+   static decltype(auto) ArgumentValue(v8::Isolate* isolate,
+                                       int argument_index,
+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 5011503dcf1c0..f085b6e905161 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
+@@ -1037,10 +1037,86 @@ CreateIDLSequenceFromV8ArraySlow(v8::Isolate* isolate,
+     return {};
+   }
+ 
+-  typename NativeValueTraits<IDLSequence<T>>::ImplType result;
++  using ResultType = typename NativeValueTraits<IDLSequence<T>>::ImplType;
++  ResultType result;
+   result.ReserveInitialCapacity(length);
+   v8::Local<v8::Context> current_context = isolate->GetCurrentContext();
+   v8::TryCatch try_block(isolate);
++
++  // Fast path -- we're creating a sequence of script wrappables, which can be
++  // done by directly getting underlying object as long as array types are
++  // homogeneous. With ScriptWrappables, we don't expect to enter JS during
++  // iteration, so we can rely on v8::Array::Iterate() which is much faster than
++  // iterating an array on the client side of the v8. Additionally, for most
++  // subsptyes of ScriptWrappables, we can speed up type checks (see more on
++  // that below next to supports_scriptwrappable_specific_fast_array_iteration
++  // check.
++  if constexpr (std::is_base_of_v<ScriptWrappable, T>) {
++    struct CallbackData {
++      STACK_ALLOCATED();
++
++     public:
++      v8::Isolate* isolate;
++      v8::TypecheckWitness witness;
++      ResultType& result;
++      ExceptionState& exception_state;
++      CallbackData(v8::Isolate* isolate,
++                   ResultType& result,
++                   ExceptionState& exception_state)
++          : isolate(isolate),
++            witness(isolate),
++            result(result),
++            exception_state(exception_state) {}
++    };
++
++    CallbackData callback_data(isolate, result, exception_state);
++    v8::Array::IterationCallback callback = [](uint32_t index,
++                                               v8::Local<v8::Value> v8_element,
++                                               void* data) {
++      CallbackData* callback_data = reinterpret_cast<CallbackData*>(data);
++      // 3.4. Initialize Si to the result of converting nextItem to an IDL value
++      //   of type T.
++      v8::TypecheckWitness& witness = callback_data->witness;
++      // We can speed up type check by taking advantage of V8's type witness,
++      // provided traits' NativeValue implementation doesn't have additional
++      // logic beyond checking the type and calling ToScriptWrappable().
++      if constexpr (
++          NativeValueTraits<
++              T>::supports_scriptwrappable_specific_fast_array_iteration) {
++        if (witness.Matches(v8_element)) {
++          auto&& value = ToScriptWrappable(v8_element.As<v8::Object>())
++                             ->template ToImpl<T>();
++          callback_data->result.push_back(std::move(value));
++          return v8::Array::CallbackResult::kContinue;
++        }
++      }
++      auto&& element = NativeValueTraits<T>::NativeValue(
++          callback_data->isolate, v8_element, callback_data->exception_state);
++      if (callback_data->exception_state.HadException()) {
++        // It doesn't matter whether we return `kException` or `kBreak` here,
++        // as that only affects the return value of `v8_array->Iterate()`,
++        // which we are ignoring.
++        return v8::Array::CallbackResult::kException;
++      }
++      if constexpr (
++          NativeValueTraits<
++              T>::supports_scriptwrappable_specific_fast_array_iteration) {
++        witness.Update(v8_element);
++      }
++      callback_data->result.push_back(std::move(element));
++      return v8::Array::CallbackResult::kContinue;
++    };
++    if (!v8_array->Iterate(current_context, callback, &callback_data)
++             .IsJust()) {
++      if (try_block.HasCaught()) {
++        exception_state.RethrowV8Exception(try_block.Exception());
++      }
++      DCHECK(exception_state.HadException());
++      return {};
++    }
++    return result;
++  }
++
+   // Array length may change if array is mutated during iteration.
+   for (uint32_t i = 0; i < v8_array->Length(); ++i) {
+     v8::Local<v8::Value> v8_element;
+@@ -1056,6 +1132,7 @@ CreateIDLSequenceFromV8ArraySlow(v8::Isolate* isolate,
+       return {};
+     result.push_back(std::move(element));
+   }
++
+   // 3.2. If next is false, then return an IDL sequence value of type
+   //   sequence<T> of length i, where the value of the element at index j is Sj.
+   return result;
+@@ -1398,6 +1475,7 @@ struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
+   }
+ };
+ 
++// Interface types
+ template <typename T>
+   requires std::derived_from<T, CallbackInterfaceBase>
+ struct NativeValueTraits<IDLNullable<T>>
+@@ -1470,12 +1548,21 @@ struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
+ template <typename T>
+   requires std::derived_from<T, ScriptWrappable>
+ struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++  // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
++  // certain optimization based on assumptions about `NativeValue()`
++  // implementation below. For subclasses of ScriptWrappable that have
++  // different implementation of NativeValue(), this should remain false.
++  static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
++      true;
++
+   static inline T* NativeValue(v8::Isolate* isolate,
+                                v8::Local<v8::Value> value,
+                                ExceptionState& exception_state) {
+     const WrapperTypeInfo* wrapper_type_info = T::GetStaticWrapperTypeInfo();
+-    if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info, value))
++    if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info,
++                                                     value)) {
+       return ToScriptWrappable(value.As<v8::Object>())->template ToImpl<T>();
++    }
+ 
+     bindings::NativeValueTraitsInterfaceNotOfType(wrapper_type_info,
+                                                   exception_state);

diff --git a/chromium-121-v8-c++20.patch b/chromium-121-v8-c++20.patch
new file mode 100644
index 0000000..3b3bb50
--- /dev/null
+++ b/chromium-121-v8-c++20.patch
@@ -0,0 +1,743 @@
+commit 940af9f2c87b436559b97c53763aa9eaaf1254eb
+Author: Jeremy Roman <jbroman@chromium.org>
+Date:   Wed Nov 15 16:24:54 2023 +0000
+
+    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}
+
+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 7fc91d14acc71..1e5a0790df6da 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 508ea6d8eea48..18de71d84023f 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 899929dcf49f9..5011503dcf1c0 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;
+ 

diff --git a/chromium-122-v8-c++20.patch b/chromium-122-v8-c++20.patch
deleted file mode 100644
index 2b40db2..0000000
--- a/chromium-122-v8-c++20.patch
+++ /dev/null
@@ -1,740 +0,0 @@
-commit 940af9f2c87b436559b97c53763aa9eaaf1254eb
-Author: Jeremy Roman <jbroman@chromium.org>
-Date:   Wed Nov 15 16:24:54 2023 +0000
-
-    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}
-
-diff -up chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc.me chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
---- chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc.me	2024-02-21 01:20:53.138946500 +0100
-+++ chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc	2024-02-21 12:33:53.226207103 +0100
-@@ -7,7 +7,6 @@
- #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 {
-@@ -699,11 +698,12 @@ DOMArrayBufferBase* NativeValueTraits<
- // ArrayBufferView
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
--    v8::Isolate* isolate,
--    v8::Local<v8::Value> value,
--    ExceptionState& exception_state) {
-+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) {
-   return NativeValueImpl<
-       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
-       Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -712,12 +712,13 @@ NotShared<T> NativeValueTraits<NotShared
- }
- 
- template <typename T>
--  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) {
-+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) {
-   return ArgumentValueImpl<
-       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
-       Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -728,11 +729,12 @@ NotShared<T> NativeValueTraits<NotShared
- // [AllowShared] ArrayBufferView
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
--    v8::Isolate* isolate,
--    v8::Local<v8::Value> value,
--    ExceptionState& exception_state) {
-+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) {
-   return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
-                          ToDOMViewType<T, kMaybeShared>,
-                          Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -741,12 +743,13 @@ MaybeShared<T> NativeValueTraits<MaybeSh
- }
- 
- template <typename T>
--  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) {
-+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) {
-   return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
-                            ToDOMViewType<T, kMaybeShared>,
-                            Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -757,12 +760,12 @@ MaybeShared<T> NativeValueTraits<MaybeSh
- // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--MaybeShared<T>
--NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
--    v8::Isolate* isolate,
--    v8::Local<v8::Value> value,
--    ExceptionState& exception_state) {
-+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) {
-   return NativeValueImpl<
-       RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
-       Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
-@@ -771,12 +774,13 @@ NativeValueTraits<IDLBufferSourceTypeNoS
- }
- 
- template <typename T>
--  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) {
-+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) {
-   return ArgumentValueImpl<
-       RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
-       Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
-@@ -787,11 +791,12 @@ MaybeShared<T> NativeValueTraits<IDLBuff
- // Nullable ArrayBufferView
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
--    v8::Isolate* isolate,
--    v8::Local<v8::Value> value,
--    ExceptionState& exception_state) {
-+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) {
-   return NativeValueImpl<
-       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
-       Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -800,12 +805,13 @@ NotShared<T> NativeValueTraits<IDLNullab
- }
- 
- template <typename T>
--  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) {
-+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) {
-   return ArgumentValueImpl<
-       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
-       Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -816,11 +822,12 @@ NotShared<T> NativeValueTraits<IDLNullab
- // Nullable [AllowShared] ArrayBufferView
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
--    v8::Isolate* isolate,
--    v8::Local<v8::Value> value,
--    ExceptionState& exception_state) {
-+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) {
-   return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
-                          ToDOMViewType<T, kMaybeShared>,
-                          Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -829,12 +836,13 @@ MaybeShared<T> NativeValueTraits<IDLNull
- }
- 
- template <typename T>
--  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) {
-+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) {
-   return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
-                            ToDOMViewType<T, kMaybeShared>,
-                            Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -845,9 +853,9 @@ MaybeShared<T> NativeValueTraits<IDLNull
- // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--MaybeShared<T>
--NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
-+MaybeShared<T> NativeValueTraits<
-+    IDLNullable<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,
-@@ -862,11 +870,13 @@ NativeValueTraits<IDLNullable<IDLBufferS
- // [AllowShared, FlexibleArrayBufferView] ArrayBufferView
- 
- template <typename T>
--  requires std::derived_from<T, FlexibleArrayBufferView>
--T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
--                                      int argument_index,
--                                      v8::Local<v8::Value> value,
--                                      ExceptionState& exception_state) {
-+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) {
-   return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
-                            Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-                            ResizableAllowance::kDisallowResizable,
-@@ -878,12 +888,13 @@ T NativeValueTraits<T>::ArgumentValue(v8
- // ArrayBufferView
- 
- template <typename T>
--  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) {
-+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) {
-   return ArgumentValueImpl<
-       RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
-       BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
-@@ -894,12 +905,13 @@ T NativeValueTraits<IDLBufferSourceTypeN
- // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
- 
- template <typename T>
--  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) {
-+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) {
-   return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
-                            Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-                            ResizableAllowance::kDisallowResizable,
-diff -up chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits.h.me chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
---- chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits.h.me	2024-02-21 01:20:53.138946500 +0100
-+++ chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits.h	2024-02-21 12:33:53.225207075 +0100
-@@ -5,7 +5,6 @@
- #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"
-@@ -31,7 +30,7 @@ class ExceptionState;
- //     return toInt32(isolate, value, exceptionState, NormalConversion);
- //   }
- // }
--template <typename T>
-+template <typename T, typename SFINAEHelper = void>
- struct NativeValueTraits;
- 
- // This declaration serves only as a blueprint for specializations: the
-@@ -46,15 +45,22 @@ struct NativeValueTraits;
- 
- namespace bindings {
- 
-+template <typename T, typename = void>
-+struct NativeValueTraitsHasIsNull : std::false_type {};
-+
- template <typename T>
--struct ImplTypeFor {
--  using type = T;
--};
-+struct NativeValueTraitsHasIsNull<
-+    T,
-+    std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
- 
- template <typename T>
--  requires std::derived_from<T, IDLBase>
--struct ImplTypeFor<T> {
--  using type = typename T::ImplType;
-+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;
- };
- 
- }  // namespace bindings
-@@ -72,17 +78,37 @@ struct ImplTypeFor<T> {
- // 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>
-+template <typename T, typename SFINAEHelper = void>
- struct NativeValueTraitsBase {
-   STATIC_ONLY(NativeValueTraitsBase);
- 
--  using ImplType = bindings::ImplTypeFor<T>::type;
-+  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>> {
-+  STATIC_ONLY(NativeValueTraitsBase);
-+
-+  using ImplType = typename T::ImplType;
- 
--  // Pointer types have nullptr as IDL null value.
--  // ScriptValue, String, and union types have IsNull member function.
-   static constexpr bool has_null_value =
--      std::is_pointer_v<ImplType> ||
--      requires(ImplType value) { value.IsNull(); };
-+      bindings::NativeValueTraitsHasNullValue<ImplType>::value;
- 
-   // This should only be true for certain subclasses of ScriptWrappable
-   // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
-diff -up chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h.me chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
---- chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h.me	2024-02-21 01:20:53.138946500 +0100
-+++ chromium-122.0.6261.57/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h	2024-02-21 12:33:53.227207131 +0100
-@@ -5,9 +5,6 @@
- #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"
-@@ -736,8 +733,9 @@ struct CORE_EXPORT NativeValueTraits<
- };
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--struct NativeValueTraits<T> {
-+struct NativeValueTraits<
-+    T,
-+    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
-   // NotShared<T> or MaybeShared<T> should be used instead.
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-@@ -749,8 +747,9 @@ struct NativeValueTraits<T> {
- };
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--struct NativeValueTraits<IDLNullable<T>> {
-+struct NativeValueTraits<
-+    IDLNullable<T>,
-+    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
-   // NotShared<T> or MaybeShared<T> should be used instead.
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-@@ -762,8 +761,9 @@ struct NativeValueTraits<IDLNullable<T>>
- };
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--struct NativeValueTraits<NotShared<T>>
-+struct NativeValueTraits<
-+    NotShared<T>,
-+    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-     : public NativeValueTraitsBase<NotShared<T>> {
-   static NotShared<T> NativeValue(v8::Isolate* isolate,
-                                   v8::Local<v8::Value> value,
-@@ -776,8 +776,9 @@ struct NativeValueTraits<NotShared<T>>
- };
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--struct NativeValueTraits<IDLNullable<NotShared<T>>>
-+struct NativeValueTraits<
-+    IDLNullable<NotShared<T>>,
-+    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-     : public NativeValueTraitsBase<NotShared<T>> {
-   static NotShared<T> NativeValue(v8::Isolate* isolate,
-                                   v8::Local<v8::Value> value,
-@@ -790,8 +791,9 @@ struct NativeValueTraits<IDLNullable<Not
- };
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--struct NativeValueTraits<MaybeShared<T>>
-+struct NativeValueTraits<
-+    MaybeShared<T>,
-+    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-     : public NativeValueTraitsBase<MaybeShared<T>> {
-   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
-                                     v8::Local<v8::Value> value,
-@@ -804,8 +806,9 @@ struct NativeValueTraits<MaybeShared<T>>
- };
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
-+struct NativeValueTraits<
-+    IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
-+    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-     : public NativeValueTraitsBase<MaybeShared<T>> {
-   // FlexibleArrayBufferView uses this in its implementation, so we cannot
-   // delete it.
-@@ -820,8 +823,9 @@ struct NativeValueTraits<IDLBufferSource
- };
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
--struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
-+struct NativeValueTraits<
-+    IDLNullable<MaybeShared<T>>,
-+    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-     : public NativeValueTraitsBase<MaybeShared<T>> {
-   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
-                                     v8::Local<v8::Value> value,
-@@ -834,9 +838,9 @@ struct NativeValueTraits<IDLNullable<May
- };
- 
- template <typename T>
--  requires std::derived_from<T, DOMArrayBufferView>
- struct NativeValueTraits<
--    IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
-+    IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
-+    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-     : public NativeValueTraitsBase<MaybeShared<T>> {
-   // BufferSourceTypeNoSizeLimit must be used only as arguments.
-   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
-@@ -850,8 +854,11 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--  requires std::derived_from<T, FlexibleArrayBufferView>
--struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
-+struct NativeValueTraits<
-+    T,
-+    typename std::enable_if_t<
-+        std::is_base_of<FlexibleArrayBufferView, T>::value>>
-+    : public NativeValueTraitsBase<T> {
-   // FlexibleArrayBufferView must be used only as arguments.
-   static T NativeValue(v8::Isolate* isolate,
-                        v8::Local<v8::Value> value,
-@@ -864,8 +871,10 @@ struct NativeValueTraits<T> : public Nat
- };
- 
- template <typename T>
--  requires std::derived_from<T, FlexibleArrayBufferView>
--struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
-+struct NativeValueTraits<
-+    IDLBufferSourceTypeNoSizeLimit<T>,
-+    typename std::enable_if_t<
-+        std::is_base_of<FlexibleArrayBufferView, T>::value>>
-     : public NativeValueTraitsBase<T> {
-   // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
-   // as arguments.
-@@ -880,8 +889,11 @@ struct NativeValueTraits<IDLBufferSource
- };
- 
- template <typename T>
--  requires std::derived_from<T, FlexibleArrayBufferView>
--struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
-+struct NativeValueTraits<
-+    IDLNullable<T>,
-+    typename std::enable_if_t<
-+        std::is_base_of<FlexibleArrayBufferView, T>::value>>
-+    : public NativeValueTraitsBase<T> {
-   // FlexibleArrayBufferView must be used only as arguments.
-   static T NativeValue(v8::Isolate* isolate,
-                        v8::Local<v8::Value> value,
-@@ -1217,8 +1229,9 @@ NativeValueTraits<IDLSequence<T>>::Nativ
- }
- 
- template <typename T>
--  requires NativeValueTraits<IDLSequence<T>>::has_null_value
--struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
-+struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
-+                         typename std::enable_if_t<
-+                             NativeValueTraits<IDLSequence<T>>::has_null_value>>
-     : public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
-   using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
- 
-@@ -1294,8 +1307,9 @@ struct NativeValueTraits<IDLArray<T>>
-     : public NativeValueTraits<IDLSequence<T>> {};
- 
- template <typename T>
--  requires NativeValueTraits<IDLSequence<T>>::has_null_value
--struct NativeValueTraits<IDLNullable<IDLArray<T>>>
-+struct NativeValueTraits<IDLNullable<IDLArray<T>>,
-+                         typename std::enable_if_t<
-+                             NativeValueTraits<IDLSequence<T>>::has_null_value>>
-     : public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
- 
- // Record types
-@@ -1425,8 +1439,10 @@ struct NativeValueTraits<IDLRecord<K, V>
- 
- // Callback function types
- template <typename T>
--  requires std::derived_from<T, CallbackFunctionBase>
--struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-+struct NativeValueTraits<
-+    T,
-+    typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
-+    : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1449,8 +1465,9 @@ struct NativeValueTraits<T> : public Nat
- };
- 
- template <typename T>
--  requires std::derived_from<T, CallbackFunctionBase>
--struct NativeValueTraits<IDLNullable<T>>
-+struct NativeValueTraits<
-+    IDLNullable<T>,
-+    typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
-     : public NativeValueTraitsBase<IDLNullable<T>> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-@@ -1479,8 +1496,10 @@ struct NativeValueTraits<IDLNullable<T>>
- 
- // Callback interface types
- template <typename T>
--  requires std::derived_from<T, CallbackInterfaceBase>
--struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-+struct NativeValueTraits<
-+    T,
-+    typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
-+    : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1504,8 +1523,9 @@ struct NativeValueTraits<T> : public Nat
- 
- // Interface types
- template <typename T>
--  requires std::derived_from<T, CallbackInterfaceBase>
--struct NativeValueTraits<IDLNullable<T>>
-+struct NativeValueTraits<
-+    IDLNullable<T>,
-+    typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
-     : public NativeValueTraitsBase<IDLNullable<T>> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-@@ -1534,8 +1554,11 @@ struct NativeValueTraits<IDLNullable<T>>
- 
- // Dictionary types
- template <typename T>
--  requires std::derived_from<T, bindings::DictionaryBase>
--struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-+struct NativeValueTraits<
-+    T,
-+    typename std::enable_if_t<
-+        std::is_base_of<bindings::DictionaryBase, T>::value>>
-+    : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1546,11 +1569,14 @@ struct NativeValueTraits<T> : public Nat
- // We don't support nullable dictionary types in general since it's quite
- // confusing and often misused.
- template <typename 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*> {
-+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*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1562,8 +1588,11 @@ struct NativeValueTraits<IDLNullable<T>>
- 
- // Enumeration types
- template <typename T>
--  requires std::derived_from<T, bindings::EnumerationBase>
--struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
-+struct NativeValueTraits<
-+    T,
-+    typename std::enable_if_t<
-+        std::is_base_of<bindings::EnumerationBase, T>::value>>
-+    : public NativeValueTraitsBase<T> {
-   static T NativeValue(v8::Isolate* isolate,
-                        v8::Local<v8::Value> value,
-                        ExceptionState& exception_state) {
-@@ -1573,8 +1602,10 @@ struct NativeValueTraits<T> : public Nat
- 
- // Interface types
- template <typename T>
--  requires std::derived_from<T, ScriptWrappable>
--struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-+struct NativeValueTraits<
-+    T,
-+    typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
-+    : public NativeValueTraitsBase<T*> {
-   // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
-   // certain optimization based on assumptions about `NativeValue()`
-   // implementation below. For subclasses of ScriptWrappable that have
-@@ -1611,8 +1642,9 @@ struct NativeValueTraits<T> : public Nat
- };
- 
- template <typename T>
--  requires std::derived_from<T, ScriptWrappable>
--struct NativeValueTraits<IDLNullable<T>>
-+struct NativeValueTraits<
-+    IDLNullable<T>,
-+    typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
-     : public NativeValueTraitsBase<IDLNullable<T>> {
-   static inline T* NativeValue(v8::Isolate* isolate,
-                                v8::Local<v8::Value> value,
-@@ -1647,8 +1679,10 @@ struct NativeValueTraits<IDLNullable<T>>
- };
- 
- template <typename T>
--  requires std::derived_from<T, bindings::UnionBase>
--struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-+struct NativeValueTraits<
-+    T,
-+    typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
-+    : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1664,8 +1698,10 @@ struct NativeValueTraits<T> : public Nat
- };
- 
- template <typename T>
--  requires std::derived_from<T, bindings::UnionBase>
--struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
-+struct NativeValueTraits<
-+    IDLNullable<T>,
-+    typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
-+    : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1686,8 +1722,9 @@ struct NativeValueTraits<IDLNullable<T>>
- 
- // Nullable types
- template <typename InnerType>
--  requires(!NativeValueTraits<InnerType>::has_null_value)
--struct NativeValueTraits<IDLNullable<InnerType>>
-+struct NativeValueTraits<
-+    IDLNullable<InnerType>,
-+    typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
-     : public NativeValueTraitsBase<IDLNullable<InnerType>> {
-   // https://webidl.spec.whatwg.org/#es-nullable-type
-   using ImplType =
-@@ -1719,8 +1756,9 @@ struct NativeValueTraits<IDLNullable<IDL
- 
- // Optional types
- template <typename T>
--  requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
--struct NativeValueTraits<IDLOptional<T>>
-+struct NativeValueTraits<IDLOptional<T>,
-+                         typename std::enable_if_t<std::is_arithmetic<
-+                             typename NativeValueTraits<T>::ImplType>::value>>
-     : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
-   using ImplType = typename NativeValueTraits<T>::ImplType;
- 
-@@ -1742,8 +1780,9 @@ struct NativeValueTraits<IDLOptional<T>>
- };
- 
- template <typename T>
--  requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
--struct NativeValueTraits<IDLOptional<T>>
-+struct NativeValueTraits<IDLOptional<T>,
-+                         typename std::enable_if_t<std::is_pointer<
-+                             typename NativeValueTraits<T>::ImplType>::value>>
-     : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
-   using ImplType = typename NativeValueTraits<T>::ImplType;
- 

diff --git a/chromium.spec b/chromium.spec
index 3a14f94..ea5b2ff 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -430,9 +430,9 @@ Patch304: chromium-117-string-convert.patch
 Patch306: chromium-119-assert.patch
 
 # compiler errors on epel
-Patch307: chromium-122-clang16-buildflags.patch
 # revert it for old clang on rhel and f38
-Patch308: chromium-122-v8-c++20.patch
+Patch307: chromium-121-v8-c++20-p1.patch
+Patch308: chromium-121-v8-c++20.patch
 Patch309: chromium-122-constexpr.patch
 
 # missing include header files
@@ -446,6 +446,7 @@ Patch312: chromium-119-fstack-protector-strong.patch
 
 # fixed static assert error
 Patch313: chromium-122-static-assert.patch
+Patch314: chromium-122-clang16-buildflags.patch
 
 # build error
 Patch351: chromium-121-mnemonic-error.patch
@@ -1115,10 +1116,11 @@ udev.
 %endif
 
 %if 0%{?rhel} || 0%{?fedora} && 0%{?fedora} < 39
-%patch -P307 -p1 -b .clang16-buildflag
-%patch -P308 -p1 -b .v8-c++20
+%patch -P307 -p1 -R -b .v8-c++20
+%patch -P308 -p1 -R -b .v8-c++20
 %patch -P309 -p1 -b .constexpr
 %patch -P313 -p1 -b .static-assert
+%patch -P314 -p1 -b .clang16-buildflag
 %endif
 
 %patch -P310 -p1 -b .missing-header-files

                 reply	other threads:[~2026-08-07 16:06 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178611876319.1.13216866179243091660.rpms-chromium-a058070a7fc1@fedoraproject.org \
    --to=than@redhat.com \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox